You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2014/11/14 18:47:18 UTC
[17/50] [abbrv] cayenne git commit: random tests cleanup
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/CAY-1946
Commit: 8990e65545d4d65773a0e5d1350a9e602a0d3d77
Parents: 2430e94
Author: aadamchik <aa...@apache.org>
Authored: Tue Nov 4 20:16:05 2014 +0300
Committer: aadamchik <aa...@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");