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");

Reply via email to