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 2010/06/14 15:40:51 UTC

svn commit: r954463 [2/2] - in /cayenne/main/trunk: build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/ framework/cayenne-di-unpublished/src/main/java/org/apache/cayenne/di/ framework/cayenne-jdk1.5-unpublished/src/main/java/...

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryTest.java?rev=954463&r1=954462&r2=954463&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryTest.java Mon Jun 14 13:40:50 2010
@@ -19,18 +19,19 @@
 
 package org.apache.cayenne.query;
 
-import java.sql.Connection;
-import java.sql.PreparedStatement;
 import java.util.Collections;
 import java.util.List;
 
 import org.apache.cayenne.DataRow;
 import org.apache.cayenne.ObjectContext;
+import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.exp.Expression;
 import org.apache.cayenne.exp.ExpressionFactory;
+import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.ObjRelationship;
+import org.apache.cayenne.test.jdbc.DBHelper;
 import org.apache.cayenne.test.jdbc.TableHelper;
 import org.apache.cayenne.testdo.testmap.Artist;
 import org.apache.cayenne.testdo.testmap.ArtistExhibit;
@@ -38,25 +39,73 @@ import org.apache.cayenne.testdo.testmap
 import org.apache.cayenne.testdo.testmap.Exhibit;
 import org.apache.cayenne.testdo.testmap.Gallery;
 import org.apache.cayenne.testdo.testmap.Painting;
+import org.apache.cayenne.unit.AccessStackAdapter;
+import org.apache.cayenne.unit.di.server.ServerCase;
+import org.apache.cayenne.unit.di.server.UseServerRuntime;
 
