JENA 625 test improvements:
1. refactor PropertyTableBuilder for unit tests
2. tests and bug fixes for parsing irregular csv table
3. out of bound tests for PropertyTableArrayImpl

git-svn-id: http://svn.apache.org/repos/asf/jena/Experimental/jena-csv@1616480 
13f79535-47bb-0310-9956-ffa450edef68


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/973eab60
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/973eab60
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/973eab60

Branch: refs/heads/master
Commit: 973eab60997f8deb01c997025191cca183ed9883
Parents: 4522c99
Author: Ying Jiang <[email protected]>
Authored: Thu Aug 7 12:31:53 2014 +0000
Committer: Ying Jiang <[email protected]>
Committed: Thu Aug 7 12:31:53 2014 +0000

----------------------------------------------------------------------
 .../impl/PropertyTableBuilder.java              |  25 +++-
 .../jena/propertytable/AbstractColumnTest.java  |  10 --
 .../org/apache/jena/propertytable/BaseTest.java |  12 ++
 .../jena/propertytable/TS_PropertyTable.java    |   6 +-
 .../impl/AbstractPropertyTableBuilderTest.java  | 142 +++++++++++++++++++
 .../impl/PropertyTableArrayImplTest.java        |  36 +++++
 .../PropertyTableBuilderForArrayImplTest.java   |  21 +++
 .../PropertyTableBuilderForHashMapImplTest.java |  16 +++
 8 files changed, 252 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/973eab60/src/main/java/org/apache/jena/propertytable/impl/PropertyTableBuilder.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/jena/propertytable/impl/PropertyTableBuilder.java 
b/src/main/java/org/apache/jena/propertytable/impl/PropertyTableBuilder.java
index ed64018..7a2a74f 100644
--- a/src/main/java/org/apache/jena/propertytable/impl/PropertyTableBuilder.java
+++ b/src/main/java/org/apache/jena/propertytable/impl/PropertyTableBuilder.java
@@ -18,10 +18,13 @@
 
 package org.apache.jena.propertytable.impl;
 
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.jena.atlas.csv.CSVParser;
+import org.apache.jena.atlas.csv.CSVTokenIterator;
+import org.apache.jena.atlas.io.IO;
 import org.apache.jena.propertytable.PropertyTable;
 import org.apache.jena.propertytable.Row;
 import org.apache.jena.riot.lang.LangCSV;
@@ -65,12 +68,17 @@ public class PropertyTableBuilder {
                }
        }
 
+       protected static PropertyTable fillPropertyTable(PropertyTable table, 
String csvFilePath ){
+               InputStream input = IO.openFile(csvFilePath) ;
+               CSVTokenIterator iterator = new CSVTokenIterator(input) ;
+               return fillPropertyTable(table, iterator, csvFilePath);
+       }
        
