Author: claude
Date: Sat Aug 31 11:01:47 2013
New Revision: 1519171

URL: http://svn.apache.org/r1519171
Log:
Added graph suite and multiple abstract tests

Added:
    jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/datatypes/
    jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/datatypes/xsd/
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/datatypes/xsd/TestDateTime.java
   (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractEventManagerTest.java
   (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractFindLiteralsTest.java
   (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphExtractTest.java
   (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphProducer.java
   (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphProducerUser.java
   (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphSuite.java
   (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractReifierTest.java
   (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractTestGraphMaker.java
   (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractTransactionHandlerTest.java
   (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/LiteralsTest.java
   (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/MemGraphTestSuite.java
   (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/TestFactory.java 
  (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/TestGraphBaseToString.java
   (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/TestGraphEvents.java
   (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/TestReifier.java 
  (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/impl/AbstractTestTripleStore.java
   (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/impl/CollectionGraphSuite.java
   (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/impl/TestFileGraph.java
   (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/impl/TestFileGraphMaker.java
   (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/impl/TripleStoreProducerInterface.java
   (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/impl/WrappedGraphSuite.java
   (with props)
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/impl/WrappedGraphTest.java
   (with props)
Modified:
    jena/Experimental/new-test/pom.xml
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphTest.java
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/GraphProducerInterface.java
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/GraphTestUtils.java
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/MemGraphTest.java
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/NodeCreateUtils.java
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/RecordingListener.java
    
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/impl/TestCollectionGraph.java
    jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/test/TestUtils.java

Modified: jena/Experimental/new-test/pom.xml
URL: 
http://svn.apache.org/viewvc/jena/Experimental/new-test/pom.xml?rev=1519171&r1=1519170&r2=1519171&view=diff
==============================================================================
--- jena/Experimental/new-test/pom.xml (original)
+++ jena/Experimental/new-test/pom.xml Sat Aug 31 11:01:47 2013
@@ -22,5 +22,11 @@
                        <version>${version}</version>
                        <type>pom</type>
                </dependency>
+  <dependency>
+       <groupId>org.mockito</groupId>
+       <artifactId>mockito-all</artifactId>
+       <version>1.9.5</version>
+       <scope>test</scope>
+  </dependency>
   </dependencies>
 </project>
\ No newline at end of file

Added: 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/datatypes/xsd/TestDateTime.java
URL: 
http://svn.apache.org/viewvc/jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/datatypes/xsd/TestDateTime.java?rev=1519171&view=auto
==============================================================================
--- 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/datatypes/xsd/TestDateTime.java
 (added)
+++ 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/datatypes/xsd/TestDateTime.java
 Sat Aug 31 11:01:47 2013
@@ -0,0 +1,158 @@
+/*
+ * 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 com.hp.hpl.jena.datatypes.xsd;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+
+import org.junit.Test;
+
+import com.hp.hpl.jena.datatypes.xsd.AbstractDateTime;
+
+import com.hp.hpl.jena.rdf.model.Literal;
+import com.hp.hpl.jena.rdf.model.Model;
+import com.hp.hpl.jena.rdf.model.ModelFactory;
+import com.hp.hpl.jena.rdf.model.Property;
+import com.hp.hpl.jena.rdf.model.Resource;
+import com.hp.hpl.jena.rdf.model.ResourceFactory;
+
+import static org.junit.Assert.*;
+
+/**
+ * Tests behaviour of the AbstractDateTime support, specifically for comparison
+ * operations. This complements the main tests in TestTypedLiterals.
+ */
+public class TestDateTime {
+
+       private final AbstractDateTime[] time = {
+                       makeDateTime("2009-08-13T17:54:40.348Z"),
+                       makeDateTime("2009-08-13T18:54:39Z"),
+                       makeDateTime("2009-08-13T18:54:40Z"),
+                       makeDateTime("2009-08-13T18:54:40.077Z"),
+                       makeDateTime("2009-08-13T18:54:40.348Z"),
+                       makeDateTime("2009-08-13T18:54:40.505Z"),
+                       makeDateTime("2009-08-13T18:54:40.77Z"),
+                       makeDateTime("2009-08-13T18:54:40.780Z"),
+                       makeDateTime("2009-08-13T18:54:40.88Z"),
+                       makeDateTime("2009-08-13T18:54:40.989Z"),
+                       makeDateTime("2009-08-13T19:54:40.989Z")
+
+       };
+
+       private AbstractDateTime makeDateTime(String time) {
+               return (XSDDateTime) XSDDatatype.XSDdateTime.parse(time);
+       }
+
+       @Test
+       public void testXSDOrder() {
+               for (int i = 0; i < time.length; i++) {
+                       for (int j = 0; j < i; j++) {
+                               assertEquals(String.format("%s > %s", time[i], 
time[j]),
+                                               time[i].compare(time[j]), 
AbstractDateTime.GREATER_THAN);
+                       }
+
+                       assertEquals(String.format("%s == %s", time[i], 
time[i]),
+                                       time[i].compare(time[i]), 
AbstractDateTime.EQUAL);
+
+                       for (int j = i + 1; j < time.length; j++) {
+                               assertEquals(String.format("%s < %s", time[i], 
time[j]),
+                                               time[i].compare(time[j]), 
AbstractDateTime.LESS_THAN);
+                       }
+               }
+       }
+
+       @Test
+       public void testJavaOrder() {
+               for (int i = 0; i < time.length; i++) {
+                       for (int j = 0; j < i; j++) {
+                               assertEquals(String.format("%s > %s", time[i], 
time[j]),
+                                               time[i].compareTo(time[j]),
+                                               AbstractDateTime.GREATER_THAN);
+                       }
+
+                       assertEquals(String.format("%s == %s", time[i], 
time[i]),
+                                       time[i].compareTo(time[i]), 
AbstractDateTime.EQUAL);
+
+                       for (int j = i + 1; j < time.length; j++) {
+                               assertEquals(String.format("%s < %s", time[i], 
time[j]),
+                                               time[i].compareTo(time[j]), 
AbstractDateTime.LESS_THAN);
+                       }
+               }
+       }
+
+       // TODO move this to model test
+       @Test
+       public void testRoundTripping1() {
+               Model m = ModelFactory.createDefaultModel();
+               Property startTime = m
+                               
.createProperty("http://jena.hpl.hp.com/test#startTime";);
+
+               Calendar cal = Calendar.getInstance();
+               cal.set(Calendar.MILLISECOND, 0);
+               Literal xsdlit0 = m.createTypedLiteral(cal);
+
+               Resource event = m.createResource();
+               event.addProperty(startTime, xsdlit0);
+
+               StringWriter sw = new StringWriter();
+               m.write(sw);
+               StringReader reader = new StringReader(sw.toString());
+               Model m1 = ModelFactory.createDefaultModel();
+               m1.read(reader, null);
+
+               assertTrue(m.isIsomorphicWith(m1));
+
+               Literal xsdlit1 = m1.listStatements().next().getObject()
+                               .as(Literal.class);
+               assertEquals(xsdlit0, xsdlit1);
+       }
+
+       // Test that the string and calendar versions are the same.
+       @Test
+       public void testRoundTripping2() {
+               // String lex = "2013-04-16T15:40:07.3Z" ;
+               testCalendarRT(1366126807300L);
+       }
+
+       @Test
+       public void testRoundTripping3() {
+               // String lex = "2013-04-16T15:40:07.31Z" ;
+               testCalendarRT(1366126807310L);
+       }
+
+       @Test
+       public void testRoundTripping4() {
+               // String lex = "2013-04-16T15:40:07.301Z" ;
+               testCalendarRT(1366126807301L);
+       }
+
+       private void testCalendarRT(long value) {
+               Calendar cal = Calendar.getInstance();
+               cal.setTimeInMillis(value);
+               Literal lit1 = ResourceFactory.createTypedLiteral(cal);
+               Literal lit2 = ResourceFactory.createTypedLiteral(
+                               lit1.getLexicalForm(), lit1.getDatatype());
+
+               assertEquals("equals: ", lit1, lit2);
+               assertEquals("hash code: ", lit1.hashCode(), lit2.hashCode());
+       }
+
+}

Propchange: 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/datatypes/xsd/TestDateTime.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractEventManagerTest.java
URL: 
http://svn.apache.org/viewvc/jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractEventManagerTest.java?rev=1519171&view=auto
==============================================================================
--- 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractEventManagerTest.java
 (added)
+++ 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractEventManagerTest.java
 Sat Aug 31 11:01:47 2013
@@ -0,0 +1,271 @@
+/*
+ * 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 com.hp.hpl.jena.graph;
+
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+import com.hp.hpl.jena.graph.Graph;
+import com.hp.hpl.jena.graph.GraphEventManager;
+import com.hp.hpl.jena.graph.GraphEvents;
+import com.hp.hpl.jena.graph.GraphListener;
+import com.hp.hpl.jena.graph.GraphUtil;
+import com.hp.hpl.jena.graph.Node;
+import com.hp.hpl.jena.graph.Triple;
+import com.hp.hpl.jena.util.CollectionFactory;
+import com.hp.hpl.jena.util.iterator.ExtendedIterator;
+import static com.hp.hpl.jena.graph.GraphTestUtils.*;
+
+/**
+ * AbstractTestGraph provides a bunch of basic tests for something that 
purports
+ * to be a Graph. The abstract method getGraph must be overridden in subclasses
+ * to deliver a Graph of interest.
+ */
+
+public abstract class AbstractEventManagerTest extends
+               AbstractGraphProducerUser {
+
+       protected Graph graphWithTxn(String s) {
+               Graph g = getGraphProducer().newGraph();
+               txnBegin(g);
+               try {
+                       graphAdd(g, s);
+                       txnCommit(g);
+               } catch (Exception e) {
+                       txnRollback(g);
+                       fail(e.getMessage());
+               }
+               return g;
+       }
+
+       static final Triple[] tripleArray = tripleArray("S P O; A R B; X Q Y");
+
+       static final List<Triple> tripleList = Arrays
+                       .asList(tripleArray("i lt j; p equals q"));
+
+       static final Triple[] setTriples = tripleArray("scissors cut paper; 
paper wraps stone; stone breaks scissors");
+
+       static final Set<Triple> tripleSet = CollectionFactory
+                       .createHashedSet(Arrays.asList(setTriples));
+
+       protected boolean canBeEmpty(Graph g) {
+               return g.isEmpty();
+       }
+
+       @Test
+       public void testEventRegister() {
+               Graph g = getGraphProducer().newGraph();
+               GraphEventManager gem = g.getEventManager();
+               assertSame(gem, gem.register(new RecordingListener()));
+       }
+
+       /**
+        * Test that we can safely unregister a listener that isn't registered.
+        */
+       @Test
+       public void testEventUnregister() {
+               getGraphProducer().newGraph().getEventManager().unregister(L);
+       }
+
+       /**
+        * Handy triple for test purposes.
+        */
+       protected Triple SPO = NodeCreateUtils.createTriple("S P O");
+       protected RecordingListener L = new RecordingListener();
+
+       /**
+        * Utility: get a graph, register L with its manager, return the graph.
+        */
+       protected Graph getAndRegister(GraphListener gl) {
+               Graph g = getGraphProducer().newGraph();
+               g.getEventManager().register(gl);
+               return g;
+       }
+
+       @Test
+       public void testAddTriple() {
+               Graph g = getAndRegister(L);
+               g.add(SPO);
+               L.assertHas(new Object[] { "add", g, SPO });
+       }
+
+       @Test
+       public void testDeleteTriple() {
+               Graph g = getAndRegister(L);
+               g.delete(SPO);
+               L.assertHas(new Object[] { "delete", g, SPO });
+       }
+
+       /**
+        * Ensure that triples removed by calling .remove() on the iterator 
returned
+        * by a find() will generate deletion notifications.
+        */
+       @Test
+       public void testEventDeleteByFind() {
+               Graph g = getAndRegister(L);
+               if (g.getCapabilities().iteratorRemoveAllowed()) {
+                       Triple toRemove = triple("remove this triple");
+                       g.add(toRemove);
+                       ExtendedIterator<Triple> rtr = g.find(toRemove);
+                       assertTrue("ensure a(t least) one triple", 
rtr.hasNext());
+                       rtr.next();
+                       rtr.remove();
+                       rtr.close();
+                       L.assertHas(new Object[] { "add", g, toRemove, 
"delete", g,
+                                       toRemove });
+               }
+       }
+
+       @Test
+       public void testTwoListeners() {
+               RecordingListener L1 = new RecordingListener();
+               RecordingListener L2 = new RecordingListener();
+               Graph g = getGraphProducer().newGraph();
+               GraphEventManager gem = g.getEventManager();
+               gem.register(L1).register(L2);
+               g.add(SPO);
+               L2.assertHas(new Object[] { "add", g, SPO });
+               L1.assertHas(new Object[] { "add", g, SPO });
+       }
+
+       @Test
+       public void testUnregisterWorks() {
+               Graph g = getGraphProducer().newGraph();
+               GraphEventManager gem = g.getEventManager();
+               gem.register(L).unregister(L);
+               g.add(SPO);
+               L.assertHas(new Object[] {});
+       }
+
+       @Test
+       public void testRegisterTwice() {
+               Graph g = getAndRegister(L);
+               g.getEventManager().register(L);
+               g.add(SPO);
+               L.assertHas(new Object[] { "add", g, SPO, "add", g, SPO });
+       }
+
+       @Test
+       public void testUnregisterOnce() {
+               Graph g = getAndRegister(L);
+               g.getEventManager().register(L).unregister(L);
+               g.delete(SPO);
+               L.assertHas(new Object[] { "delete", g, SPO });
+       }
+
+       @Test
+       public void testBulkAddArrayEvent() {
+               Graph g = getAndRegister(L);
+               Triple[] triples = tripleArray("x R y; a P b");
+               GraphUtil.add(g, triples);
+               L.assertHas(new Object[] { "add[]", g, triples });
+       }
+
+       @Test
+       public void testBulkAddList() {
+               Graph g = getAndRegister(L);
+               List<Triple> elems = Arrays
+                               .asList(tripleArray("bells ring loudly; pigs 
might fly"));
+               GraphUtil.add(g, elems);
+               L.assertHas(new Object[] { "addList", g, elems });
+       }
+
+       @Test
+       public void testBulkDeleteArray() {
+               Graph g = getAndRegister(L);
+               Triple[] triples = tripleArray("x R y; a P b");
+               GraphUtil.delete(g, triples);
+               L.assertHas(new Object[] { "delete[]", g, triples });
+       }
+
+       @Test
+       public void testBulkDeleteList() {
+               Graph g = getAndRegister(L);
+               List<Triple> elems = Arrays
+                               .asList(tripleArray("bells ring loudly; pigs 
might fly"));
+               GraphUtil.delete(g, elems);
+               L.assertHas(new Object[] { "deleteList", g, elems });
+       }
+
+       @Test
+       public void testBulkAddIterator() {
+               Graph g = getAndRegister(L);
+               Triple[] triples = tripleArray("I wrote this; you read that; I 
wrote this");
+               GraphUtil.add(g, asIterator(triples));
+               L.assertHas(new Object[] { "addIterator", g, 
Arrays.asList(triples) });
+       }
+
+       @Test
+       public void testBulkDeleteIterator() {
+               Graph g = getAndRegister(L);
+               Triple[] triples = tripleArray("I wrote this; you read that; I 
wrote this");
+               GraphUtil.delete(g, asIterator(triples));
+               L.assertHas(new Object[] { "deleteIterator", g, 
Arrays.asList(triples) });
+       }
+
+       private Iterator<Triple> asIterator(Triple[] triples) {
+               return Arrays.asList(triples).iterator();
+       }
+
+       @Test
+       public void testBulkAddGraph() {
+               Graph g = getAndRegister(L);
+               Graph triples = graphWithTxn("this type graph; I type slowly");
+               GraphUtil.addInto(g, triples);
+               L.assertHas(new Object[] { "addGraph", g, triples });
+       }
+
+       @Test
+       public void testBulkDeleteGraph() {
+               Graph g = getAndRegister(L);
+               Graph triples = graphWithTxn("this type graph; I type slowly");
+               GraphUtil.deleteFrom(g, triples);
+               L.assertHas(new Object[] { "deleteGraph", g, triples });
+       }
+
+       @Test
+       public void testGeneralEvent() {
+               Graph g = getAndRegister(L);
+               Object value = new int[] {};
+               g.getEventManager().notifyEvent(g, value);
+               L.assertHas(new Object[] { "someEvent", g, value });
+       }
+
+       @Test
+       public void testRemoveAllEvent() {
+               Graph g = getAndRegister(L);
+               g.clear();
+               L.assertHas(new Object[] { "someEvent", g, 
GraphEvents.removeAll });
+       }
+
+       @Test
+       public void testRemoveSomeEvent() {
+               Graph g = getAndRegister(L);
+               Node S = node("S"), P = node("??"), O = node("??");
+               g.remove(S, P, O);
+               Object event = GraphEvents.remove(S, P, O);
+               L.assertHas(new Object[] { "someEvent", g, event });
+       }
+
+}

Propchange: 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractEventManagerTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractFindLiteralsTest.java
URL: 
http://svn.apache.org/viewvc/jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractFindLiteralsTest.java?rev=1519171&view=auto
==============================================================================
--- 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractFindLiteralsTest.java
 (added)
+++ 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractFindLiteralsTest.java
 Sat Aug 31 11:01:47 2013
@@ -0,0 +1,118 @@
+/*
+ * 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 com.hp.hpl.jena.graph;
+
+import java.util.Arrays;
+import java.util.Set;
+
+import static com.hp.hpl.jena.graph.GraphTestUtils.*;
+import static org.junit.Assert.*;
+
+import org.junit.After;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import com.hp.hpl.jena.graph.Graph;
+import com.hp.hpl.jena.graph.Node;
+import com.hp.hpl.jena.graph.Triple;
+import com.hp.hpl.jena.util.iterator.Map1;
+
+@RunWith(Parameterized.class)
+abstract public class AbstractFindLiteralsTest {
+       private final String data;
+       private final int size;
+       private final String search;
+       private final String results;
+
+       protected static GraphProducerInterface graphProducer;
+
+       public AbstractFindLiteralsTest(final String data, final int size,
+                       final String search, final String results) {
+
+               this.data = data;
+               this.size = size;
+               this.search = search;
+               this.results = results;
+
+       }
+
+       static final Map1<Triple, Node> getObject = new Map1<Triple, Node>() {
+               @Override
+               public Node map1(Triple o) {
+                       return o.getObject();
+               }
+       };
+
+       @Test
+       public void testFind() {
+               Graph g = graphWith(graphProducer.newGraph(), data);
+
+               Node literal = NodeCreateUtils.create(search);
+               //
+               assertEquals("graph has wrong size", size, g.size());
+               Set<Node> got = g.find(Node.ANY, Node.ANY, 
literal).mapWith(getObject)
+                               .toSet();
+               assertEquals(nodeSet(results), got);
+       }
+
+       @After
+       public void closeGraphs() {
+               graphProducer.closeGraphs();
+       }
+
+       @Parameters(name = "TestFindLiterals: graph '{'{0}'}' size {1} search 
{2} expecting '{'{3}'}'")
+       public static Iterable<Object[]> data() {
+               Object[][] result = {
+                               { "a P 'simple'", 1, "'simple'", "'simple'" },
+
+                               { "a P 'simple'xsd:string", 1, "'simple'", 
"'simple'xsd:string" },
+                               { "a P 'simple'", 1, "'simple'xsd:string", 
"'simple'" },
+                               { "a P 'simple'xsd:string", 1, 
"'simple'xsd:string",
+                                               "'simple'xsd:string" },
+                               //
+                               { "a P 'simple'; a P 'simple'xsd:string", 2, 
"'simple'",
+                                               "'simple' 'simple'xsd:string" },
+                               { "a P 'simple'; a P 'simple'xsd:string", 2,
+                                               "'simple'xsd:string", "'simple' 
'simple'xsd:string" },
+                               //
+                               { "a P 1", 1, "1", "1" },
+                               { "a P '1'xsd:float", 1, "'1'xsd:float", 
"'1'xsd:float" },
+                               { "a P '1'xsd:double", 1, "'1'xsd:double", 
"'1'xsd:double" },
+                               { "a P '1'xsd:float", 1, "'1'xsd:float", 
"'1'xsd:float" },
+                               { "a P '1.1'xsd:float", 1, "'1'xsd:float", "" },
+                               { "a P '1'xsd:double", 1, "'1'xsd:int", "" },
+                               //
+                               { "a P 'abc'rdf:XMLLiteral", 1, "'abc'", "" },
+                               { "a P 'abc'", 1, "'abc'rdf:XMLLiteral", "" },
+                               //
+                               // floats & doubles are not compatible
+                               //
+                               { "a P '1'xsd:float", 1, "'1'xsd:double", "" },
+                               { "a P '1'xsd:double", 1, "'1'xsd:float", "" },
+                               //
+                               { "a P 1", 1, "'1'", "" },
+                               { "a P 1", 1, "'1'xsd:integer", 
"'1'xsd:integer" },
+                               { "a P 1", 1, "'1'", "" },
+                               { "a P '1'xsd:short", 1, "'1'xsd:integer", 
"'1'xsd:short" },
+                               { "a P '1'xsd:int", 1, "'1'xsd:integer", 
"'1'xsd:int" }, };
+               return Arrays.asList(result);
+       }
+}

Propchange: 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractFindLiteralsTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphExtractTest.java
URL: 
http://svn.apache.org/viewvc/jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphExtractTest.java?rev=1519171&view=auto
==============================================================================
--- 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphExtractTest.java
 (added)
+++ 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphExtractTest.java
 Sat Aug 31 11:01:47 2013
@@ -0,0 +1,122 @@
+/*
+ * 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 com.hp.hpl.jena.graph;
+
+import static com.hp.hpl.jena.graph.GraphTestUtils.*;
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+/**
+ * Tests for recursive sub-graph extraction.
+ */
+public abstract class AbstractGraphExtractTest extends
+               AbstractGraphProducerUser {
+
+       @Test
+       public void testExtractNothing() {
+               testExtract("", "x", "");
+               testExtract("", "x", "a R b");
+               testExtract("", "x", "a R x");
+               testExtract("", "x", "a x y");
+       }
+
+       @Test
+       public void testExtractOneLevel() {
+               testExtract("a R b", "a", "a R b");
+               testExtract("a R b; a R c", "a", "a R b; a R c");
+               testExtract("a R b; a S d", "a", "a R b; a S d");
+       }
+
+       @Test
+       public void testNoJunk() {
+               testExtract("a R b", "a", "a R b; x R y");
+       }
+
+       @Test
+       public void testExtractTwoLevels() {
+               testExtract("a R b; b S c", "a", "a R b; b S c");
+               testExtract("a R b; b S c", "a", "a R b; b S c; x P y");
+               testExtract("a R b; b S c; b T d", "a", "a R b; b S c; b T d");
+               testExtract("a R b; b S c; a T d", "a", "a R b; a T d; b S c");
+       }
+
+       @Test
+       public void testExtractSeveralLevels() {
+               testExtract("a R b; b S c; c T d; d U e", "a",
+                               "a R b; b S c; c T d; d U e");
+       }
+
+       @Test
+       public void testExtractNoLoop() {
+               testExtract("a R a", "a", "a R a");
+               testExtract("a R b; b R a", "a", "a R b; b R a; z P a");
+               testExtract("a R b; b S c; c T a", "a",
+                               "a R b; b S c; c T a; junk P junk");
+       }
+
+       @Test
+       public void testTripleFilter() {
+               assertTrue(TripleBoundary.stopAtAnonObject.stopAt(triple("a R 
_b")));
+               assertFalse(TripleBoundary.stopAtAnonObject.stopAt(triple("a R 
b")));
+               assertFalse(TripleBoundary.stopAtAnonObject.stopAt(triple("a _R 
b")));
+               assertFalse(TripleBoundary.stopAtAnonObject.stopAt(triple("_a R 
b")));
+       }
+
+       public void testExtractBoundary() {
+               testExtract("a R b; b S _c", "a", "a R b; b S _c; _c T d",
+                               TripleBoundary.stopAtAnonObject);
+       }
+
+       /**
+        * This test exposed that the update-existing-graph functionality was 
broken
+        * if the target graph already contained any statements with a subject S
+        * appearing as subject in the source graph - no further Spo statements 
were
+        * added.
+        */
+       @Test
+       public void testPartialUpdate() {
+               Graph source = graphWith(getGraphProducer().newGraph(), "a R b; 
b S e");
+               Graph dest = graphWith(getGraphProducer().newGraph(), "b R d");
+               GraphExtract e = new GraphExtract(TripleBoundary.stopNowhere);
+               e.extractInto(dest, node("a"), source);
+               assertIsomorphic(
+                               graphWith(getGraphProducer().newGraph(), "a R 
b; b S e; b R d"),
+                               dest);
+       }
+
+       private void testExtract(String wanted, String node, String source) {
+               testExtract(wanted, node, source, TripleBoundary.stopNowhere);
+       }
+
+       /**
+    */
+       private void testExtract(String wanted, String node, String source,
+                       TripleBoundary b) {
+               assertIsomorphic(
+                               graphWith(getGraphProducer().newGraph(), 
wanted),
+                               extract(node(node), b,
+                                               
graphWith(getGraphProducer().newGraph(), source)));
+       }
+
+       private Graph extract(Node node, TripleBoundary b, Graph graph) {
+               return new GraphExtract(b).extract(node, graph);
+       }
+
+}

Propchange: 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphExtractTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphProducer.java
URL: 
http://svn.apache.org/viewvc/jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphProducer.java?rev=1519171&view=auto
==============================================================================
--- 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphProducer.java
 (added)
+++ 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphProducer.java
 Sat Aug 31 11:01:47 2013
@@ -0,0 +1,27 @@
+package com.hp.hpl.jena.graph;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class AbstractGraphProducer implements GraphProducerInterface {
+
+       public List<Graph> graphList = new ArrayList<Graph>();
+
+       abstract protected Graph createNewGraph();
+
+       @Override
+       final public Graph newGraph() {
+               Graph retval = createNewGraph();
+               graphList.add(retval);
+               return retval;
+       }
+
+       @Override
+       final public void closeGraphs() {
+               for (Graph g : graphList) {
+                       g.close();
+               }
+               graphList.clear();
+       }
+
+}

Propchange: 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphProducer.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphProducerUser.java
URL: 
http://svn.apache.org/viewvc/jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphProducerUser.java?rev=1519171&view=auto
==============================================================================
--- 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphProducerUser.java
 (added)
+++ 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphProducerUser.java
 Sat Aug 31 11:01:47 2013
@@ -0,0 +1,14 @@
+package com.hp.hpl.jena.graph;
+
+import org.junit.After;
+
+public abstract class AbstractGraphProducerUser {
+
+       abstract protected GraphProducerInterface getGraphProducer();
+
+       @After
+       final public void closeGraphs() {
+               getGraphProducer().closeGraphs();
+       }
+
+}

Propchange: 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphProducerUser.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphSuite.java
URL: 
http://svn.apache.org/viewvc/jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphSuite.java?rev=1519171&view=auto
==============================================================================
--- 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphSuite.java
 (added)
+++ 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphSuite.java
 Sat Aug 31 11:01:47 2013
@@ -0,0 +1,72 @@
+package com.hp.hpl.jena.graph;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+/*
+ TestSuite result = new TestSuite( WrappedGraphTest.class );
+ result.addTest( suite( MetaTestGraph.class, GraphMem.class ) );
+ result.addTest( suite( TestReifier.class, GraphMem.class ) );
+ result.addTest( suite( MetaTestGraph.class, WrappedGraphMem.class ) );
+ result.addTest( suite( TestReifier.class, WrappedGraphMem.class ) );
+ result.addTest( TestGraphListener.suite() );
+ result.addTestSuite( TestRegisterGraphListener.class );
+ */
+@RunWith(Suite.class)
[email protected]({ AbstractGraphSuite.GraphTest.class,
+               AbstractGraphSuite.ReifierTest.class,
+               AbstractGraphSuite.FindLiterals.class,
+               AbstractGraphSuite.ExtractTest.class,
+               AbstractGraphSuite.EventManagerTest.class,
+               AbstractGraphSuite.TransactionTest.class, })
+public abstract class AbstractGraphSuite {
+
+       static protected GraphProducerInterface graphProducer;
+
+       protected static void setGraphProducer(GraphProducerInterface 
graphProducer) {
+               AbstractGraphSuite.graphProducer = graphProducer;
+       }
+
+       public static class GraphTest extends AbstractGraphTest {
+               @Override
+               protected GraphProducerInterface getGraphProducer() {
+                       return AbstractGraphSuite.graphProducer;
+               }
+
+       }
+
+       public static class ReifierTest extends AbstractReifierTest {
+               @Override
+               protected GraphProducerInterface getGraphProducer() {
+                       return AbstractGraphSuite.graphProducer;
+               }
+       }
+
+       public static class FindLiterals extends AbstractFindLiteralsTest {
+               public FindLiterals(String data, int size, String search, 
String results) {
+                       super(data, size, search, results);
+                       AbstractFindLiteralsTest.graphProducer = 
AbstractGraphSuite.graphProducer;
+               }
+       }
+
+       public static class ExtractTest extends AbstractGraphExtractTest {
+               @Override
+               protected GraphProducerInterface getGraphProducer() {
+                       return AbstractGraphSuite.graphProducer;
+               }
+       }
+
+       public static class EventManagerTest extends AbstractEventManagerTest {
+               @Override
+               protected GraphProducerInterface getGraphProducer() {
+                       return AbstractGraphSuite.graphProducer;
+               }
+       }
+
+       public static class TransactionTest extends 
AbstractTransactionHandlerTest {
+               @Override
+               protected GraphProducerInterface getGraphProducer() {
+                       return AbstractGraphSuite.graphProducer;
+               }
+       }
+}

Propchange: 
jena/Experimental/new-test/src/test/java/com/hp/hpl/jena/graph/AbstractGraphSuite.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain


Reply via email to