random tests cleanup
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/8990e655 Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/8990e655 Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/8990e655 Branch: refs/heads/master Commit: 8990e65545d4d65773a0e5d1350a9e602a0d3d77 Parents: 2430e94 Author: aadamchik <aadamc...@apache.org> Authored: Tue Nov 4 20:16:05 2014 +0300 Committer: aadamchik <aadamc...@apache.org> Committed: Tue Nov 4 20:21:01 2014 +0300 ---------------------------------------------------------------------- .../apache/cayenne/NestedCayenneContextIT.java | 1309 +++++++++--------- .../org/apache/cayenne/remote/MockMessage.java | 50 - .../remote/NestedObjectContextLocalIT.java | 2 +- .../cayenne/remote/ROPPrefetchToManyMapIT.java | 2 +- .../remote/RemoteIncrementalFaultListIT.java | 483 +++---- .../apache/cayenne/remote/ValueInjectorIT.java | 5 +- 6 files changed, 906 insertions(+), 945 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/8990e655/cayenne-client/src/test/java/org/apache/cayenne/NestedCayenneContextIT.java ---------------------------------------------------------------------- diff --git a/cayenne-client/src/test/java/org/apache/cayenne/NestedCayenneContextIT.java b/cayenne-client/src/test/java/org/apache/cayenne/NestedCayenneContextIT.java index 8420770..d40ed76 100644 --- a/cayenne-client/src/test/java/org/apache/cayenne/NestedCayenneContextIT.java +++ b/cayenne-client/src/test/java/org/apache/cayenne/NestedCayenneContextIT.java @@ -18,6 +18,11 @@ ****************************************************************/ package org.apache.cayenne; +import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + import org.apache.cayenne.configuration.rop.client.ClientRuntime; import org.apache.cayenne.di.Inject; import org.apache.cayenne.graph.GraphChangeHandler; @@ -40,862 +45,864 @@ import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; -import java.util.Arrays; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; - /** * Tests nested object contexts */ @UseServerRuntime(ClientCase.MULTI_TIER_PROJECT) -@RunWith(value=Parameterized.class) +@RunWith(value = Parameterized.class) public class NestedCayenneContextIT extends RemoteCayenneCase { - @Inject - private ClientRuntime runtime; - - @Inject - private DBHelper dbHelper; + @Inject + private ClientRuntime runtime; + + @Inject + private DBHelper dbHelper; + + @Inject + private DataChannelInterceptor queryInterceptor; + + @Parameters + public static Collection<Object[]> data() { + return Arrays.asList(new Object[][] { + { LocalConnection.HESSIAN_SERIALIZATION }, + { LocalConnection.JAVA_SERIALIZATION }, + { LocalConnection.NO_SERIALIZATION }, }); + } + + public NestedCayenneContextIT(int serializationPolicy) { + super.serializationPolicy = serializationPolicy; + } + + @Override + public void setUpAfterInjection() throws Exception { + super.setUpAfterInjection(); + + dbHelper.deleteAll("MT_TABLE2"); + dbHelper.deleteAll("MT_TABLE1"); + } + + @Test + public void testChannels() { + ObjectContext child = runtime.newContext(clientContext); + + assertNotNull(child); + assertSame(clientContext, child.getChannel()); + + // second level of nesting + ObjectContext grandchild = runtime.newContext((DataChannel) child); + + assertNotNull(grandchild); + assertSame(child, grandchild.getChannel()); + } + + @Test + public void testSelect() throws Exception { + ObjectContext child = runtime.newContext(clientContext); + + ClientMtTable1 committed = clientContext + .newObject(ClientMtTable1.class); + ClientMtTable1 deleted = clientContext.newObject(ClientMtTable1.class); + ClientMtTable1 modified = clientContext.newObject(ClientMtTable1.class); + + clientContext.commitChanges(); + int modifiedid = Cayenne.intPKForObject(modified); + + // test how different object states appear in the child on select + + clientContext.deleteObjects(deleted); + modified.setGlobalAttribute1("a"); + + ClientMtTable1 _new = clientContext.newObject(ClientMtTable1.class); - @Inject - private DataChannelInterceptor queryInterceptor; + assertEquals(PersistenceState.COMMITTED, + committed.getPersistenceState()); + assertEquals(PersistenceState.MODIFIED, modified.getPersistenceState()); + assertEquals(PersistenceState.DELETED, deleted.getPersistenceState()); + assertEquals(PersistenceState.NEW, _new.getPersistenceState()); - @Parameters - public static Collection<Object[]> data() { - return Arrays.asList(new Object[][]{ - {LocalConnection.HESSIAN_SERIALIZATION}, - {LocalConnection.JAVA_SERIALIZATION}, - {LocalConnection.NO_SERIALIZATION}, - }); - } + List<ClientMtTable1> objects = child + .select(new SelectQuery<ClientMtTable1>(ClientMtTable1.class)); + assertEquals("All but NEW object must have been included", 3, + objects.size()); - public NestedCayenneContextIT(int serializationPolicy) { - super.serializationPolicy = serializationPolicy; - } + for (ClientMtTable1 next : objects) { + assertEquals(PersistenceState.COMMITTED, next.getPersistenceState()); - @Override - public void setUpAfterInjection() throws Exception { - super.setUpAfterInjection(); + int id = Cayenne.intPKForObject(next); + if (id == modifiedid) { + assertEquals("a", next.getGlobalAttribute1()); + } + } + } - dbHelper.deleteAll("MT_TABLE2"); - dbHelper.deleteAll("MT_TABLE1"); - } + @Test + public void testPrefetchingToOne() throws Exception { + final ClientMtTable1 mt11 = clientContext + .newObject(ClientMtTable1.class); + clientContext.newObject(ClientMtTable1.class); + ClientMtTable2 mt21 = clientContext.newObject(ClientMtTable2.class); + ClientMtTable2 mt22 = clientContext.newObject(ClientMtTable2.class); - @Test - public void testChannels() { - ObjectContext child = runtime.newContext(clientContext); + mt21.setTable1(mt11); + mt22.setTable1(mt11); - assertNotNull(child); - assertSame(clientContext, child.getChannel()); + clientContext.commitChanges(); - // second level of nesting - ObjectContext grandchild = runtime.newContext((DataChannel) child); + final ObjectContext child = runtime.newContext(clientContext); - assertNotNull(grandchild); - assertSame(child, grandchild.getChannel()); - } + SelectQuery<ClientMtTable2> q = new SelectQuery<ClientMtTable2>( + ClientMtTable2.class); + q.addPrefetch(ClientMtTable2.TABLE1_PROPERTY); - @Test - public void testSelect() throws Exception { - ObjectContext child = runtime.newContext(clientContext); + final List<ClientMtTable2> results = child.select(q); - ClientMtTable1 committed = clientContext.newObject(ClientMtTable1.class); - ClientMtTable1 deleted = clientContext.newObject(ClientMtTable1.class); - ClientMtTable1 modified = clientContext.newObject(ClientMtTable1.class); + queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() { - clientContext.commitChanges(); - int modifiedid = Cayenne.intPKForObject(modified); + public void execute() { + assertEquals(2, results.size()); + Iterator<?> it = results.iterator(); + while (it.hasNext()) { + ClientMtTable2 o = (ClientMtTable2) it.next(); + assertEquals(PersistenceState.COMMITTED, + o.getPersistenceState()); + assertSame(child, o.getObjectContext()); - // test how different object states appear in the child on select + ClientMtTable1 o1 = o.getTable1(); + assertNotNull(o1); + assertEquals(PersistenceState.COMMITTED, + o1.getPersistenceState()); + assertSame(child, o1.getObjectContext()); + assertEquals(mt11.getObjectId(), o1.getObjectId()); + } + } + }); + } - clientContext.deleteObjects(deleted); - modified.setGlobalAttribute1("a"); + @Test + public void testPrefetchingToMany() throws Exception { + ClientMtTable1 mt11 = clientContext.newObject(ClientMtTable1.class); + mt11.setGlobalAttribute1("1"); - ClientMtTable1 _new = clientContext.newObject(ClientMtTable1.class); + ClientMtTable1 mt12 = clientContext.newObject(ClientMtTable1.class); + mt12.setGlobalAttribute1("2"); - assertEquals(PersistenceState.COMMITTED, committed.getPersistenceState()); - assertEquals(PersistenceState.MODIFIED, modified.getPersistenceState()); - assertEquals(PersistenceState.DELETED, deleted.getPersistenceState()); - assertEquals(PersistenceState.NEW, _new.getPersistenceState()); + ClientMtTable2 mt21 = clientContext.newObject(ClientMtTable2.class); + ClientMtTable2 mt22 = clientContext.newObject(ClientMtTable2.class); - List<?> objects = child.performQuery(new SelectQuery(ClientMtTable1.class)); - assertEquals("All but NEW object must have been included", 3, objects.size()); + mt21.setTable1(mt11); + mt22.setTable1(mt11); - Iterator<?> it = objects.iterator(); - while (it.hasNext()) { - ClientMtTable1 next = (ClientMtTable1) it.next(); - assertEquals(PersistenceState.COMMITTED, next.getPersistenceState()); + clientContext.commitChanges(); - int id = Cayenne.intPKForObject(next); - if (id == modifiedid) { - assertEquals("a", next.getGlobalAttribute1()); - } - } - } + final ObjectContext child = runtime.newContext(clientContext); - @Test - public void testPrefetchingToOne() throws Exception { - final ClientMtTable1 mt11 = clientContext.newObject(ClientMtTable1.class); - clientContext.newObject(ClientMtTable1.class); - ClientMtTable2 mt21 = clientContext.newObject(ClientMtTable2.class); - ClientMtTable2 mt22 = clientContext.newObject(ClientMtTable2.class); + SelectQuery<ClientMtTable1> q = new SelectQuery<ClientMtTable1>( + ClientMtTable1.class); + q.addOrdering("globalAttribute1", SortOrder.ASCENDING); + q.addPrefetch(ClientMtTable1.TABLE2ARRAY_PROPERTY); - mt21.setTable1(mt11); - mt22.setTable1(mt11); + final List<ClientMtTable1> results = child.select(q); - clientContext.commitChanges(); + queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() { - final ObjectContext child = runtime.newContext(clientContext); + public void execute() { + ClientMtTable1 o1 = results.get(0); + assertEquals(PersistenceState.COMMITTED, + o1.getPersistenceState()); + assertSame(child, o1.getObjectContext()); - SelectQuery q = new SelectQuery(ClientMtTable2.class); - q.addPrefetch(ClientMtTable2.TABLE1_PROPERTY); + List<ClientMtTable2> children1 = o1.getTable2Array(); - final List<?> results = child.performQuery(q); + assertEquals(2, children1.size()); + Iterator<ClientMtTable2> it = children1.iterator(); + while (it.hasNext()) { + ClientMtTable2 o = it.next(); + assertEquals(PersistenceState.COMMITTED, + o.getPersistenceState()); + assertSame(child, o.getObjectContext()); - queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() { + assertEquals(o1, o.getTable1()); + } - public void execute() { - assertEquals(2, results.size()); - Iterator<?> it = results.iterator(); - while (it.hasNext()) { - ClientMtTable2 o = (ClientMtTable2) it.next(); - assertEquals(PersistenceState.COMMITTED, o.getPersistenceState()); - assertSame(child, o.getObjectContext()); + ClientMtTable1 o2 = results.get(1); + assertEquals(PersistenceState.COMMITTED, + o2.getPersistenceState()); + assertSame(child, o2.getObjectContext()); - ClientMtTable1 o1 = o.getTable1(); - assertNotNull(o1); - assertEquals(PersistenceState.COMMITTED, o1.getPersistenceState()); - assertSame(child, o1.getObjectContext()); - assertEquals(mt11.getObjectId(), o1.getObjectId()); - } - } - }); - } + List<?> children2 = o2.getTable2Array(); - @Test - public void testPrefetchingToMany() throws Exception { - ClientMtTable1 mt11 = clientContext.newObject(ClientMtTable1.class); - mt11.setGlobalAttribute1("1"); + assertEquals(0, children2.size()); + } + }); + } - ClientMtTable1 mt12 = clientContext.newObject(ClientMtTable1.class); - mt12.setGlobalAttribute1("2"); + @Test + public void testDeleteNew() throws Exception { + ObjectContext child = runtime.newContext(clientContext); - ClientMtTable2 mt21 = clientContext.newObject(ClientMtTable2.class); - ClientMtTable2 mt22 = clientContext.newObject(ClientMtTable2.class); + ClientMtTable1 a = clientContext.newObject(ClientMtTable1.class); + clientContext.commitChanges(); - mt21.setTable1(mt11); - mt22.setTable1(mt11); + ClientMtTable2 p = child.newObject(ClientMtTable2.class); + ClientMtTable1 aChild = (ClientMtTable1) Cayenne.objectForPK(child, + a.getObjectId()); + p.setGlobalAttribute("X"); + aChild.addToTable2Array(p); - clientContext.commitChanges(); + child.commitChangesToParent(); - final ObjectContext child = runtime.newContext(clientContext); + child.deleteObjects(p); + aChild.removeFromTable2Array(p); - SelectQuery q = new SelectQuery(ClientMtTable1.class); - q.addOrdering("globalAttribute1", SortOrder.ASCENDING); - q.addPrefetch(ClientMtTable1.TABLE2ARRAY_PROPERTY); + child.commitChangesToParent(); + } - final List<?> results = child.performQuery(q); + /** + * A test case for CAY-698 bug. + */ + @Test + public void testNullifyToOne() throws Exception { + ClientMtTable1 a = clientContext.newObject(ClientMtTable1.class); + ClientMtTable2 b = clientContext.newObject(ClientMtTable2.class); + a.addToTable2Array(b); - queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() { + clientContext.commitChanges(); - public void execute() { - ClientMtTable1 o1 = (ClientMtTable1) results.get(0); - assertEquals(PersistenceState.COMMITTED, o1.getPersistenceState()); - assertSame(child, o1.getObjectContext()); + final ObjectContext child = runtime.newContext(clientContext); + ObjectContext childPeer = runtime.newContext(clientContext); - List<ClientMtTable2> children1 = o1.getTable2Array(); + final ClientMtTable2 childP1 = (ClientMtTable2) Cayenne.objectForPK( + child, b.getObjectId()); - assertEquals(2, children1.size()); - Iterator<ClientMtTable2> it = children1.iterator(); - while (it.hasNext()) { - ClientMtTable2 o = it.next(); - assertEquals(PersistenceState.COMMITTED, o.getPersistenceState()); - assertSame(child, o.getObjectContext()); + // trigger object creation in the peer nested DC + Cayenne.objectForPK(childPeer, b.getObjectId()); + childP1.setTable1(null); - assertEquals(o1, o.getTable1()); - } + queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() { - ClientMtTable1 o2 = (ClientMtTable1) results.get(1); - assertEquals(PersistenceState.COMMITTED, o2.getPersistenceState()); - assertSame(child, o2.getObjectContext()); + public void execute() { + child.commitChangesToParent(); + assertEquals(PersistenceState.COMMITTED, + childP1.getPersistenceState()); - List<?> children2 = o2.getTable2Array(); + ClientMtTable2 parentP1 = (ClientMtTable2) clientContext + .getGraphManager().getNode(childP1.getObjectId()); - assertEquals(0, children2.size()); - } - }); - } + assertNotNull(parentP1); + assertEquals(PersistenceState.MODIFIED, + parentP1.getPersistenceState()); + assertNull(parentP1.getTable1()); - @Test - public void testDeleteNew() throws Exception { - ObjectContext child = runtime.newContext(clientContext); + // check that arc changes got recorded in the parent context + GraphDiff diffs = clientContext.internalGraphManager() + .getDiffs(); + final int[] arcDiffs = new int[1]; - ClientMtTable1 a = clientContext.newObject(ClientMtTable1.class); - clientContext.commitChanges(); + diffs.apply(new GraphChangeHandler() { - ClientMtTable2 p = child.newObject(ClientMtTable2.class); - ClientMtTable1 aChild = (ClientMtTable1) Cayenne.objectForPK( - child, - a.getObjectId()); - p.setGlobalAttribute("X"); - aChild.addToTable2Array(p); + public void arcCreated(Object nodeId, Object targetNodeId, + Object arcId) { + arcDiffs[0]++; + } - child.commitChangesToParent(); + public void arcDeleted(Object nodeId, Object targetNodeId, + Object arcId) { + arcDiffs[0]--; + } - child.deleteObjects(p); - aChild.removeFromTable2Array(p); + public void nodeCreated(Object nodeId) { - child.commitChangesToParent(); - } + } - /** - * A test case for CAY-698 bug. - */ - @Test - public void testNullifyToOne() throws Exception { - ClientMtTable1 a = clientContext.newObject(ClientMtTable1.class); - ClientMtTable2 b = clientContext.newObject(ClientMtTable2.class); - a.addToTable2Array(b); + public void nodeIdChanged(Object nodeId, Object newId) { + } - clientContext.commitChanges(); + public void nodePropertyChanged(Object nodeId, + String property, Object oldValue, Object newValue) { + } - final ObjectContext child = runtime.newContext(clientContext); - ObjectContext childPeer = runtime.newContext(clientContext); + public void nodeRemoved(Object nodeId) { - final ClientMtTable2 childP1 = (ClientMtTable2) Cayenne.objectForPK( - child, - b.getObjectId()); + } + }); - // trigger object creation in the peer nested DC - Cayenne.objectForPK(childPeer, b.getObjectId()); - childP1.setTable1(null); + assertEquals(-2, arcDiffs[0]); + } + }); + } - queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() { + @Test + public void testCommitChangesToParent() throws Exception { + clientContext.newObject(ClientMtTable1.class); + clientContext.newObject(ClientMtTable1.class); + clientContext.newObject(ClientMtTable1.class); + clientContext.newObject(ClientMtTable1.class); + clientContext.commitChanges(); - public void execute() { - child.commitChangesToParent(); - assertEquals(PersistenceState.COMMITTED, childP1.getPersistenceState()); + final ObjectContext child = runtime.newContext(clientContext); - ClientMtTable2 parentP1 = (ClientMtTable2) clientContext - .getGraphManager() - .getNode(childP1.getObjectId()); + SelectQuery<ClientMtTable1> query = new SelectQuery<ClientMtTable1>( + ClientMtTable1.class); + List<ClientMtTable1> objects = child.select(query); - assertNotNull(parentP1); - assertEquals(PersistenceState.MODIFIED, parentP1.getPersistenceState()); - assertNull(parentP1.getTable1()); + assertEquals(4, objects.size()); - // check that arc changes got recorded in the parent context - GraphDiff diffs = clientContext.internalGraphManager().getDiffs(); - final int[] arcDiffs = new int[1]; + final ClientMtTable1 childNew = child.newObject(ClientMtTable1.class); + childNew.setGlobalAttribute1("NNN"); - diffs.apply(new GraphChangeHandler() { + final ClientMtTable1 childModified = objects.get(0); + childModified.setGlobalAttribute1("MMM"); - public void arcCreated( - Object nodeId, - Object targetNodeId, - Object arcId) { - arcDiffs[0]++; - } - - public void arcDeleted( - Object nodeId, - Object targetNodeId, - Object arcId) { - arcDiffs[0]--; - } - - public void nodeCreated(Object nodeId) { - - } + final ClientMtTable1 childCommitted = objects.get(1); - public void nodeIdChanged(Object nodeId, Object newId) { - } + final ClientMtTable1 childHollow = objects.get(3); + child.invalidateObjects(childHollow); - public void nodePropertyChanged( - Object nodeId, - String property, - Object oldValue, - Object newValue) { - } + queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() { - public void nodeRemoved(Object nodeId) { + public void execute() { + child.commitChangesToParent(); - } - }); + // * all modified child objects must be in committed state now + // * all modifications should be propagated to the parent + // * no actual commit should occur. - assertEquals(-2, arcDiffs[0]); - } - }); - } + assertEquals(PersistenceState.COMMITTED, + childNew.getPersistenceState()); + assertEquals(PersistenceState.COMMITTED, + childModified.getPersistenceState()); + assertEquals(PersistenceState.COMMITTED, + childCommitted.getPersistenceState()); + assertEquals(PersistenceState.HOLLOW, + childHollow.getPersistenceState()); - @Test - public void testCommitChangesToParent() throws Exception { - clientContext.newObject(ClientMtTable1.class); - clientContext.newObject(ClientMtTable1.class); - clientContext.newObject(ClientMtTable1.class); - clientContext.newObject(ClientMtTable1.class); - clientContext.commitChanges(); + ClientMtTable1 parentNew = (ClientMtTable1) clientContext + .getGraphManager().getNode(childNew.getObjectId()); + final ClientMtTable1 parentModified = (ClientMtTable1) clientContext + .getGraphManager().getNode(childModified.getObjectId()); + ClientMtTable1 parentCommitted = (ClientMtTable1) clientContext + .getGraphManager() + .getNode(childCommitted.getObjectId()); + ClientMtTable1 parentHollow = (ClientMtTable1) clientContext + .getGraphManager().getNode(childHollow.getObjectId()); - final ObjectContext child = runtime.newContext(clientContext); + assertNotNull(parentNew); + assertEquals(PersistenceState.NEW, + parentNew.getPersistenceState()); + assertEquals("NNN", parentNew.getGlobalAttribute1()); - SelectQuery query = new SelectQuery(ClientMtTable1.class); - List<?> objects = child.performQuery(query); + assertNotNull(parentModified); + assertEquals(PersistenceState.MODIFIED, + parentModified.getPersistenceState()); + assertEquals("MMM", parentModified.getGlobalAttribute1()); - assertEquals(4, objects.size()); + assertNotNull(parentCommitted); + assertEquals(PersistenceState.COMMITTED, + parentCommitted.getPersistenceState()); - final ClientMtTable1 childNew = child.newObject(ClientMtTable1.class); - childNew.setGlobalAttribute1("NNN"); + assertNotNull(parentHollow); - final ClientMtTable1 childModified = (ClientMtTable1) objects.get(0); - childModified.setGlobalAttribute1("MMM"); + // check that arc changes got recorded in the parent context + GraphDiff diffs = clientContext.internalGraphManager() + .getDiffs(); - final ClientMtTable1 childCommitted = (ClientMtTable1) objects.get(1); + final int[] modifiedProperties = new int[1]; - final ClientMtTable1 childHollow = (ClientMtTable1) objects.get(3); - child.invalidateObjects(childHollow); + diffs.apply(new GraphChangeHandler() { - queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() { + @Override + public void arcCreated(Object nodeId, Object targetNodeId, + Object arcId) { - public void execute() { - child.commitChangesToParent(); + } - // * all modified child objects must be in committed state now - // * all modifications should be propagated to the parent - // * no actual commit should occur. + @Override + public void arcDeleted(Object nodeId, Object targetNodeId, + Object arcId) { - assertEquals(PersistenceState.COMMITTED, childNew.getPersistenceState()); - assertEquals( - PersistenceState.COMMITTED, - childModified.getPersistenceState()); - assertEquals( - PersistenceState.COMMITTED, - childCommitted.getPersistenceState()); - assertEquals(PersistenceState.HOLLOW, childHollow.getPersistenceState()); + } - ClientMtTable1 parentNew = (ClientMtTable1) clientContext - .getGraphManager() - .getNode(childNew.getObjectId()); - final ClientMtTable1 parentModified = (ClientMtTable1) clientContext - .getGraphManager() - .getNode(childModified.getObjectId()); - ClientMtTable1 parentCommitted = (ClientMtTable1) clientContext - .getGraphManager() - .getNode(childCommitted.getObjectId()); - ClientMtTable1 parentHollow = (ClientMtTable1) clientContext - .getGraphManager() - .getNode(childHollow.getObjectId()); + @Override + public void nodeCreated(Object nodeId) { - assertNotNull(parentNew); - assertEquals(PersistenceState.NEW, parentNew.getPersistenceState()); - assertEquals("NNN", parentNew.getGlobalAttribute1()); + } - assertNotNull(parentModified); - assertEquals( - PersistenceState.MODIFIED, - parentModified.getPersistenceState()); - assertEquals("MMM", parentModified.getGlobalAttribute1()); + @Override + public void nodeIdChanged(Object nodeId, Object newId) { + } - assertNotNull(parentCommitted); - assertEquals( - PersistenceState.COMMITTED, - parentCommitted.getPersistenceState()); + @Override + public void nodePropertyChanged(Object nodeId, + String property, Object oldValue, Object newValue) { - assertNotNull(parentHollow); + if (nodeId.equals(parentModified.getObjectId())) { + modifiedProperties[0]++; + } + } - // check that arc changes got recorded in the parent context - GraphDiff diffs = clientContext.internalGraphManager().getDiffs(); + @Override + public void nodeRemoved(Object nodeId) { - final int[] modifiedProperties = new int[1]; + } + }); - diffs.apply(new GraphChangeHandler() { + assertEquals(1, modifiedProperties[0]); + } + }); + } - public void arcCreated( - Object nodeId, - Object targetNodeId, - Object arcId) { + @Test + public void testCommitChangesToParentDeleted() throws Exception { + clientContext.newObject(ClientMtTable1.class); + clientContext.newObject(ClientMtTable1.class); + clientContext.newObject(ClientMtTable1.class); + clientContext.newObject(ClientMtTable1.class); + clientContext.commitChanges(); - } + ObjectContext child = runtime.newContext(clientContext); - public void arcDeleted( - Object nodeId, - Object targetNodeId, - Object arcId) { + // make sure we fetch in predictable order + SelectQuery<ClientMtTable1> query = new SelectQuery<ClientMtTable1>( + ClientMtTable1.class); + List<ClientMtTable1> objects = child.select(query); - } + assertEquals(4, objects.size()); - public void nodeCreated(Object nodeId) { + // delete AND modify + ClientMtTable1 childDeleted = objects.get(2); + child.deleteObjects(childDeleted); + childDeleted.setGlobalAttribute1("DDD"); - } + // don't block queries - on delete Cayenne may need to resolve delete + // rules via fetch + child.commitChangesToParent(); - public void nodeIdChanged(Object nodeId, Object newId) { - } + // * all modified child objects must be in committed state now + // * all modifications should be propagated to the parent + // * no actual commit should occur. - public void nodePropertyChanged( - Object nodeId, - String property, - Object oldValue, - Object newValue) { + assertEquals(PersistenceState.TRANSIENT, + childDeleted.getPersistenceState()); - if (nodeId.equals(parentModified.getObjectId())) { - modifiedProperties[0]++; - } - } + ClientMtTable1 parentDeleted = (ClientMtTable1) clientContext + .getGraphManager().getNode(childDeleted.getObjectId()); - public void nodeRemoved(Object nodeId) { + assertNotNull(parentDeleted); + assertEquals(PersistenceState.DELETED, + parentDeleted.getPersistenceState()); + assertEquals("DDD", parentDeleted.getGlobalAttribute1()); + } - } - }); + /* + * was added for CAY-1636 + */ + @Test + public void testCAY1636() throws Exception { - assertEquals(1, modifiedProperties[0]); - } - }); - } + ClientMtTooneMaster A = clientContext + .newObject(ClientMtTooneMaster.class); + clientContext.commitChanges(); - @Test - public void testCommitChangesToParentDeleted() throws Exception { - clientContext.newObject(ClientMtTable1.class); - clientContext.newObject(ClientMtTable1.class); - clientContext.newObject(ClientMtTable1.class); - clientContext.newObject(ClientMtTable1.class); - clientContext.commitChanges(); + ClientMtTooneDep B = clientContext.newObject(ClientMtTooneDep.class); + A.setToDependent(B); + clientContext.commitChanges(); - ObjectContext child = runtime.newContext(clientContext); + ObjectContext child = runtime.newContext(clientContext); - // make sure we fetch in predictable order - SelectQuery query = new SelectQuery(ClientMtTable1.class); - List<?> objects = child.performQuery(query); + SelectQuery<ClientMtTooneMaster> query = new SelectQuery<ClientMtTooneMaster>( + ClientMtTooneMaster.class); + List<ClientMtTooneMaster> objects = child.select(query); - assertEquals(4, objects.size()); + assertEquals(1, objects.size()); - // delete AND modify - ClientMtTable1 childDeleted = (ClientMtTable1) objects.get(2); - child.deleteObjects(childDeleted); - childDeleted.setGlobalAttribute1("DDD"); + ClientMtTooneMaster childDeleted = (ClientMtTooneMaster) objects.get(0); - // don't block queries - on delete Cayenne may need to resolve delete rules via - // fetch - child.commitChangesToParent(); + child.deleteObjects(childDeleted); - // * all modified child objects must be in committed state now - // * all modifications should be propagated to the parent - // * no actual commit should occur. + child.commitChangesToParent(); - assertEquals(PersistenceState.TRANSIENT, childDeleted.getPersistenceState()); + ClientMtTooneMaster parentDeleted = (ClientMtTooneMaster) clientContext + .getGraphManager().getNode(childDeleted.getObjectId()); - ClientMtTable1 parentDeleted = (ClientMtTable1) clientContext - .getGraphManager() - .getNode(childDeleted.getObjectId()); + assertNotNull(parentDeleted); + assertEquals(PersistenceState.DELETED, + parentDeleted.getPersistenceState()); - assertNotNull(parentDeleted); - assertEquals(PersistenceState.DELETED, parentDeleted.getPersistenceState()); - assertEquals("DDD", parentDeleted.getGlobalAttribute1()); - } + clientContext.commitChanges(); - /* - * was added for CAY-1636 - */ - @Test - public void testCAY1636() throws Exception { + SelectQuery<ClientMtTooneMaster> query2 = new SelectQuery<ClientMtTooneMaster>( + ClientMtTooneMaster.class); + List<ClientMtTooneMaster> objects2 = child.select(query2); - ClientMtTooneMaster A = clientContext.newObject(ClientMtTooneMaster.class); - clientContext.commitChanges(); + assertEquals(0, objects2.size()); - ClientMtTooneDep B = clientContext.newObject(ClientMtTooneDep.class); - A.setToDependent(B); - clientContext.commitChanges(); + } - ObjectContext child = runtime.newContext(clientContext); + @Test + public void testCAY1636_2() throws Exception { - SelectQuery query = new SelectQuery(ClientMtTooneMaster.class); - List<?> objects = child.performQuery(query); + ClientMtTooneMaster A = clientContext + .newObject(ClientMtTooneMaster.class); + clientContext.commitChanges(); - assertEquals(1, objects.size()); + ClientMtTooneDep B = clientContext.newObject(ClientMtTooneDep.class); + A.setToDependent(B); + clientContext.commitChanges(); - ClientMtTooneMaster childDeleted = (ClientMtTooneMaster) objects.get(0); + ObjectContext child = runtime.newContext(clientContext); - child.deleteObjects(childDeleted); + SelectQuery<ClientMtTooneDep> queryB = new SelectQuery<ClientMtTooneDep>( + ClientMtTooneDep.class); + List<?> objectsB = child.performQuery(queryB); - child.commitChangesToParent(); + assertEquals(1, objectsB.size()); - ClientMtTooneMaster parentDeleted = (ClientMtTooneMaster) clientContext - .getGraphManager() - .getNode(childDeleted.getObjectId()); + ClientMtTooneDep childBDeleted = (ClientMtTooneDep) objectsB.get(0); + child.deleteObjects(childBDeleted); - assertNotNull(parentDeleted); - assertEquals(PersistenceState.DELETED, parentDeleted.getPersistenceState()); + SelectQuery<ClientMtTooneMaster> query = new SelectQuery<ClientMtTooneMaster>( + ClientMtTooneMaster.class); + List<ClientMtTooneMaster> objects = child.select(query); - clientContext.commitChanges(); + assertEquals(1, objects.size()); - SelectQuery query2 = new SelectQuery(ClientMtTooneMaster.class); - List<?> objects2 = child.performQuery(query2); + ClientMtTooneMaster childDeleted = objects.get(0); - assertEquals(0, objects2.size()); + child.deleteObjects(childDeleted); - } + child.commitChangesToParent(); - @Test - public void testCAY1636_2() throws Exception { + ClientMtTooneMaster parentDeleted = (ClientMtTooneMaster) clientContext + .getGraphManager().getNode(childDeleted.getObjectId()); - ClientMtTooneMaster A = clientContext.newObject(ClientMtTooneMaster.class); - clientContext.commitChanges(); + assertNotNull(parentDeleted); + assertEquals(PersistenceState.DELETED, + parentDeleted.getPersistenceState()); - ClientMtTooneDep B = clientContext.newObject(ClientMtTooneDep.class); - A.setToDependent(B); - clientContext.commitChanges(); + clientContext.commitChanges(); - ObjectContext child = runtime.newContext(clientContext); + SelectQuery<ClientMtTooneMaster> query2 = new SelectQuery<ClientMtTooneMaster>( + ClientMtTooneMaster.class); + List<ClientMtTooneMaster> objects2 = child.select(query2); - SelectQuery queryB = new SelectQuery(ClientMtTooneDep.class); - List<?> objectsB = child.performQuery(queryB); + assertEquals(0, objects2.size()); - assertEquals(1, objectsB.size()); + } - ClientMtTooneDep childBDeleted = (ClientMtTooneDep) objectsB.get(0); - child.deleteObjects(childBDeleted); + @Test + public void testCommitChanges() throws Exception { + clientContext.newObject(ClientMtTable1.class); + clientContext.newObject(ClientMtTable1.class); + clientContext.newObject(ClientMtTable1.class); + clientContext.newObject(ClientMtTable1.class); + clientContext.commitChanges(); - SelectQuery query = new SelectQuery(ClientMtTooneMaster.class); - List<?> objects = child.performQuery(query); + ObjectContext child = runtime.newContext(clientContext); - assertEquals(1, objects.size()); + // make sure we fetch in predictable order + SelectQuery<ClientMtTable1> query = new SelectQuery<ClientMtTable1>( + ClientMtTable1.class); + List<ClientMtTable1> objects = child.select(query); - ClientMtTooneMaster childDeleted = (ClientMtTooneMaster) objects.get(0); + assertEquals(4, objects.size()); - child.deleteObjects(childDeleted); + ClientMtTable1 childNew = child.newObject(ClientMtTable1.class); + childNew.setGlobalAttribute1("NNN"); - child.commitChangesToParent(); + ClientMtTable1 childModified = objects.get(0); + childModified.setGlobalAttribute1("MMM"); - ClientMtTooneMaster parentDeleted = (ClientMtTooneMaster) clientContext - .getGraphManager() - .getNode(childDeleted.getObjectId()); + ClientMtTable1 childCommitted = objects.get(1); - assertNotNull(parentDeleted); - assertEquals(PersistenceState.DELETED, parentDeleted.getPersistenceState()); + // delete AND modify + ClientMtTable1 childDeleted = objects.get(2); + child.deleteObjects(childDeleted); + childDeleted.setGlobalAttribute1("DDD"); - clientContext.commitChanges(); + ClientMtTable1 childHollow = objects.get(3); + child.invalidateObjects(childHollow); - SelectQuery query2 = new SelectQuery(ClientMtTooneMaster.class); - List<?> objects2 = child.performQuery(query2); + child.commitChanges(); - assertEquals(0, objects2.size()); + assertEquals(PersistenceState.COMMITTED, childNew.getPersistenceState()); + assertEquals(PersistenceState.COMMITTED, + childModified.getPersistenceState()); + assertEquals(PersistenceState.COMMITTED, + childCommitted.getPersistenceState()); + assertEquals(PersistenceState.TRANSIENT, + childDeleted.getPersistenceState()); + assertEquals(PersistenceState.HOLLOW, childHollow.getPersistenceState()); - } + ClientMtTable1 parentNew = (ClientMtTable1) clientContext + .getGraphManager().getNode(childNew.getObjectId()); + ClientMtTable1 parentModified = (ClientMtTable1) clientContext + .getGraphManager().getNode(childModified.getObjectId()); + ClientMtTable1 parentCommitted = (ClientMtTable1) clientContext + .getGraphManager().getNode(childCommitted.getObjectId()); + ClientMtTable1 parentDeleted = (ClientMtTable1) clientContext + .getGraphManager().getNode(childDeleted.getObjectId()); + ClientMtTable1 parentHollow = (ClientMtTable1) clientContext + .getGraphManager().getNode(childHollow.getObjectId()); - @Test - public void testCommitChanges() throws Exception { - clientContext.newObject(ClientMtTable1.class); - clientContext.newObject(ClientMtTable1.class); - clientContext.newObject(ClientMtTable1.class); - clientContext.newObject(ClientMtTable1.class); - clientContext.commitChanges(); + assertNotNull(parentNew); + assertEquals(PersistenceState.COMMITTED, + parentNew.getPersistenceState()); + assertEquals("NNN", parentNew.getGlobalAttribute1()); - ObjectContext child = runtime.newContext(clientContext); + assertNotNull(parentModified); + assertEquals(PersistenceState.COMMITTED, + parentModified.getPersistenceState()); + assertEquals("MMM", parentModified.getGlobalAttribute1()); - // make sure we fetch in predictable order - SelectQuery query = new SelectQuery(ClientMtTable1.class); - List<?> objects = child.performQuery(query); + assertNull("Deleted object should not be registered.", parentDeleted); - assertEquals(4, objects.size()); + assertNotNull(parentCommitted); + assertEquals(PersistenceState.COMMITTED, + parentCommitted.getPersistenceState()); - ClientMtTable1 childNew = child.newObject(ClientMtTable1.class); - childNew.setGlobalAttribute1("NNN"); + assertNotNull(parentHollow); + } - ClientMtTable1 childModified = (ClientMtTable1) objects.get(0); - childModified.setGlobalAttribute1("MMM"); + @Test + public void testAddRemove() throws Exception { + ObjectContext child = runtime.newContext(clientContext); - ClientMtTable1 childCommitted = (ClientMtTable1) objects.get(1); + ClientMtTable1 a = child.newObject(ClientMtTable1.class); + a.setGlobalAttribute1("X"); + child.commitChanges(); - // delete AND modify - ClientMtTable1 childDeleted = (ClientMtTable1) objects.get(2); - child.deleteObjects(childDeleted); - childDeleted.setGlobalAttribute1("DDD"); + ClientMtTable2 p1 = child.newObject(ClientMtTable2.class); + p1.setGlobalAttribute("P1"); + a.addToTable2Array(p1); - ClientMtTable1 childHollow = (ClientMtTable1) objects.get(3); - child.invalidateObjects(childHollow); + ClientMtTable2 p2 = child.newObject(ClientMtTable2.class); + p2.setGlobalAttribute("P2"); + a.addToTable2Array(p2); - child.commitChanges(); + a.removeFromTable2Array(p2); - assertEquals(PersistenceState.COMMITTED, childNew.getPersistenceState()); - assertEquals(PersistenceState.COMMITTED, childModified.getPersistenceState()); - assertEquals(PersistenceState.COMMITTED, childCommitted.getPersistenceState()); - assertEquals(PersistenceState.TRANSIENT, childDeleted.getPersistenceState()); - assertEquals(PersistenceState.HOLLOW, childHollow.getPersistenceState()); + // this causes an error on commit + child.deleteObjects(p2); - ClientMtTable1 parentNew = (ClientMtTable1) clientContext - .getGraphManager() - .getNode(childNew.getObjectId()); - ClientMtTable1 parentModified = (ClientMtTable1) clientContext - .getGraphManager() - .getNode(childModified.getObjectId()); - ClientMtTable1 parentCommitted = (ClientMtTable1) clientContext - .getGraphManager() - .getNode(childCommitted.getObjectId()); - ClientMtTable1 parentDeleted = (ClientMtTable1) clientContext - .getGraphManager() - .getNode(childDeleted.getObjectId()); - ClientMtTable1 parentHollow = (ClientMtTable1) clientContext - .getGraphManager() - .getNode(childHollow.getObjectId()); + child.commitChangesToParent(); + + } + + @Test + public void testChangeRel() throws Exception { + ObjectContext child = runtime.newContext(clientContext); + + ClientMtTable1 a = child.newObject(ClientMtTable1.class); + ClientMtTable2 b = child.newObject(ClientMtTable2.class); + child.commitChanges(); - assertNotNull(parentNew); - assertEquals(PersistenceState.COMMITTED, parentNew.getPersistenceState()); - assertEquals("NNN", parentNew.getGlobalAttribute1()); + assertEquals(PersistenceState.COMMITTED, a.getPersistenceState()); - assertNotNull(parentModified); - assertEquals(PersistenceState.COMMITTED, parentModified.getPersistenceState()); - assertEquals("MMM", parentModified.getGlobalAttribute1()); + a.addToTable2Array(b); + assertEquals(PersistenceState.MODIFIED, a.getPersistenceState()); + + child.commitChangesToParent(); + ClientMtTable1 parentA = (ClientMtTable1) clientContext + .getGraphManager().getNode(a.getObjectId()); + assertEquals(PersistenceState.COMMITTED, a.getPersistenceState()); + assertEquals(PersistenceState.MODIFIED, parentA.getPersistenceState()); + assertEquals(1, parentA.getTable2Array().size()); + + clientContext.commitChanges(); + assertEquals(PersistenceState.COMMITTED, parentA.getPersistenceState()); + + a.removeFromTable2Array(b); + assertEquals(PersistenceState.MODIFIED, a.getPersistenceState()); + + child.commitChangesToParent(); + assertEquals(PersistenceState.COMMITTED, a.getPersistenceState()); + assertEquals(PersistenceState.MODIFIED, parentA.getPersistenceState()); + assertEquals(0, parentA.getTable2Array().size()); + } + + @Test + public void testCAY1183() throws Exception { + ClientMtTable1 parentMt = clientContext.newObject(ClientMtTable1.class); + clientContext.commitChanges(); + + ObjectContext child = runtime.newContext(clientContext); + ClientMtTable1 childMt = (ClientMtTable1) Cayenne.objectForPK(child, + parentMt.getObjectId()); + childMt.setGlobalAttribute1("1183"); + ClientMtTable2 childMt2 = child.newObject(ClientMtTable2.class); + childMt2.setGlobalAttribute("1183"); + childMt2.setTable1(childMt); - assertNull("Deleted object should not be registered.", parentDeleted); + child.commitChangesToParent(); - assertNotNull(parentCommitted); - assertEquals(PersistenceState.COMMITTED, parentCommitted.getPersistenceState()); + // fetching other relationship... this fails per CAY-1183 + childMt2.getTable3(); + } - assertNotNull(parentHollow); - } + /** + * CAY1714 + */ + @Test + public void testQueriesOnTemporaryObject() throws Exception { + ObjectContext clientContext = runtime + .newContext((DataChannel) this.clientContext); + ClientMtTable1 parentMt = clientContext.newObject(ClientMtTable1.class); - @Test - public void testAddRemove() throws Exception { - ObjectContext child = runtime.newContext(clientContext); + ObjectContext childContext = runtime + .newContext((DataChannel) clientContext); + ClientMtTable1 childMt = (ClientMtTable1) Cayenne.objectForPK( + childContext, parentMt.getObjectId()); + childMt.setGlobalAttribute1("1183"); + ClientMtTable2 childMt2 = childContext.newObject(ClientMtTable2.class); + childMt2.setGlobalAttribute("1183"); + childMt2.setTable1(childMt); - ClientMtTable1 a = child.newObject(ClientMtTable1.class); - a.setGlobalAttribute1("X"); - child.commitChanges(); + childContext.commitChangesToParent(); - ClientMtTable2 p1 = child.newObject(ClientMtTable2.class); - p1.setGlobalAttribute("P1"); - a.addToTable2Array(p1); + assertNull(childMt2.getTable3()); + } - ClientMtTable2 p2 = child.newObject(ClientMtTable2.class); - p2.setGlobalAttribute("P2"); - a.addToTable2Array(p2); + @Test + public void testCAY1194() throws Exception { + ClientMtTable1 parentMt = clientContext.newObject(ClientMtTable1.class); + ObjectContext child = runtime.newContext(clientContext); - a.removeFromTable2Array(p2); + ClientMtTable2 childMt2 = child.newObject(ClientMtTable2.class); + childMt2.setGlobalAttribute("222"); - // this causes an error on commit - child.deleteObjects(p2); + ClientMtTable1 localParentMt = child.localObject(parentMt); + assertEquals(0, parentMt.getTable2Array().size()); + assertEquals(0, localParentMt.getTable2Array().size()); - child.commitChangesToParent(); + childMt2.setTable1(localParentMt); - } - - @Test - public void testChangeRel() throws Exception { - ObjectContext child = runtime.newContext(clientContext); - - ClientMtTable1 a = child.newObject(ClientMtTable1.class); - ClientMtTable2 b = child.newObject(ClientMtTable2.class); - child.commitChanges(); + assertEquals(0, parentMt.getTable2Array().size()); + assertEquals(1, localParentMt.getTable2Array().size()); - assertEquals(PersistenceState.COMMITTED, a.getPersistenceState()); + assertEquals(localParentMt.getTable2Array().get(0).getObjectContext(), + child); - a.addToTable2Array(b); - assertEquals(PersistenceState.MODIFIED, a.getPersistenceState()); - - child.commitChangesToParent(); - ClientMtTable1 parentA = (ClientMtTable1) clientContext - .getGraphManager() - .getNode(a.getObjectId()); - assertEquals(PersistenceState.COMMITTED, a.getPersistenceState()); - assertEquals(PersistenceState.MODIFIED, parentA.getPersistenceState()); - assertEquals(1, parentA.getTable2Array().size()); - - clientContext.commitChanges(); - assertEquals(PersistenceState.COMMITTED, parentA.getPersistenceState()); - - a.removeFromTable2Array(b); - assertEquals(PersistenceState.MODIFIED, a.getPersistenceState()); - - child.commitChangesToParent(); - assertEquals(PersistenceState.COMMITTED, a.getPersistenceState()); - assertEquals(PersistenceState.MODIFIED, parentA.getPersistenceState()); - assertEquals(0, parentA.getTable2Array().size()); - } - - @Test - public void testCAY1183() throws Exception { - ClientMtTable1 parentMt = clientContext.newObject(ClientMtTable1.class); - clientContext.commitChanges(); - - ObjectContext child = runtime.newContext(clientContext); - ClientMtTable1 childMt = (ClientMtTable1) Cayenne.objectForPK( - child, - parentMt.getObjectId()); - childMt.setGlobalAttribute1("1183"); - ClientMtTable2 childMt2 = child.newObject(ClientMtTable2.class); - childMt2.setGlobalAttribute("1183"); - childMt2.setTable1(childMt); - - child.commitChangesToParent(); - - // fetching other relationship... this fails per CAY-1183 - childMt2.getTable3(); - } - - /** - * CAY1714 - */ - @Test - public void testQueriesOnTemporaryObject() throws Exception { - ObjectContext clientContext = runtime.newContext((DataChannel) this.clientContext); - ClientMtTable1 parentMt = clientContext.newObject(ClientMtTable1.class); + child.commitChangesToParent(); + assertEquals(1, parentMt.getTable2Array().size()); + assertEquals(parentMt.getTable2Array().get(0).getObjectContext(), + clientContext); + } - ObjectContext childContext = runtime.newContext((DataChannel) clientContext); - ClientMtTable1 childMt = (ClientMtTable1) Cayenne.objectForPK(childContext, parentMt.getObjectId()); - childMt.setGlobalAttribute1("1183"); - ClientMtTable2 childMt2 = childContext.newObject(ClientMtTable2.class); - childMt2.setGlobalAttribute("1183"); - childMt2.setTable1(childMt); + @Test + public void testCommitChangesToParentOneToMany() throws Exception { + ObjectContext child = runtime.newContext(clientContext); - childContext.commitChangesToParent(); + ClientMtTable1 master = child.newObject(ClientMtTable1.class); + ClientMtTable2 dep = child.newObject(ClientMtTable2.class); + master.addToTable2Array(dep); - assertNull(childMt2.getTable3()); - } + child.commitChangesToParent(); - @Test - public void testCAY1194() throws Exception { - ClientMtTable1 parentMt = clientContext.newObject(ClientMtTable1.class); - ObjectContext child = runtime.newContext(clientContext); + ClientMtTable1 masterParent = (ClientMtTable1) clientContext + .getGraphManager().getNode(master.getObjectId()); + ClientMtTable2 depParent = (ClientMtTable2) clientContext + .getGraphManager().getNode(dep.getObjectId()); - ClientMtTable2 childMt2 = child.newObject(ClientMtTable2.class); - childMt2.setGlobalAttribute("222"); + assertNotNull(masterParent); + assertNotNull(depParent); - ClientMtTable1 localParentMt = child.localObject(parentMt); - assertEquals(0, parentMt.getTable2Array().size()); - assertEquals(0, localParentMt.getTable2Array().size()); + assertSame(masterParent, depParent.getTable1()); + assertTrue(masterParent.getTable2Array().contains(depParent)); - childMt2.setTable1(localParentMt); + // check that arc changes got recorded in the parent context + GraphDiff diffs = clientContext.internalGraphManager().getDiffs(); - assertEquals(0, parentMt.getTable2Array().size()); - assertEquals(1, localParentMt.getTable2Array().size()); + final int[] arcDiffs = new int[1]; + final int[] newNodes = new int[1]; - assertEquals(localParentMt.getTable2Array().get(0).getObjectContext(), child); + diffs.apply(new GraphChangeHandler() { - child.commitChangesToParent(); - assertEquals(1, parentMt.getTable2Array().size()); - assertEquals(parentMt.getTable2Array().get(0).getObjectContext(), clientContext); - } + public void arcCreated(Object nodeId, Object targetNodeId, + Object arcId) { + arcDiffs[0]++; + } - @Test - public void testCommitChangesToParentOneToMany() throws Exception { - ObjectContext child = runtime.newContext(clientContext); - - ClientMtTable1 master = child.newObject(ClientMtTable1.class); - ClientMtTable2 dep = child.newObject(ClientMtTable2.class); - master.addToTable2Array(dep); + public void arcDeleted(Object nodeId, Object targetNodeId, + Object arcId) { + arcDiffs[0]--; + } - child.commitChangesToParent(); + public void nodeCreated(Object nodeId) { + newNodes[0]++; + } - ClientMtTable1 masterParent = (ClientMtTable1) clientContext - .getGraphManager() - .getNode(master.getObjectId()); - ClientMtTable2 depParent = (ClientMtTable2) clientContext - .getGraphManager() - .getNode(dep.getObjectId()); - - assertNotNull(masterParent); - assertNotNull(depParent); - - assertSame(masterParent, depParent.getTable1()); - assertTrue(masterParent.getTable2Array().contains(depParent)); - - // check that arc changes got recorded in the parent context - GraphDiff diffs = clientContext.internalGraphManager().getDiffs(); - - final int[] arcDiffs = new int[1]; - final int[] newNodes = new int[1]; - - diffs.apply(new GraphChangeHandler() { - - public void arcCreated(Object nodeId, Object targetNodeId, Object arcId) { - arcDiffs[0]++; - } - - public void arcDeleted(Object nodeId, Object targetNodeId, Object arcId) { - arcDiffs[0]--; - } - - public void nodeCreated(Object nodeId) { - newNodes[0]++; - } - - public void nodeIdChanged(Object nodeId, Object newId) { - } + public void nodeIdChanged(Object nodeId, Object newId) { + } - public void nodePropertyChanged( - Object nodeId, - String property, - Object oldValue, - Object newValue) { - } + public void nodePropertyChanged(Object nodeId, String property, + Object oldValue, Object newValue) { + } - public void nodeRemoved(Object nodeId) { - newNodes[0]--; - } - }); + public void nodeRemoved(Object nodeId) { + newNodes[0]--; + } + }); - assertEquals(2, newNodes[0]); - assertEquals(2, arcDiffs[0]); - } + assertEquals(2, newNodes[0]); + assertEquals(2, arcDiffs[0]); + } - @Test - public void testCommitChangesToParentOneToOne() throws Exception { - ObjectContext child = runtime.newContext(clientContext); + @Test + public void testCommitChangesToParentOneToOne() throws Exception { + ObjectContext child = runtime.newContext(clientContext); - ClientMtTooneMaster master = child.newObject(ClientMtTooneMaster.class); - ClientMtTooneDep dep = child.newObject(ClientMtTooneDep.class); - master.setToDependent(dep); + ClientMtTooneMaster master = child.newObject(ClientMtTooneMaster.class); + ClientMtTooneDep dep = child.newObject(ClientMtTooneDep.class); + master.setToDependent(dep); - child.commitChangesToParent(); + child.commitChangesToParent(); - ClientMtTooneMaster masterParent = (ClientMtTooneMaster) clientContext - .getGraphManager() - .getNode(master.getObjectId()); - ClientMtTooneDep depParent = (ClientMtTooneDep) clientContext - .getGraphManager() - .getNode(dep.getObjectId()); + ClientMtTooneMaster masterParent = (ClientMtTooneMaster) clientContext + .getGraphManager().getNode(master.getObjectId()); + ClientMtTooneDep depParent = (ClientMtTooneDep) clientContext + .getGraphManager().getNode(dep.getObjectId()); - assertNotNull(masterParent); - assertNotNull(depParent); + assertNotNull(masterParent); + assertNotNull(depParent); - assertSame(masterParent, depParent.getToMaster()); - assertSame(depParent, masterParent.getToDependent()); + assertSame(masterParent, depParent.getToMaster()); + assertSame(depParent, masterParent.getToDependent()); - // check that arc changes got recorded in the parent context - GraphDiff diffs = clientContext.internalGraphManager().getDiffs(); + // check that arc changes got recorded in the parent context + GraphDiff diffs = clientContext.internalGraphManager().getDiffs(); - final int[] arcDiffs = new int[1]; - final int[] newNodes = new int[1]; + final int[] arcDiffs = new int[1]; + final int[] newNodes = new int[1]; - diffs.apply(new GraphChangeHandler() { + diffs.apply(new GraphChangeHandler() { - public void arcCreated(Object nodeId, Object targetNodeId, Object arcId) { - arcDiffs[0]++; - } + public void arcCreated(Object nodeId, Object targetNodeId, + Object arcId) { + arcDiffs[0]++; + } - public void arcDeleted(Object nodeId, Object targetNodeId, Object arcId) { - arcDiffs[0]--; - } + public void arcDeleted(Object nodeId, Object targetNodeId, + Object arcId) { + arcDiffs[0]--; + } - public void nodeCreated(Object nodeId) { - newNodes[0]++; - } + public void nodeCreated(Object nodeId) { + newNodes[0]++; + } - public void nodeIdChanged(Object nodeId, Object newId) { - } + public void nodeIdChanged(Object nodeId, Object newId) { + } - public void nodePropertyChanged( - Object nodeId, - String property, - Object oldValue, - Object newValue) { - } + public void nodePropertyChanged(Object nodeId, String property, + Object oldValue, Object newValue) { + } - public void nodeRemoved(Object nodeId) { - newNodes[0]--; - } - }); + public void nodeRemoved(Object nodeId) { + newNodes[0]--; + } + }); - assertEquals(2, newNodes[0]); - assertEquals(2, arcDiffs[0]); - } + assertEquals(2, newNodes[0]); + assertEquals(2, arcDiffs[0]); + } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/8990e655/cayenne-client/src/test/java/org/apache/cayenne/remote/MockMessage.java ---------------------------------------------------------------------- diff --git a/cayenne-client/src/test/java/org/apache/cayenne/remote/MockMessage.java b/cayenne-client/src/test/java/org/apache/cayenne/remote/MockMessage.java deleted file mode 100644 index 0ed1de9..0000000 --- a/cayenne-client/src/test/java/org/apache/cayenne/remote/MockMessage.java +++ /dev/null @@ -1,50 +0,0 @@ -/***************************************************************** - * 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.cayenne.remote; - -import org.apache.cayenne.DataChannel; -import org.apache.cayenne.remote.ClientMessage; - -public class MockMessage implements ClientMessage { - - DataChannel lastChannel; - - public MockMessage() { - - } - - public Object dispatch(DataChannel channel) { - this.lastChannel = channel; - return null; - } - - public DataChannel getLastChannel() { - return lastChannel; - } - - /** - * Returns a description of the type of message. In this case always "Mock message". - */ - @Override - public String toString() { - return "Mock message"; - } -} http://git-wip-us.apache.org/repos/asf/cayenne/blob/8990e655/cayenne-client/src/test/java/org/apache/cayenne/remote/NestedObjectContextLocalIT.java ---------------------------------------------------------------------- diff --git a/cayenne-client/src/test/java/org/apache/cayenne/remote/NestedObjectContextLocalIT.java b/cayenne-client/src/test/java/org/apache/cayenne/remote/NestedObjectContextLocalIT.java index 29eaf61..418841a 100644 --- a/cayenne-client/src/test/java/org/apache/cayenne/remote/NestedObjectContextLocalIT.java +++ b/cayenne-client/src/test/java/org/apache/cayenne/remote/NestedObjectContextLocalIT.java @@ -59,7 +59,7 @@ public class NestedObjectContextLocalIT extends RemoteCayenneCase { @Test public void testLocalCacheStaysLocal() { - SelectQuery query = new SelectQuery(ClientMtTable1.class); + SelectQuery<ClientMtTable1> query = new SelectQuery<ClientMtTable1>(ClientMtTable1.class); query.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE); BaseContext child1 = (BaseContext) runtime.newContext(clientContext); http://git-wip-us.apache.org/repos/asf/cayenne/blob/8990e655/cayenne-client/src/test/java/org/apache/cayenne/remote/ROPPrefetchToManyMapIT.java ---------------------------------------------------------------------- diff --git a/cayenne-client/src/test/java/org/apache/cayenne/remote/ROPPrefetchToManyMapIT.java b/cayenne-client/src/test/java/org/apache/cayenne/remote/ROPPrefetchToManyMapIT.java index 0eb0226..07cefec 100644 --- a/cayenne-client/src/test/java/org/apache/cayenne/remote/ROPPrefetchToManyMapIT.java +++ b/cayenne-client/src/test/java/org/apache/cayenne/remote/ROPPrefetchToManyMapIT.java @@ -78,7 +78,7 @@ public class ROPPrefetchToManyMapIT extends RemoteCayenneCase { context.performQuery(new RefreshQuery()); - SelectQuery query = new SelectQuery(ClientMtMapToMany.class); + SelectQuery<ClientMtMapToMany> query = new SelectQuery<ClientMtMapToMany>(ClientMtMapToMany.class); query.addPrefetch("targets"); final ClientMtMapToMany mapToMany = (ClientMtMapToMany) Cayenne.objectForQuery(context, query); http://git-wip-us.apache.org/repos/asf/cayenne/blob/8990e655/cayenne-client/src/test/java/org/apache/cayenne/remote/RemoteIncrementalFaultListIT.java ---------------------------------------------------------------------- diff --git a/cayenne-client/src/test/java/org/apache/cayenne/remote/RemoteIncrementalFaultListIT.java b/cayenne-client/src/test/java/org/apache/cayenne/remote/RemoteIncrementalFaultListIT.java index c0faac4..77f15f4 100644 --- a/cayenne-client/src/test/java/org/apache/cayenne/remote/RemoteIncrementalFaultListIT.java +++ b/cayenne-client/src/test/java/org/apache/cayenne/remote/RemoteIncrementalFaultListIT.java @@ -19,6 +19,10 @@ package org.apache.cayenne.remote; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; + import org.apache.cayenne.CayenneContext; import org.apache.cayenne.Persistent; import org.apache.cayenne.di.Inject; @@ -34,247 +38,246 @@ import org.apache.cayenne.unit.di.client.ClientCase; import org.apache.cayenne.unit.di.server.UseServerRuntime; import org.junit.Test; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; - @UseServerRuntime(ClientCase.MULTI_TIER_PROJECT) public class RemoteIncrementalFaultListIT extends ClientCase { - private static final int COUNT = 25; - - @Inject - private CayenneContext clientContext; - - @Inject - private DBHelper dbHelper; - - private TableHelper tMTTable; - - private RemoteIncrementalFaultList list; - private SelectQuery query; - - @Override - protected void setUpAfterInjection() throws Exception { - dbHelper.deleteAll("MT_TABLE2"); - dbHelper.deleteAll("MT_TABLE1"); - - tMTTable = new TableHelper(dbHelper, "MT_TABLE1"); - tMTTable.setColumns("TABLE1_ID", "GLOBAL_ATTRIBUTE1", "SERVER_ATTRIBUTE1"); - } - - protected void createObjectsDataSet() throws Exception { - tMTTable.insert(1, "g1", "s1"); - tMTTable.insert(2, "g2", "s2"); - tMTTable.insert(3, "g3", "s3"); - tMTTable.insert(4, "g4", "s4"); - tMTTable.insert(5, "g5", "s5"); - tMTTable.insert(6, "g6", "s6"); - tMTTable.insert(7, "g7", "s7"); - tMTTable.insert(8, "g8", "s8"); - tMTTable.insert(9, "g9", "s9"); - tMTTable.insert(10, "g10", "s10"); - tMTTable.insert(11, "g11", "s11"); - tMTTable.insert(12, "g12", "s12"); - tMTTable.insert(13, "g13", "s13"); - tMTTable.insert(14, "g14", "s14"); - tMTTable.insert(15, "g15", "s15"); - tMTTable.insert(16, "g16", "s16"); - tMTTable.insert(17, "g17", "s17"); - tMTTable.insert(18, "g18", "s18"); - tMTTable.insert(19, "g19", "s19"); - tMTTable.insert(20, "g20", "s20"); - tMTTable.insert(21, "g21", "s21"); - tMTTable.insert(22, "g22", "s22"); - tMTTable.insert(23, "g23", "s23"); - tMTTable.insert(24, "g24", "s24"); - tMTTable.insert(25, "g25", "s25"); - } - - private void prepareList(int pageSize) throws Exception { - - createObjectsDataSet(); - - query = new SelectQuery(ClientMtTable1.class); - - // make sure total number of objects is not divisable - // by the page size, to test the last smaller page - query.setPageSize(pageSize); - query.addOrdering("db:" + MtTable1.TABLE1_ID_PK_COLUMN, SortOrder.ASCENDING); - - list = new RemoteIncrementalFaultList(clientContext, query); - } - - @Test - public void testSize() throws Exception { - prepareList(6); - assertEquals(COUNT, list.size()); - } - - @Test - public void testIteratorPageSize1() throws Exception { - doTestIterator(1); - } - - @Test - public void testIteratorPageSize5() throws Exception { - // size divisiable by page size - doTestIterator(5); - } - - @Test - public void testIteratorPageSize6() throws Exception { - // size not divisable by page size - doTestIterator(6); - } - - @Test - public void testIteratorPageSize25() throws Exception { - // size equals to page size - doTestIterator(COUNT); - } - - @Test - public void testIteratorPageSize26() throws Exception { - // size exceeding page size - doTestIterator(COUNT + 1); - } - - @Test - public void testListIterator() throws Exception { - prepareList(6); - ListIterator<?> it = list.listIterator(); - - assertTrue(it.hasNext()); - - int counter = 0; - while (it.hasNext()) { - Object obj = it.next(); - assertNotNull(obj); - assertTrue(obj instanceof Persistent); - - // iterator must be resolved page by page - int expectedResolved = list.pageIndex(counter) - * list.getPageSize() - + list.getPageSize(); - if (expectedResolved > list.size()) { - expectedResolved = list.size(); - } - - assertEquals(list.size() - expectedResolved, list.getUnfetchedObjects()); - - counter++; - } - } - - @Test - public void testUnfetchedObjects() throws Exception { - prepareList(6); - assertEquals(COUNT - 6, list.getUnfetchedObjects()); - list.get(7); - assertEquals(COUNT - 12, list.getUnfetchedObjects()); - list.resolveAll(); - assertEquals(0, list.getUnfetchedObjects()); - } - - @Test - public void testPageIndex() throws Exception { - prepareList(6); - assertEquals(0, list.pageIndex(0)); - assertEquals(0, list.pageIndex(1)); - assertEquals(1, list.pageIndex(6)); - - try { - assertEquals(13, list.pageIndex(82)); - fail("Element index beyound array size must throw an IndexOutOfBoundsException."); - } - catch (IndexOutOfBoundsException ex) { - // exception expercted - } - } - - @Test - public void testPagesRead1() throws Exception { - prepareList(6); - assertTrue(list.elements.get(0) instanceof ClientMtTable1); - assertSame(RemoteIncrementalFaultList.PLACEHOLDER, list.elements.get(8)); - - list.resolveInterval(5, 10); - assertTrue(list.elements.get(7) instanceof ClientMtTable1); - - list.resolveAll(); - assertTrue((list.elements.get(list.size() - 1)) instanceof ClientMtTable1); - } - - @Test - public void testGet1() throws Exception { - prepareList(6); - assertTrue(list.elements.get(0) instanceof ClientMtTable1); - assertSame(RemoteIncrementalFaultList.PLACEHOLDER, list.elements.get(8)); - - Object a = list.get(8); - - assertNotNull(a); - assertTrue(a instanceof ClientMtTable1); - assertTrue(list.elements.get(8) instanceof ClientMtTable1); - } - - @Test - public void testIndexOf() throws Exception { - prepareList(6); - - Expression qual = ExpressionFactory.matchExp( - ClientMtTable1.GLOBAL_ATTRIBUTE1_PROPERTY, - "g20"); - SelectQuery query = new SelectQuery(ClientMtTable1.class, qual); - List<?> artists = list.context.performQuery(query); - - assertEquals(1, artists.size()); - - ClientMtTable1 row = (ClientMtTable1) artists.get(0); - assertEquals(19, list.indexOf(row)); - assertEquals(-1, list.indexOf(list.context.newObject(ClientMtTable1.class))); - } - - @Test - public void testLastIndexOf() throws Exception { - prepareList(6); - Expression qual = ExpressionFactory.matchExp( - ClientMtTable1.GLOBAL_ATTRIBUTE1_PROPERTY, - "g20"); - SelectQuery query = new SelectQuery(ClientMtTable1.class, qual); - List<?> objects = list.context.performQuery(query); - - assertEquals(1, objects.size()); - - ClientMtTable1 row = (ClientMtTable1) objects.get(0); - assertEquals(19, list.lastIndexOf(row)); - assertEquals(-1, list.lastIndexOf(list.context.newObject(ClientMtTable1.class))); - } - - private void doTestIterator(int size) throws Exception { - prepareList(size); - Iterator<?> it = list.iterator(); - - assertTrue(it.hasNext()); - - int counter = 0; - while (it.hasNext()) { - Object obj = it.next(); - assertNotNull(obj); - assertTrue(obj instanceof Persistent); - - // iterator must be resolved page by page - int expectedResolved = list.pageIndex(counter) - * list.getPageSize() - + list.getPageSize(); - if (expectedResolved > list.size()) { - expectedResolved = list.size(); - } - - assertEquals(list.size() - expectedResolved, list.getUnfetchedObjects()); - - counter++; - } - } + private static final int COUNT = 25; + + @Inject + private CayenneContext clientContext; + + @Inject + private DBHelper dbHelper; + + private TableHelper tMTTable; + + private RemoteIncrementalFaultList list; + + @Override + protected void setUpAfterInjection() throws Exception { + dbHelper.deleteAll("MT_TABLE2"); + dbHelper.deleteAll("MT_TABLE1"); + + tMTTable = new TableHelper(dbHelper, "MT_TABLE1"); + tMTTable.setColumns("TABLE1_ID", "GLOBAL_ATTRIBUTE1", + "SERVER_ATTRIBUTE1"); + } + + protected void createObjectsDataSet() throws Exception { + tMTTable.insert(1, "g1", "s1"); + tMTTable.insert(2, "g2", "s2"); + tMTTable.insert(3, "g3", "s3"); + tMTTable.insert(4, "g4", "s4"); + tMTTable.insert(5, "g5", "s5"); + tMTTable.insert(6, "g6", "s6"); + tMTTable.insert(7, "g7", "s7"); + tMTTable.insert(8, "g8", "s8"); + tMTTable.insert(9, "g9", "s9"); + tMTTable.insert(10, "g10", "s10"); + tMTTable.insert(11, "g11", "s11"); + tMTTable.insert(12, "g12", "s12"); + tMTTable.insert(13, "g13", "s13"); + tMTTable.insert(14, "g14", "s14"); + tMTTable.insert(15, "g15", "s15"); + tMTTable.insert(16, "g16", "s16"); + tMTTable.insert(17, "g17", "s17"); + tMTTable.insert(18, "g18", "s18"); + tMTTable.insert(19, "g19", "s19"); + tMTTable.insert(20, "g20", "s20"); + tMTTable.insert(21, "g21", "s21"); + tMTTable.insert(22, "g22", "s22"); + tMTTable.insert(23, "g23", "s23"); + tMTTable.insert(24, "g24", "s24"); + tMTTable.insert(25, "g25", "s25"); + } + + private void prepareList(int pageSize) throws Exception { + + createObjectsDataSet(); + + SelectQuery<ClientMtTable1> query = new SelectQuery<ClientMtTable1>( + ClientMtTable1.class); + + // make sure total number of objects is not divisable + // by the page size, to test the last smaller page + query.setPageSize(pageSize); + query.addOrdering("db:" + MtTable1.TABLE1_ID_PK_COLUMN, + SortOrder.ASCENDING); + + list = new RemoteIncrementalFaultList(clientContext, query); + } + + @Test + public void testSize() throws Exception { + prepareList(6); + assertEquals(COUNT, list.size()); + } + + @Test + public void testIteratorPageSize1() throws Exception { + doTestIterator(1); + } + + @Test + public void testIteratorPageSize5() throws Exception { + // size divisiable by page size + doTestIterator(5); + } + + @Test + public void testIteratorPageSize6() throws Exception { + // size not divisable by page size + doTestIterator(6); + } + + @Test + public void testIteratorPageSize25() throws Exception { + // size equals to page size + doTestIterator(COUNT); + } + + @Test + public void testIteratorPageSize26() throws Exception { + // size exceeding page size + doTestIterator(COUNT + 1); + } + + @Test + public void testListIterator() throws Exception { + prepareList(6); + ListIterator<?> it = list.listIterator(); + + assertTrue(it.hasNext()); + + int counter = 0; + while (it.hasNext()) { + Object obj = it.next(); + assertNotNull(obj); + assertTrue(obj instanceof Persistent); + + // iterator must be resolved page by page + int expectedResolved = list.pageIndex(counter) * list.getPageSize() + + list.getPageSize(); + if (expectedResolved > list.size()) { + expectedResolved = list.size(); + } + + assertEquals(list.size() - expectedResolved, + list.getUnfetchedObjects()); + + counter++; + } + } + + @Test + public void testUnfetchedObjects() throws Exception { + prepareList(6); + assertEquals(COUNT - 6, list.getUnfetchedObjects()); + list.get(7); + assertEquals(COUNT - 12, list.getUnfetchedObjects()); + list.resolveAll(); + assertEquals(0, list.getUnfetchedObjects()); + } + + @Test + public void testPageIndex() throws Exception { + prepareList(6); + assertEquals(0, list.pageIndex(0)); + assertEquals(0, list.pageIndex(1)); + assertEquals(1, list.pageIndex(6)); + + try { + assertEquals(13, list.pageIndex(82)); + fail("Element index beyound array size must throw an IndexOutOfBoundsException."); + } catch (IndexOutOfBoundsException ex) { + // exception expercted + } + } + + @Test + public void testPagesRead1() throws Exception { + prepareList(6); + assertTrue(list.elements.get(0) instanceof ClientMtTable1); + assertSame(RemoteIncrementalFaultList.PLACEHOLDER, list.elements.get(8)); + + list.resolveInterval(5, 10); + assertTrue(list.elements.get(7) instanceof ClientMtTable1); + + list.resolveAll(); + assertTrue((list.elements.get(list.size() - 1)) instanceof ClientMtTable1); + } + + @Test + public void testGet1() throws Exception { + prepareList(6); + assertTrue(list.elements.get(0) instanceof ClientMtTable1); + assertSame(RemoteIncrementalFaultList.PLACEHOLDER, list.elements.get(8)); + + Object a = list.get(8); + + assertNotNull(a); + assertTrue(a instanceof ClientMtTable1); + assertTrue(list.elements.get(8) instanceof ClientMtTable1); + } + + @Test + public void testIndexOf() throws Exception { + prepareList(6); + + Expression qual = ExpressionFactory.matchExp( + ClientMtTable1.GLOBAL_ATTRIBUTE1_PROPERTY, "g20"); + SelectQuery<ClientMtTable1> query = new SelectQuery<ClientMtTable1>( + ClientMtTable1.class, qual); + List<?> artists = list.context.performQuery(query); + + assertEquals(1, artists.size()); + + ClientMtTable1 row = (ClientMtTable1) artists.get(0); + assertEquals(19, list.indexOf(row)); + assertEquals(-1, + list.indexOf(list.context.newObject(ClientMtTable1.class))); + } + + @Test + public void testLastIndexOf() throws Exception { + prepareList(6); + Expression qual = ExpressionFactory.matchExp( + ClientMtTable1.GLOBAL_ATTRIBUTE1_PROPERTY, "g20"); + SelectQuery<ClientMtTable1> query = new SelectQuery<ClientMtTable1>( + ClientMtTable1.class, qual); + List<?> objects = list.context.performQuery(query); + + assertEquals(1, objects.size()); + + ClientMtTable1 row = (ClientMtTable1) objects.get(0); + assertEquals(19, list.lastIndexOf(row)); + assertEquals(-1, + list.lastIndexOf(list.context.newObject(ClientMtTable1.class))); + } + + private void doTestIterator(int size) throws Exception { + prepareList(size); + Iterator<?> it = list.iterator(); + + assertTrue(it.hasNext()); + + int counter = 0; + while (it.hasNext()) { + Object obj = it.next(); + assertNotNull(obj); + assertTrue(obj instanceof Persistent); + + // iterator must be resolved page by page + int expectedResolved = list.pageIndex(counter) * list.getPageSize() + + list.getPageSize(); + if (expectedResolved > list.size()) { + expectedResolved = list.size(); + } + + assertEquals(list.size() - expectedResolved, + list.getUnfetchedObjects()); + + counter++; + } + } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/8990e655/cayenne-client/src/test/java/org/apache/cayenne/remote/ValueInjectorIT.java ---------------------------------------------------------------------- diff --git a/cayenne-client/src/test/java/org/apache/cayenne/remote/ValueInjectorIT.java b/cayenne-client/src/test/java/org/apache/cayenne/remote/ValueInjectorIT.java index a86b12e..0503ffc 100644 --- a/cayenne-client/src/test/java/org/apache/cayenne/remote/ValueInjectorIT.java +++ b/cayenne-client/src/test/java/org/apache/cayenne/remote/ValueInjectorIT.java @@ -22,6 +22,7 @@ import org.apache.cayenne.ObjectContext; import org.apache.cayenne.access.DataContext; import org.apache.cayenne.di.Inject; import org.apache.cayenne.exp.Expression; +import org.apache.cayenne.exp.ExpressionFactory; import org.apache.cayenne.map.ObjEntity; import org.apache.cayenne.remote.service.LocalConnection; import org.apache.cayenne.testdo.mt.ClientMtTable1Subclass1; @@ -66,7 +67,7 @@ public class ValueInjectorIT extends RemoteCayenneCase { assertEquals(ee.getGlobalAttribute1(), "sub1"); // check AND - entity.setDeclaredQualifier(qualifier.andExp(Expression.fromString("serverAttribute1 = 'sa'"))); + entity.setDeclaredQualifier(qualifier.andExp(ExpressionFactory.exp("serverAttribute1 = 'sa'"))); ee = serverContext.newObject(MtTable1Subclass1.class); assertEquals(ee.getGlobalAttribute1(), "sub1"); assertEquals(ee.getServerAttribute1(), "sa"); @@ -86,7 +87,7 @@ public class ValueInjectorIT extends RemoteCayenneCase { assertEquals(ee.getGlobalAttribute1(), "sub1"); // check AND - entity.setDeclaredQualifier(qualifier.andExp(Expression.fromString("serverAttribute1 = 'sa'"))); + entity.setDeclaredQualifier(qualifier.andExp(ExpressionFactory.exp("serverAttribute1 = 'sa'"))); ee = context.newObject(ClientMtTable1Subclass1.class); assertEquals(ee.getGlobalAttribute1(), "sub1"); assertEquals(ee.getServerAttribute1(), "sa");