package org.openrdf.repository.object; import junit.framework.Test; import org.openrdf.repository.object.base.ObjectRepositoryTestCase; import org.openrdf.repository.object.concepts.Agent; import org.openrdf.repository.object.concepts.Person; public class FunctionalTest extends ObjectRepositoryTestCase { public static Test suite() throws Exception { return ObjectRepositoryTestCase.suite(FunctionalTest.class); } public void testGender() throws Exception { Agent a = con.addDesignation(con.getObjectFactory().createObject(), Agent.class); a.setFoafGender("male"); Object item = con.prepareObjectQuery("SELECT DISTINCT ?item WHERE {?item ?p ?o}").evaluate().singleResult(); assertTrue(((Agent)item).getFoafGender().equals("male")); } public void testEagerGender() throws Exception { con.prepareUpdate("INSERT DATA { <urn:test:agent> a <urn:foaf:Agent>; <urn:foaf:gender> 'male'}").execute(); Agent a = con.getObject(Agent.class, "urn:test:agent"); con.prepareUpdate("DELETE { ?agent <urn:foaf:gender> 'male'} INSERT { ?agent <urn:foaf:gender> 'female'} WHERE {?agent <urn:foaf:gender> 'male'}").execute(); assertEquals("male", a.getFoafGender()); } public void testEagerPersonGender() throws Exception { con.prepareUpdate("INSERT DATA { <urn:test:mary> a <urn:foaf:Person>; <urn:foaf:knows> <urn:test:anne>; <urn:foaf:gender> 'female'}").execute(); con.prepareUpdate("INSERT DATA { <urn:test:anne> a <urn:foaf:Person>; <urn:foaf:knows> <urn:test:mary>; <urn:foaf:gender> 'female'}").execute(); Person mary = con.getObject(Person.class, "urn:test:mary"); Person anne = mary.getFoafKnows().iterator().next(); con.prepareUpdate( "DELETE { ?person <urn:foaf:gender> 'female'\n" + "} INSERT { ?person <urn:foaf:gender> 'male'\n" + "} WHERE {?person <urn:foaf:gender> 'female'}") .execute(); assertEquals("female", anne.getFoafGender()); } public void testCacheReadProperties() throws Exception { con.prepareUpdate("INSERT DATA { <urn:test:mary> a <urn:foaf:Person>; <urn:foaf:firstName> 'Mary'; <urn:foaf:knows> <urn:test:anne>; <urn:foaf:gender> 'female'}").execute(); Person mary = con.getObject(Person.class, "urn:test:mary"); String firstName = mary.getFoafFirstNames().iterator().next(); con.prepareUpdate( "DELETE { ?person <urn:foaf:firstName> 'Mary'; <urn:foaf:gender> 'female'\n" + "} INSERT { ?person <urn:foaf:firstName> 'Martin'; <urn:foaf:gender> 'male'\n" + "} WHERE {?person <urn:foaf:firstName> 'Mary'; <urn:foaf:gender> 'female'}") .execute(); assertEquals("female", mary.getFoafGender()); assertEquals(firstName, mary.getFoafFirstNames().iterator().next()); } public void testPropertyCycle() throws Exception { con.prepareUpdate("INSERT DATA { <urn:test:mary> a <urn:foaf:Person>; <urn:foaf:firstName> 'Mary'; <urn:foaf:knows> <urn:test:anne>; <urn:foaf:gender> 'female'}").execute(); con.prepareUpdate("INSERT DATA { <urn:test:anne> a <urn:foaf:Person>; <urn:foaf:firstName> 'Anne'; <urn:foaf:knows> <urn:test:mary>; <urn:foaf:gender> 'female'}").execute(); Person mary = con.getObject(Person.class, "urn:test:mary"); String firstName = mary.getFoafFirstNames().iterator().next(); Person anne = mary.getFoafKnows().iterator().next(); con.prepareUpdate( "DELETE { ?person <urn:foaf:firstName> 'Mary'; <urn:foaf:gender> 'female'\n" + "} INSERT { ?person <urn:foaf:firstName> 'Martin'; <urn:foaf:gender> 'male'\n" + "} WHERE {?person <urn:foaf:firstName> 'Mary'; <urn:foaf:gender> 'female'}") .execute(); Person mary2 = anne.getFoafKnows().iterator().next(); assertEquals("male", mary2.getFoafGender()); // eager properties are reloaded assertEquals(firstName, mary2.getFoafFirstNames().iterator().next()); // other properties are still cached assertEquals(System.identityHashCode(mary), System.identityHashCode(mary2)); Person martin = con.refresh(mary2); assertEquals(System.identityHashCode(mary), System.identityHashCode(martin)); assertEquals("male", martin.getFoafGender()); assertEquals("Martin", martin.getFoafFirstNames().iterator().next()); assertEquals("Martin", mary.getFoafFirstNames().iterator().next()); assertEquals("Martin", mary2.getFoafFirstNames().iterator().next()); } public void testRefreshType() throws Exception { con.prepareUpdate("INSERT DATA { <urn:test:mary> a <urn:foaf:Person>; <urn:foaf:name> 'Mary'; <urn:foaf:knows> <urn:test:anne>; <urn:foaf:gender> 'female'}").execute(); con.prepareUpdate("INSERT DATA { <urn:test:anne> a <urn:foaf:Person>; <urn:foaf:name> 'Anne'; <urn:foaf:knows> <urn:test:mary>; <urn:foaf:gender> 'female'}").execute(); Person mary = con.getObject(Person.class, "urn:test:mary"); assertEquals("Mary", mary.getFoafNames().iterator().next()); Person anne = mary.getFoafKnows().iterator().next(); Person mary2 = anne.getFoafKnows().iterator().next(); con.prepareUpdate( "DELETE { ?person a <urn:foaf:Person>; <urn:foaf:name> 'Mary'; <urn:foaf:gender> 'female'\n" + "} INSERT { ?person a <urn:foaf:Agent>; <urn:foaf:name> 'Mary Centre'\n" + "} WHERE {?person a <urn:foaf:Person>; <urn:foaf:name> 'Mary'; <urn:foaf:gender> 'female'}") .execute(); Agent centre = con.refresh(mary2); assertFalse(centre instanceof Person); assertEquals("Mary Centre", centre.getFoafNames().iterator().next()); } @Override protected void setUp() throws Exception { config.addConcept(Agent.class); super.setUp(); } }