-public class SelectQueryTest extends SelectQueryBase {
+@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
+public class SelectQueryTest extends ServerCase {
 
-    private static final int _artistCount = 20;
-    private static final int _clobCount = 2;
+    @Inject
+    protected ObjectContext context;
+
+    @Inject
+    protected DBHelper dbHelper;
+
+    @Inject
+    protected AccessStackAdapter accessStackAdapter;
+
+    @Override
+    protected void setUpAfterInjection() throws Exception {
+        dbHelper.deleteAll("PAINTING_INFO");
+        dbHelper.deleteAll("PAINTING");
+        dbHelper.deleteAll("ARTIST_EXHIBIT");
+        dbHelper.deleteAll("ARTIST");
+    }
+
+    protected void createClobDataSet() throws Exception {
+        TableHelper tClobTest = new TableHelper(dbHelper, "CLOB_TEST");
+        tClobTest.setColumns("CLOB_TEST_ID", "CLOB_COL");
+
+        tClobTest.deleteAll();
+
+        tClobTest.insert(1, "clob1");
+        tClobTest.insert(2, "clob2");
+    }
+
+    protected void createArtistsDataSet() throws Exception {
+        TableHelper tArtist = new TableHelper(dbHelper, "ARTIST");
+        tArtist.setColumns("ARTIST_ID", "ARTIST_NAME", "DATE_OF_BIRTH");
+
+        long dateBase = System.currentTimeMillis();
+
+        for (int i = 1; i <= 20; i++) {
+            tArtist.insert(i, "artist" + i, new java.sql.Date(dateBase + 10000 * i));
+        }
+    }
+
+    protected void createArtistsWildcardDataSet() throws Exception {
+        TableHelper tArtist = new TableHelper(dbHelper, "ARTIST");
+        tArtist.setColumns("ARTIST_ID", "ARTIST_NAME");
+
+        tArtist.insert(1, "_X");
+        tArtist.insert(2, "Y_");
+    }
 
     public void testFetchLimit() throws Exception {
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+
+        SelectQuery query = new SelectQuery(Artist.class);
         query.setFetchLimit(7);
-        performQuery();
 
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
+        List objects = context.performQuery(query);
         assertNotNull(objects);
         assertEquals(7, objects.size());
     }
 
     public void testFetchOffset() throws Exception {
-        ObjectContext context = createDataContext();
+
+        createArtistsDataSet();
 
         int totalRows = context.performQuery(new SelectQuery(Artist.class)).size();
 
@@ -69,10 +118,12 @@ public class SelectQueryTest extends Sel
         assertEquals("artist6", results.get(0).getArtistName());
     }
 
-    public void testDbEntityRoot() {
-        ObjectContext context = createDataContext();
+    public void testDbEntityRoot() throws Exception {
+
+        createArtistsDataSet();
+        DbEntity artistDbEntity = context.getEntityResolver().getDbEntity("ARTIST");
 
-        SelectQuery query = new SelectQuery(getDbEntity("ARTIST"));
+        SelectQuery query = new SelectQuery(artistDbEntity);
         List results = context.performQuery(query);
 
         assertEquals(20, results.size());
@@ -80,8 +131,7 @@ public class SelectQueryTest extends Sel
     }
 
     public void testFetchLimitWithOffset() throws Exception {
-        ObjectContext context = createDataContext();
-
+        createArtistsDataSet();
         SelectQuery query = new SelectQuery(Artist.class);
         query.addOrdering("db:" + Artist.ARTIST_ID_PK_COLUMN, SortOrder.ASCENDING);
         query.setFetchOffset(15);
@@ -93,314 +143,259 @@ public class SelectQueryTest extends Sel
     }
 
     public void testFetchOffsetWithQualifier() throws Exception {
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
         query.setQualifier(Expression.fromString("db:ARTIST_ID > 3"));
         query.setFetchOffset(5);
-        performQuery();
-        int size = opObserver.rowsForQuery(query).size();
 
-        SelectQuery sizeQ = new SelectQuery();
-        sizeQ.setRoot(Artist.class);
+        List objects = context.performQuery(query);
+        int size = objects.size();
+
+        SelectQuery sizeQ = new SelectQuery(Artist.class);
         sizeQ.setQualifier(Expression.fromString("db:ARTIST_ID > 3"));
-        query = sizeQ;
-        performQuery();
-        int sizeAll = opObserver.rowsForQuery(query).size();
+        List objects1 = context.performQuery(sizeQ);
+        int sizeAll = objects1.size();
         assertEquals(size, sizeAll - 5);
     }
 
     public void testFetchLimitWithQualifier() throws Exception {
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
         query.setQualifier(Expression.fromString("db:ARTIST_ID > 3"));
         query.setFetchLimit(7);
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
-        assertNotNull(objects);
+        List objects = context.performQuery(query);
         assertEquals(7, objects.size());
     }
 
     public void testSelectAllObjectsRootEntityName() throws Exception {
-        query.setRoot(Artist.class);
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
-        assertNotNull(objects);
-        assertEquals(_artistCount, objects.size());
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery("Artist");
+        List objects = context.performQuery(query);
+        assertEquals(20, objects.size());
     }
 
     public void testSelectAllObjectsRootClass() throws Exception {
-        query.setRoot(Artist.class);
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
-        assertNotNull(objects);
-        assertEquals(_artistCount, objects.size());
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
+        List objects = context.performQuery(query);
+        assertEquals(20, objects.size());
     }
 
     public void testSelectAllObjectsRootObjEntity() throws Exception {
-        query.setRoot(this.getDomain().getEntityResolver().lookupObjEntity(Artist.class));
-        performQuery();
+        createArtistsDataSet();
+        ObjEntity artistEntity = context
+                .getEntityResolver()
+                .lookupObjEntity(Artist.class);
+        SelectQuery query = new SelectQuery(artistEntity);
 
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
-        assertNotNull(objects);
-        assertEquals(_artistCount, objects.size());
+        List objects = context.performQuery(query);
+        assertEquals(20, objects.size());
     }
 
     public void testSelectLikeExactMatch() throws Exception {
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.likeExp("artistName", "artist1");
         query.setQualifier(qual);
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
+        List objects = context.performQuery(query);
         assertEquals(1, objects.size());
     }
 
     public void testSelectNotLikeSingleWildcardMatch() throws Exception {
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.notLikeExp("artistName", "artist11%");
         query.setQualifier(qual);
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
-        assertEquals(_artistCount - 1, objects.size());
+        List objects = context.performQuery(query);
+        assertEquals(19, objects.size());
     }
 
     public void testSelectNotLikeIgnoreCaseSingleWildcardMatch() throws Exception {
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.notLikeIgnoreCaseExp(
                 "artistName",
                 "aRtIsT11%");
         query.setQualifier(qual);
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
-        assertEquals(_artistCount - 1, objects.size());
+        List objects = context.performQuery(query);
+        assertEquals(19, objects.size());
     }
 
     public void testSelectLikeCaseSensitive() throws Exception {
-        if (!getAccessStackAdapter().supportsCaseSensitiveLike()) {
+        if (!accessStackAdapter.supportsCaseSensitiveLike()) {
             return;
         }
 
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.likeExp("artistName", "aRtIsT%");
         query.setQualifier(qual);
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
+        List objects = context.performQuery(query);
         assertEquals(0, objects.size());
     }
 
     public void testSelectLikeSingleWildcardMatch() throws Exception {
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.likeExp("artistName", "artist11%");
         query.setQualifier(qual);
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
-        assertNotNull(objects);
+        List objects = context.performQuery(query);
         assertEquals(1, objects.size());
     }
 
     public void testSelectLikeSingleWildcardMatchAndEscape() throws Exception {
 
-        TableHelper artistHelper = new TableHelper(getDbHelper(), "ARTIST");
-        artistHelper.deleteAll();
-        artistHelper.setColumns("ARTIST_ID", "ARTIST_NAME");
-        artistHelper.insert(1, "_X");
-        artistHelper.insert(2, "Y_");
+        createArtistsWildcardDataSet();
 
         SelectQuery query = new SelectQuery(Artist.class);
         query.andQualifier(ExpressionFactory.likeExp("artistName", "=_%", '='));
- 
-        List objects = createDataContext().performQuery(query);
+
+        List objects = context.performQuery(query);
         assertEquals(1, objects.size());
     }
 
     public void testSelectLikeMultipleWildcardMatch() throws Exception {
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.likeExp("artistName", "artist1%");
         query.setQualifier(qual);
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
-        assertNotNull(objects);
+        List objects = context.performQuery(query);
         assertEquals(11, objects.size());
     }
 
     /** Test how "like ignore case" works when using uppercase parameter. */
     public void testSelectLikeIgnoreCaseObjects1() throws Exception {
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.likeIgnoreCaseExp("artistName", "ARTIST%");
         query.setQualifier(qual);
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
-        assertNotNull(objects);
-        assertEquals(_artistCount, objects.size());
+        List objects = context.performQuery(query);
+        assertEquals(20, objects.size());
     }
 
     /** Test how "like ignore case" works when using lowercase parameter. */
     public void testSelectLikeIgnoreCaseObjects2() throws Exception {
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.likeIgnoreCaseExp("artistName", "artist%");
         query.setQualifier(qual);
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
-        assertNotNull(objects);
-        assertEquals(_artistCount, objects.size());
+        List objects = context.performQuery(query);
+        assertEquals(20, objects.size());
     }
 
     /** Test how "like ignore case" works when using uppercase parameter. */
     public void testSelectLikeIgnoreCaseClob() throws Exception {
-        if (accessStack.getAdapter(getNode()).supportsLobs()) {
-            query.setRoot(ClobTestEntity.class);
+        if (accessStackAdapter.supportsLobs()) {
+            createClobDataSet();
+            SelectQuery query = new SelectQuery(ClobTestEntity.class);
             Expression qual = ExpressionFactory.likeIgnoreCaseExp("clobCol", "clob%");
             query.setQualifier(qual);
-            performQuery();
-
-            // check query results
-            List objects = opObserver.rowsForQuery(query);
-            assertNotNull(objects);
-            assertEquals(_clobCount, objects.size());
+            List objects = context.performQuery(query);
+            assertEquals(2, objects.size());
         }
     }
 
     public void testSelectIn() throws Exception {
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = Expression.fromString("artistName in ('artist1', 'artist2')");
         query.setQualifier(qual);
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
+        List objects = context.performQuery(query);
         assertEquals(2, objects.size());
     }
 
     public void testSelectParameterizedIn() throws Exception {
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = Expression.fromString("artistName in $list");
         query.setQualifier(qual);
         query = query.queryWithParameters(Collections.singletonMap("list", new Object[] {
                 "artist1", "artist2"
         }));
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
+        List objects = context.performQuery(query);
         assertEquals(2, objects.size());
     }
 
     public void testSelectParameterizedEmptyIn() throws Exception {
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = Expression.fromString("artistName in $list");
         query.setQualifier(qual);
         query = query.queryWithParameters(Collections.singletonMap(
                 "list",
                 new Object[] {}));
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
+        List objects = context.performQuery(query);
         assertEquals(0, objects.size());
     }
 
     public void testSelectParameterizedEmptyNotIn() throws Exception {
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = Expression.fromString("artistName not in $list");
         query.setQualifier(qual);
         query = query.queryWithParameters(Collections.singletonMap(
                 "list",
                 new Object[] {}));
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
+        List objects = context.performQuery(query);
         assertEquals(20, objects.size());
     }
 
     public void testSelectEmptyIn() throws Exception {
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.inExp("artistName");
         query.setQualifier(qual);
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
+        List objects = context.performQuery(query);
         assertEquals(0, objects.size());
     }
 
     public void testSelectEmptyNotIn() throws Exception {
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.notInExp("artistName");
         query.setQualifier(qual);
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
+        List objects = context.performQuery(query);
         assertEquals(20, objects.size());
     }
 
     public void testSelectBooleanTrue() throws Exception {
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.expTrue();
         qual = qual.andExp(ExpressionFactory.matchExp("artistName", "artist1"));
         query.setQualifier(qual);
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
+        List objects = context.performQuery(query);
         assertEquals(1, objects.size());
     }
 
     public void testSelectBooleanNotTrueOr() throws Exception {
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.expTrue();
         qual = qual.notExp();
         qual = qual.orExp(ExpressionFactory.matchExp("artistName", "artist1"));
         query.setQualifier(qual);
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
+        List objects = context.performQuery(query);
         assertEquals(1, objects.size());
     }
 
     public void testSelectBooleanFalse() throws Exception {
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.expFalse();
         qual = qual.andExp(ExpressionFactory.matchExp("artistName", "artist1"));
         query.setQualifier(qual);
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
+        List objects = context.performQuery(query);
         assertEquals(0, objects.size());
     }
 
     public void testSelectBooleanFalseOr() throws Exception {
-        query.setRoot(Artist.class);
+        createArtistsDataSet();
+        SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.expFalse();
         qual = qual.orExp(ExpressionFactory.matchExp("artistName", "artist1"));
         query.setQualifier(qual);
-        performQuery();
-
-        // check query results
-        List objects = opObserver.rowsForQuery(query);
+        List objects = context.performQuery(query);
         assertEquals(1, objects.size());
     }
 
@@ -409,7 +404,7 @@ public class SelectQueryTest extends Sel
      * prefetch scenario.
      */
     public void testRouteWithPrefetches() {
-        EntityResolver resolver = getDomain().getEntityResolver();
+        EntityResolver resolver = context.getEntityResolver();
         MockQueryRouter router = new MockQueryRouter();
 
         SelectQuery q = new SelectQuery(Artist.class, ExpressionFactory.matchExp(
@@ -446,7 +441,7 @@ public class SelectQueryTest extends Sel
      */
     public void testRouteQueryWithPrefetchesNoReverse() {
 
-        EntityResolver resolver = getDomain().getEntityResolver();
+        EntityResolver resolver = context.getEntityResolver();
         ObjEntity paintingEntity = resolver.lookupObjEntity(Painting.class);
         ObjEntity galleryEntity = resolver.lookupObjEntity(Gallery.class);
         ObjEntity artistExhibitEntity = resolver.lookupObjEntity(ArtistExhibit.class);
@@ -500,74 +495,27 @@ public class SelectQueryTest extends Sel
 
         // test how prefetches are resolved in this case - this was a stumbling block for
         // a while
-        EntityResolver resolver = getDomain().getEntityResolver();
+        EntityResolver resolver = context.getEntityResolver();
         MockQueryRouter router = new MockQueryRouter();
         q.route(router, resolver, null);
         assertEquals(2, router.getQueryCount());
     }
 
-    @Override
-    protected void populateTables() throws java.lang.Exception {
-        String insertArtist = "INSERT INTO ARTIST (ARTIST_ID, ARTIST_NAME, DATE_OF_BIRTH) VALUES (?,?,?)";
-        Connection conn = getConnection();
-
-        try {
-            conn.setAutoCommit(false);
-
-            PreparedStatement stmt = conn.prepareStatement(insertArtist);
-            long dateBase = System.currentTimeMillis();
-
-            for (int i = 1; i <= _artistCount; i++) {
-                stmt.setInt(1, i);
-                stmt.setString(2, "artist" + i);
-                stmt.setDate(3, new java.sql.Date(dateBase + 1000 * 60 * 60 * 24 * i));
-                stmt.executeUpdate();
-            }
-
-            stmt.close();
-            conn.commit();
-        }
-        finally {
-            conn.close();
-        }
-
-        if (accessStack.getAdapter(getNode()).supportsLobs()) {
-            String insertClob = "INSERT INTO CLOB_TEST (CLOB_TEST_ID, CLOB_COL) VALUES (?,?)";
-            Connection connection = getConnection();
-
-            try {
-                connection.setAutoCommit(false);
-
-                PreparedStatement stmt = connection.prepareStatement(insertClob);
-
-                for (int i = 1; i <= _clobCount; i++) {
-                    stmt.setInt(1, i);
-                    stmt.setString(2, "clob" + i);
-                    stmt.executeUpdate();
-                }
-
-                stmt.close();
-                connection.commit();
-            }
-            finally {
-                connection.close();
-            }
-        }
-    }
-
-    public void testLeftJoinAndPrefetchToMany() {
+    public void testLeftJoinAndPrefetchToMany() throws Exception {
+        createArtistsDataSet();
         SelectQuery query = new SelectQuery(Artist.class, ExpressionFactory.matchExp(
                 "paintingArray+.toGallery",
                 null));
         query.addPrefetch("artistExhibitArray");
-        createDataContext().performQuery(query);
+        context.performQuery(query);
     }
 
-    public void testLeftJoinAndPrefetchToOne() {
+    public void testLeftJoinAndPrefetchToOne() throws Exception {
+        createArtistsDataSet();
         SelectQuery query = new SelectQuery(Painting.class, ExpressionFactory.matchExp(
                 "toArtist+.artistName",
                 null));
         query.addPrefetch("toGallery");
-        createDataContext().performQuery(query);
+        context.performQuery(query);
     }
 }

Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/UnitTestClosure.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/UnitTestClosure.java?rev=954463&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/UnitTestClosure.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/UnitTestClosure.java Mon Jun 14 13:40:50 2010
@@ -0,0 +1,24 @@
+/*****************************************************************
+ *   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.unit.di;
+
+public interface UnitTestClosure {
+
+    void execute();
+}

Copied: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/CayenneResourcesAccessStackAdapterProvider.java (from r954459, cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryBase.java)
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/CayenneResourcesAccessStackAdapterProvider.java?p2=cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/CayenneResourcesAccessStackAdapterProvider.java&p1=cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryBase.java&r1=954459&r2=954463&rev=954463&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryBase.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/CayenneResourcesAccessStackAdapterProvider.java Mon Jun 14 13:40:50 2010
@@ -16,35 +16,24 @@
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
+package org.apache.cayenne.unit.di.server;
 
-package org.apache.cayenne.query;
+import org.apache.cayenne.ConfigurationException;
+import org.apache.cayenne.conn.DataSourceInfo;
+import org.apache.cayenne.di.Provider;
+import org.apache.cayenne.unit.AccessStackAdapter;
+import org.apache.cayenne.unit.CayenneResources;
 
-import java.util.Collections;
+public class CayenneResourcesAccessStackAdapterProvider implements Provider<AccessStackAdapter> {
 
-import org.apache.cayenne.access.MockOperationObserver;
-import org.apache.cayenne.unit.CayenneCase;
+    protected CayenneResources resources;
 
-public abstract class SelectQueryBase extends CayenneCase {
-
-    protected SelectQuery query;
-    protected MockOperationObserver opObserver;
-
-    @Override
-    protected void setUp() throws Exception {
-        deleteTestData();
-        populateTables();
-        query = new SelectQuery();
-        opObserver = new MockOperationObserver();
+    public CayenneResourcesAccessStackAdapterProvider(CayenneResources resources) {
+        this.resources = resources;
     }
 
-    protected void performQuery() throws Exception {
-        // run query
-        getDomain().performQueries(Collections.singletonList(getQuery()), opObserver);
+    public AccessStackAdapter get() throws ConfigurationException {
+        DataSourceInfo connectionInfo = resources.getConnectionInfo();
+        return resources.getAccessStackAdapter(connectionInfo.getAdapterClassName());
     }
-
-    protected Query getQuery() {
-        return query;
-    }
-
-    protected abstract void populateTables() throws java.lang.Exception;
 }

Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/DataChannelQueryBlocker.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/DataChannelQueryBlocker.java?rev=954463&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/DataChannelQueryBlocker.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/DataChannelQueryBlocker.java Mon Jun 14 13:40:50 2010
@@ -0,0 +1,26 @@
+/*****************************************************************
+ *   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.unit.di.server;
+
+import org.apache.cayenne.unit.di.UnitTestClosure;
+
+public interface DataChannelQueryBlocker {
+
+    void runWithQueriesBlocked(UnitTestClosure closure);
+}

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCase.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCase.java?rev=954463&r1=954462&r2=954463&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCase.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCase.java Mon Jun 14 13:40:50 2010
@@ -21,12 +21,14 @@ package org.apache.cayenne.unit.di.serve
 import javax.sql.DataSource;
 
 import org.apache.cayenne.ObjectContext;
+import org.apache.cayenne.access.DataNode;
 import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.di.Binder;
 import org.apache.cayenne.di.DIBootstrap;
 import org.apache.cayenne.di.Injector;
 import org.apache.cayenne.di.Module;
 import org.apache.cayenne.test.jdbc.DBHelper;
+import org.apache.cayenne.unit.AccessStackAdapter;
 import org.apache.cayenne.unit.CayenneResources;
 import org.apache.cayenne.unit.di.DICase;
 import org.apache.cayenne.unit.di.UnitTestLifecycleManager;
@@ -37,9 +39,10 @@ public class ServerCase extends DICase {
     // known runtimes... unit tests may reuse these with @UseServerRuntime annotation or
     // can define their own on the fly (TODO: how would that work with the global schema
     // setup?)
-    public static final String INHERTITANCE_SINGLE_TABLE1_STACK = "cayenne-inheritance-single-table1.xml";
-    public static final String INHERTITANCE_VERTICAL_STACK = "cayenne-inheritance-vertical.xml";
-    public static final String QUOTED_IDENTIFIERS_STACK = "cayenne-quoted-identifiers.xml";
+    public static final String INHERTITANCE_SINGLE_TABLE1_PROJECT = "cayenne-inheritance-single-table1.xml";
+    public static final String INHERTITANCE_VERTICAL_PROJECT = "cayenne-inheritance-vertical.xml";
+    public static final String QUOTED_IDENTIFIERS_PROJECT = "cayenne-quoted-identifiers.xml";
+    public static final String TESTMAP_PROJECT = "cayenne-testmap.xml";
 
     private static final Injector injector;
 
@@ -68,6 +71,11 @@ public class ServerCase extends DICase {
                         new CayenneResourcesDataSourceProvider(resources));
                 binder.bind(DbAdapter.class).toProviderInstance(
                         new CayenneResourcesDbAdapterProvider(resources));
+                binder.bind(AccessStackAdapter.class).toProviderInstance(
+                        new CayenneResourcesAccessStackAdapterProvider(resources));
+                binder.bind(DataNode.class).toProvider(ServerCaseDataNodeProvider.class);
+                binder.bind(DataChannelQueryBlocker.class).to(
+                        ServerCaseDataChannelQueryBlocker.class);
 
                 // test-scoped objects
                 binder

Copied: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataChannelQueryBlocker.java (from r954459, cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryBase.java)
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataChannelQueryBlocker.java?p2=cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataChannelQueryBlocker.java&p1=cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryBase.java&r1=954459&r2=954463&rev=954463&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryBase.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataChannelQueryBlocker.java Mon Jun 14 13:40:50 2010
@@ -16,35 +16,31 @@
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
+package org.apache.cayenne.unit.di.server;
 
-package org.apache.cayenne.query;
+import org.apache.cayenne.access.UnitTestDomain;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.unit.di.UnitTestClosure;
 
-import java.util.Collections;
+public class ServerCaseDataChannelQueryBlocker implements DataChannelQueryBlocker {
 
-import org.apache.cayenne.access.MockOperationObserver;
-import org.apache.cayenne.unit.CayenneCase;
+    @Inject
+    protected ServerRuntimeFactory runtimeFactory;
 
-public abstract class SelectQueryBase extends CayenneCase {
+    @Inject
+    protected ServerCaseProperties properties;
 
-    protected SelectQuery query;
-    protected MockOperationObserver opObserver;
+    public void runWithQueriesBlocked(UnitTestClosure closure) {
 
-    @Override
-    protected void setUp() throws Exception {
-        deleteTestData();
-        populateTables();
-        query = new SelectQuery();
-        opObserver = new MockOperationObserver();
-    }
-
-    protected void performQuery() throws Exception {
-        // run query
-        getDomain().performQueries(Collections.singletonList(getQuery()), opObserver);
-    }
+        UnitTestDomain channel = (UnitTestDomain) runtimeFactory.get(
+                properties.getConfigurationLocation()).getChannel();
 
-    protected Query getQuery() {
-        return query;
+        channel.setBlockingQueries(true);
+        try {
+            closure.execute();
+        }
+        finally {
+            channel.setBlockingQueries(false);
+        }
     }
-
-    protected abstract void populateTables() throws java.lang.Exception;
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataDomainProvider.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataDomainProvider.java?rev=954463&r1=954462&r2=954463&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataDomainProvider.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataDomainProvider.java Mon Jun 14 13:40:50 2010
@@ -22,6 +22,7 @@ import javax.sql.DataSource;
 
 import org.apache.cayenne.access.DataDomain;
 import org.apache.cayenne.access.DataNode;
+import org.apache.cayenne.access.UnitTestDomain;
 import org.apache.cayenne.access.dbsync.SkipSchemaUpdateStrategy;
 import org.apache.cayenne.configuration.server.DataDomainProvider;
 import org.apache.cayenne.dba.DbAdapter;
@@ -37,8 +38,14 @@ class ServerCaseDataDomainProvider exten
     protected DbAdapter adapter;
 
     @Override
-    protected DataDomain createDataDomain() throws Exception {
-        DataDomain domain = super.createDataDomain();
+    protected DataDomain createDataDomain(String name) {
+        return new UnitTestDomain(name);
+    }
+
+    @Override
+    protected DataDomain createAndInitDataDomain() throws Exception {
+
+        DataDomain domain = super.createAndInitDataDomain();
 
         // add nodes dynamically
         // TODO: andrus, 06/14/2010 should probably map them in XML to avoid this mess...

Copied: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNodeProvider.java (from r954459, cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryBase.java)
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNodeProvider.java?p2=cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNodeProvider.java&p1=cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryBase.java&r1=954459&r2=954463&rev=954463&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryBase.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNodeProvider.java Mon Jun 14 13:40:50 2010
@@ -16,35 +16,25 @@
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
+package org.apache.cayenne.unit.di.server;
 
-package org.apache.cayenne.query;
-
-import java.util.Collections;
-
-import org.apache.cayenne.access.MockOperationObserver;
-import org.apache.cayenne.unit.CayenneCase;
-
-public abstract class SelectQueryBase extends CayenneCase {
-
-    protected SelectQuery query;
-    protected MockOperationObserver opObserver;
-
-    @Override
-    protected void setUp() throws Exception {
-        deleteTestData();
-        populateTables();
-        query = new SelectQuery();
-        opObserver = new MockOperationObserver();
+import org.apache.cayenne.ConfigurationException;
+import org.apache.cayenne.access.DataDomain;
+import org.apache.cayenne.access.DataNode;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.di.Provider;
+
+public class ServerCaseDataNodeProvider implements Provider<DataNode> {
+
+    @Inject
+    protected ServerRuntimeFactory runtimeFactory;
+
+    @Inject
+    protected ServerCaseProperties properties;
+
+    public DataNode get() throws ConfigurationException {
+        DataDomain channel = (DataDomain) runtimeFactory.get(
+                properties.getConfigurationLocation()).getChannel();
+        return channel.getDataNodes().iterator().next();
     }
-
-    protected void performQuery() throws Exception {
-        // run query
-        getDomain().performQueries(Collections.singletonList(getQuery()), opObserver);
-    }
-
-    protected Query getQuery() {
-        return query;
-    }
-
-    protected abstract void populateTables() throws java.lang.Exception;
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/cayenne-default.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/cayenne-default.xml?rev=954463&r1=954462&r2=954463&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/cayenne-default.xml (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/cayenne-default.xml Mon Jun 14 13:40:50 2010
@@ -10,5 +10,4 @@
 	<map name="qualified"/>
 	<map name="relationships"/>
 	<map name="sus-map"/>
-	<map name="testmap"/>
 </domain>

Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/cayenne-testmap.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/cayenne-testmap.xml?rev=954463&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/cayenne-testmap.xml (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/cayenne-testmap.xml Mon Jun 14 13:40:50 2010
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<domain project-version="6">
+	<map name="testmap"/>
+</domain>