-       private static PropertyTable fillPropertyTable(PropertyTable table, 
String csvFilePath ){
+       protected static PropertyTable fillPropertyTable(PropertyTable table, 
CSVTokenIterator iterator, String csvFilePath){
                if (table == null){
                        return null;
                }
-               CSVParser parser = CSVParser.create(csvFilePath);
+               CSVParser parser = new CSVParser (iterator);
                List<String> rowLine = null;
                ArrayList<Node> predicates = new ArrayList<Node>();
                int rowNum = 0;
@@ -79,8 +87,7 @@ public class PropertyTableBuilder {
                        if (rowNum == 0) {
                                table.createColumn(CSV_ROW_NODE);
                                for (String column : rowLine) {
-                                       String uri = 
IRIResolver.resolveString(csvFilePath) + "#"
-                                                       + 
LangCSV.toSafeLocalname(column);
+                                       String uri = 
createColumnKeyURI(csvFilePath, column);
                                        Node p = NodeFactory.createURI(uri);
                                        predicates.add(p);
                                        table.createColumn(p);
@@ -92,9 +99,12 @@ public class PropertyTableBuilder {
                                row.setValue(table.getColumn(CSV_ROW_NODE), 
NodeFactory.createLiteral(
                                                (rowNum + ""), 
XSDDatatype.XSDinteger));
 
-                               for (int col = 0; col < rowLine.size(); col++) {
+                               for (int col = 0; col < rowLine.size() && 
col<predicates.size(); col++) {
 
                                        String columnValue = 
rowLine.get(col).trim();
+                                       if("".equals(columnValue)){
+                                               continue;
+                                       }
                                        Node o;
                                        try {
                                                // Try for a double.
@@ -111,4 +121,9 @@ public class PropertyTableBuilder {
                }
                return table;
        }
+       
+       protected static String createColumnKeyURI(String csvFilePath, String 
column){
+               String uri = IRIResolver.resolveString(csvFilePath) + "#" + 
LangCSV.toSafeLocalname(column);
+               return uri;
+       }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/973eab60/src/test/java/org/apache/jena/propertytable/AbstractColumnTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/jena/propertytable/AbstractColumnTest.java 
b/src/test/java/org/apache/jena/propertytable/AbstractColumnTest.java
index 26f6a85..0682618 100644
--- a/src/test/java/org/apache/jena/propertytable/AbstractColumnTest.java
+++ b/src/test/java/org/apache/jena/propertytable/AbstractColumnTest.java
@@ -18,7 +18,6 @@
 
 package org.apache.jena.propertytable;
 
-import java.util.Collection;
 import java.util.List;
 
 import org.junit.Assert;
@@ -68,19 +67,10 @@ public abstract class AbstractColumnTest extends BaseTest{
                Assert.assertNull(table.getColumn( 
URI("nonExistentColumnName")));
        }
 
-       
        @Test
        public void testGetTable() {
                Column something = table.createColumn(URI("something"));
                Assert.assertEquals(table, something.getTable());
        }
-       protected static boolean collectionContains(
-                       final Collection<Column> columns, final Node columnkey) 
{
-               for (final Column column : columns) {
-                       if (column.getColumnKey().equals(columnkey))
-                               return true;
-               }
-               return false;
-       }
 
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/973eab60/src/test/java/org/apache/jena/propertytable/BaseTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/jena/propertytable/BaseTest.java 
b/src/test/java/org/apache/jena/propertytable/BaseTest.java
index 3402704..282f649 100644
--- a/src/test/java/org/apache/jena/propertytable/BaseTest.java
+++ b/src/test/java/org/apache/jena/propertytable/BaseTest.java
@@ -18,6 +18,8 @@
 
 package org.apache.jena.propertytable;
 
+import java.util.Collection;
+
 import com.hp.hpl.jena.graph.Node;
 import com.hp.hpl.jena.graph.NodeFactory;
 
@@ -27,9 +29,19 @@ public abstract class BaseTest {
        protected Row row;
        private static final String ns = "eh:foo/bar#";
        protected static final Node rowSubject = URI("rowSubject");
+       protected static final String csvFilePath = 
"src/test/resources/test.csv";
        
        
        protected static Node URI(String localName) {
                return NodeFactory.createURI(ns + localName);
        }
+       
+       protected static boolean collectionContains(
+                       final Collection<Column> columns, final Node columnkey) 
{
+               for (final Column column : columns) {
+                       if (column.getColumnKey().equals(columnkey))
+                               return true;
+               }
+               return false;
+       }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/973eab60/src/test/java/org/apache/jena/propertytable/TS_PropertyTable.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/jena/propertytable/TS_PropertyTable.java 
b/src/test/java/org/apache/jena/propertytable/TS_PropertyTable.java
index 5c3c124..9c916e9 100644
--- a/src/test/java/org/apache/jena/propertytable/TS_PropertyTable.java
+++ b/src/test/java/org/apache/jena/propertytable/TS_PropertyTable.java
@@ -20,6 +20,8 @@ package org.apache.jena.propertytable;
 
 import org.apache.jena.propertytable.impl.GraphCSVTest;
 import org.apache.jena.propertytable.impl.PropertyTableArrayImplTest;
+import org.apache.jena.propertytable.impl.PropertyTableBuilderForArrayImplTest;
+import 
org.apache.jena.propertytable.impl.PropertyTableBuilderForHashMapImplTest;
 import org.apache.jena.propertytable.impl.PropertyTableHashMapImplTest;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
@@ -29,7 +31,9 @@ import org.junit.runners.Suite;
 @Suite.SuiteClasses( {
        PropertyTableArrayImplTest.class,
        PropertyTableHashMapImplTest.class,
-       GraphCSVTest.class
+       GraphCSVTest.class,
+       PropertyTableBuilderForArrayImplTest.class,
+       PropertyTableBuilderForHashMapImplTest.class,
 })
 public class TS_PropertyTable {
 

http://git-wip-us.apache.org/repos/asf/jena/blob/973eab60/src/test/java/org/apache/jena/propertytable/impl/AbstractPropertyTableBuilderTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/jena/propertytable/impl/AbstractPropertyTableBuilderTest.java
 
b/src/test/java/org/apache/jena/propertytable/impl/AbstractPropertyTableBuilderTest.java
new file mode 100644
index 0000000..ae7f565
--- /dev/null
+++ 
b/src/test/java/org/apache/jena/propertytable/impl/AbstractPropertyTableBuilderTest.java
@@ -0,0 +1,142 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.propertytable.impl;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+
+import org.apache.jena.atlas.csv.CSVTokenIterator;
+import org.apache.jena.propertytable.BaseTest;
+import org.apache.jena.propertytable.Row;
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.hp.hpl.jena.graph.Node;
+import com.hp.hpl.jena.graph.NodeFactory;
+
+public abstract class AbstractPropertyTableBuilderTest extends BaseTest {
+
+       @Test
+       public void testFillPropertyTable() {
+               CSVTokenIterator iterator = csv("a,b\nc,d\ne,f");
+               PropertyTableBuilder.fillPropertyTable(table, iterator, 
csvFilePath);
+
+               Assert.assertEquals(3, table.getColumns().size());
+               containsColumn(PropertyTableBuilder.CSV_ROW_NODE);
+               containsColumn("a");
+               containsColumn("b");
+
+               Assert.assertEquals(2, table.getAllRows().size());
+               containsValue(0, "a", "c");
+               containsValue(0, "b", "d");
+
+               containsValue(1, "a", "e");
+               containsValue(1, "b", "f");
+
+       }
+
+       @Test
+       public void testIrregularTable1() {
+               CSVTokenIterator iterator = csv("a,b\nc\ne,f");
+               PropertyTableBuilder.fillPropertyTable(table, iterator, 
csvFilePath);
+
+               Assert.assertEquals(3, table.getColumns().size());
+               containsColumn(PropertyTableBuilder.CSV_ROW_NODE);
+               containsColumn("a");
+               containsColumn("b");
+
+               Assert.assertEquals(2, table.getAllRows().size());
+               containsValue(0, "a", "c");
+               nullValue(0, "b");
+
+               containsValue(1, "a", "e");
+               containsValue(1, "b", "f");
+       }
+
+       @Test
+       public void testIrregularTable2() {
+               CSVTokenIterator iterator = csv("a,b\nc,d1,d2\ne,f");
+               PropertyTableBuilder.fillPropertyTable(table, iterator, 
csvFilePath);
+
+               Assert.assertEquals(3, table.getColumns().size());
+               containsColumn(PropertyTableBuilder.CSV_ROW_NODE);
+               containsColumn("a");
+               containsColumn("b");
+
+               Assert.assertEquals(2, table.getAllRows().size());
+               containsValue(0, "a", "c");
+               containsValue(0, "b", "d1");
+
+               containsValue(1, "a", "e");
+               containsValue(1, "b", "f");
+       }
+
+       @Test
+       public void testIrregularTable3() {
+               CSVTokenIterator iterator = csv("a,b\n,d\ne,f");
+               PropertyTableBuilder.fillPropertyTable(table, iterator, 
csvFilePath);
+
+               Assert.assertEquals(3, table.getColumns().size());
+               containsColumn(PropertyTableBuilder.CSV_ROW_NODE);
+               containsColumn("a");
+               containsColumn("b");
+
+               Assert.assertEquals(2, table.getAllRows().size());
+               nullValue(0, "a");
+               containsValue(0, "b", "d");
+
+               containsValue(1, "a", "e");
+               containsValue(1, "b", "f");
+       }
+
+       private void nullValue(int rowIndex, String column) {
+               Row row = table.getAllRows().get(rowIndex);
+               Node v = 
row.getValue(NodeFactory.createURI(getColumnKey(column)));
+               Assert.assertEquals(null, v);
+       }
+
+       private void containsValue(int rowIndex, String column, String value) {
+               Row row = table.getAllRows().get(rowIndex);
+               Node v = 
row.getValue(NodeFactory.createURI(getColumnKey(column)));
+               Assert.assertEquals(value, v.getLiteralValue());
+       }
+
+       private String getColumnKey(String column) {
+               return PropertyTableBuilder.createColumnKeyURI(csvFilePath, 
column);
+       }
+
+       private void containsColumn(String column) {
+               containsColumn(NodeFactory.createURI(getColumnKey(column)));
+       }
+
+       private void containsColumn(Node columnKey) {
+               Assert.assertTrue(collectionContains(table.getColumns(), 
columnKey));
+       }
+
+       private CSVTokenIterator csv(String input) {
+               try {
+                       InputStream in = new 
ByteArrayInputStream(input.getBytes("UTF-8"));
+                       CSVTokenIterator iterator = new CSVTokenIterator(in);
+                       return iterator;
+               } catch (UnsupportedEncodingException e) {
+                       throw new RuntimeException(e);
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/973eab60/src/test/java/org/apache/jena/propertytable/impl/PropertyTableArrayImplTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/jena/propertytable/impl/PropertyTableArrayImplTest.java
 
b/src/test/java/org/apache/jena/propertytable/impl/PropertyTableArrayImplTest.java
index 6669a9d..99e98ad 100644
--- 
a/src/test/java/org/apache/jena/propertytable/impl/PropertyTableArrayImplTest.java
+++ 
b/src/test/java/org/apache/jena/propertytable/impl/PropertyTableArrayImplTest.java
@@ -20,7 +20,9 @@ package org.apache.jena.propertytable.impl;
 
 import org.apache.jena.propertytable.AbstractPropertyTableTest;
 import org.junit.After;
+import org.junit.Assert;
 import org.junit.Before;
+import org.junit.Test;
 
 public class PropertyTableArrayImplTest extends AbstractPropertyTableTest{
        
@@ -41,4 +43,38 @@ public class PropertyTableArrayImplTest extends 
AbstractPropertyTableTest{
                table2 = null;
                row = null;
        }
+       
+       @Test
+       public void testColumnOutofBounds1() {
+               for (int i=0;i<columnNum;i++){
+                       table.createColumn(URI("something_"+i));
+               }
+               Assert.assertEquals(columnNum, table.getColumns().size());
+       }
+       
+       @Test(expected = IllegalArgumentException.class)
+       public void testColumnOutofBounds2() {
+               for (int i=0;i<columnNum+1;i++){
+                       table.createColumn(URI("something_"+i));
+               }
+       }
+       
+       @Test
+       public void testRowOutofBounds1() {
+               
+               // we've already created a new Row in @Before
+               for (int i=0;i<rowNum-1;i++){
+                       table.createRow(URI("something_"+i));
+               }
+               Assert.assertEquals(rowNum, table.getAllRows().size());
+       }
+       
+       @Test(expected = IllegalArgumentException.class)
+       public void testRowOutofBounds2() {
+               
+               // we've already created a new Row in @Before
+               for (int i=0;i<rowNum;i++){
+                       table.createRow(URI("something_"+i));
+               }
+       }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/973eab60/src/test/java/org/apache/jena/propertytable/impl/PropertyTableBuilderForArrayImplTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/jena/propertytable/impl/PropertyTableBuilderForArrayImplTest.java
 
b/src/test/java/org/apache/jena/propertytable/impl/PropertyTableBuilderForArrayImplTest.java
new file mode 100644
index 0000000..ce83f98
--- /dev/null
+++ 
b/src/test/java/org/apache/jena/propertytable/impl/PropertyTableBuilderForArrayImplTest.java
@@ -0,0 +1,21 @@
+package org.apache.jena.propertytable.impl;
+
+import org.junit.After;
+import org.junit.Before;
+
+public class PropertyTableBuilderForArrayImplTest extends 
AbstractPropertyTableBuilderTest{
+       
+       private static int rowNum = 10;
+       private static int columnNum = 10 ;
+       
+       @Before
+       public void setUp() {
+               table = new PropertyTableArrayImpl(rowNum, columnNum);
+       }
+
+       @After
+       public void tearDown() {
+               table = null;
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/jena/blob/973eab60/src/test/java/org/apache/jena/propertytable/impl/PropertyTableBuilderForHashMapImplTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/jena/propertytable/impl/PropertyTableBuilderForHashMapImplTest.java
 
b/src/test/java/org/apache/jena/propertytable/impl/PropertyTableBuilderForHashMapImplTest.java
new file mode 100644
index 0000000..6585327
--- /dev/null
+++ 
b/src/test/java/org/apache/jena/propertytable/impl/PropertyTableBuilderForHashMapImplTest.java
@@ -0,0 +1,16 @@
+package org.apache.jena.propertytable.impl;
+
+import org.junit.After;
+import org.junit.Before;
+
+public class PropertyTableBuilderForHashMapImplTest extends 
AbstractPropertyTableBuilderTest{
+       @Before
+       public void setUp() {
+               table = new PropertyTableHashMapImpl();
+       }
+
+       @After
+       public void tearDown() {
+               table = null;
+       }
+}

Reply via email to