You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jdo-commits@db.apache.org by cl...@apache.org on 2006/03/05 23:11:15 UTC

svn commit: r383417 - in /db/jdo/trunk/tck20/src/java/org/apache/jdo/tck: ./ api/persistencemanager/fetchplan/

Author: clr
Date: Sun Mar  5 14:11:11 2006
New Revision: 383417

URL: http://svn.apache.org/viewcvs?rev=383417&view=rev
Log:
JDO-294 Added test for FetchPlan interface

Added:
    db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/
    db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/AbstractFetchPlanTest.java
    db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanInterface.java
    db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanMakeTransient.java
    db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanQuery.java
    db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanRefresh.java
    db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanRetrieve.java
Modified:
    db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/JDO_Test.java

Modified: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/JDO_Test.java
URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/JDO_Test.java?rev=383417&r1=383416&r2=383417&view=diff
==============================================================================
--- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/JDO_Test.java (original)
+++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/JDO_Test.java Sun Mar  5 14:11:11 2006
@@ -904,4 +904,45 @@
         }
         return isTestToBePerformed;
     }
+    
+    /** New line.
+     */
+    public static final String NL = System.getProperty("line.separator");
+    
+    /** A buffer of of error messages.
+     */
+    protected static StringBuffer messages;
+    
+    /** Appends to error messages.
+     */
+    protected static synchronized void appendMessage(String message) {
+        if (messages == null) {
+            messages = new StringBuffer(NL);
+        }
+        messages.append(message);
+        messages.append(NL);
+    }
+    
+    /**
+     * Returns collected error messages, or <code>null</code> if there
+     * are none, and clears the buffer.
+     */
+    protected static synchronized String retrieveMessages() {
+        if (messages == null) {
+            return null;
+        }
+        final String msg = messages.toString();
+        messages = null;
+        return msg;
+    }
+
+    /** 
+     * Fail the test if there are any error messages.
+     */
+    protected void failOnError() {
+        String errors = retrieveMessages();
+        if (errors != null) {
+            fail (errors);
+        }
+    }
 }

Added: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/AbstractFetchPlanTest.java
URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/AbstractFetchPlanTest.java?rev=383417&view=auto
==============================================================================
--- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/AbstractFetchPlanTest.java (added)
+++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/AbstractFetchPlanTest.java Sun Mar  5 14:11:11 2006
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed 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.jdo.tck.api.persistencemanager.fetchplan;
+
+import java.util.Collection;
+import java.util.HashSet;
+
+import javax.jdo.FetchPlan;
+
+import org.apache.jdo.tck.JDO_Test;
+import org.apache.jdo.tck.pc.mylib.PCPoint;
+import org.apache.jdo.tck.pc.mylib.PCRect;
+
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+/**
+ * This class is an abstract superclass for the fetch plan tests.
+ * It contains methods useful for testing the behavior of the
+ * fetch plan.
+ */
+
+public class AbstractFetchPlanTest extends JDO_Test {
+
+    /**
+     * The <code>main</code> method is not defined in this abstract class.
+     */
+
+    /** The persistent instances used in the test.
+     */
+    protected PCPoint upperLeft;
+    protected PCPoint lowerRight;
+    protected PCRect pcrect;
+
+    /** The oids of the persistent instances used in the test.
+     */
+    protected Object upperLeftoid;
+    protected Object lowerRightoid;
+    protected Object pcrectoid;
+
+    /** The String arrays used for setting fetch groups.
+     */
+    protected String[] defaultGroup = new String[]
+        {"default"};
+    protected String[] upperLeftGroup = new String[]
+        {"default", "PCRect.upperLeft"};
+    protected String[] lowerRightGroup = new String[]
+        {"default", "PCRect.lowerRight"};
+    protected String[] bothGroup = new String[]{
+        "default", "PCRect.upperLeft", "PCRect.lowerRight"};
+    /**
+     * @see JDO_Test#localSetUp()
+     */
+    protected void localSetUp() {
+        addTearDownClass(PCRect.class);
+        addTearDownClass(PCPoint.class);
+        upperLeft = new PCPoint(0,10);
+        lowerRight = new PCPoint(10,0);
+        pcrect = new PCRect(upperLeft, lowerRight);
+        getPM().currentTransaction().begin();
+        pm.makePersistent(pcrect); // makes all three persistent
+        upperLeftoid = pm.getObjectId(upperLeft);
+        lowerRightoid = pm.getObjectId(lowerRight);
+        pcrectoid = pm.getObjectId(pcrect);
+        pm.currentTransaction().commit();
+    }
+
+    /** Set the default plus upper left field as the fetch group.
+     */
+    protected void setDefaultGroup() {
+        FetchPlan fp = getPM().getFetchPlan();
+        fp.setGroups(defaultGroup);
+    }
+
+    /** Set the default plus upper left field as the fetch group.
+     */
+    protected void setUpperLeftGroup() {
+        FetchPlan fp = getPM().getFetchPlan();
+        fp.setGroups(upperLeftGroup);
+    }
+
+    /** Set the default plus lower right field as the fetch group.
+     */
+    protected void setLowerRightGroup() {
+        FetchPlan fp = getPM().getFetchPlan();
+        fp.setGroups(upperLeftGroup);
+    }
+
+    /** Set the default plus both fields as the fetch group.
+     */
+    protected void setBothGroup() {
+        FetchPlan fp = getPM().getFetchPlan();
+        fp.setGroups(bothGroup);
+    }
+
+    /** */
+    protected void checkBothLoaded(String location, PCRect pcrect) {
+        checkUpperLeftLoaded(location, pcrect);
+        checkLowerRightLoaded(location, pcrect);
+    }
+
+    /** */
+    protected void checkUpperLeftLoaded(String location, PCRect pcrect) {
+        if (pcrect.upperLeft == null) {
+            appendMessage(location + NL + "Upper Left was null." + NL +
+                "The fetch plan includes PCRect.upperLeft and this field" +
+                " should have been loaded.");
+        }
+    }
+
+    /** */
+    protected void checkLowerRightLoaded(String location, PCRect pcrect) {
+        if (pcrect.lowerRight == null) {
+            appendMessage(location + NL + "Lower Right was null." + NL +
+                "The fetch plan includes PCRect.lowerRight and this field" +
+                " should have been loaded.");
+        }
+    }
+    protected void checkGroups(String location, 
+            FetchPlan fetchPlan, String[] groups) {
+        Collection expected = new HashSet();
+        Collection actual = fetchPlan.getGroups();
+        for (int i = 0; i < groups.length; ++i) {
+            expected.add(groups[i]);
+        }
+        if (!expected.equals(actual)) {
+            appendMessage(location + NL + "Fetch groups differ." + NL +
+                "expected: " + expected + NL +
+                "actual: " + actual + NL);
+        }
+    }
+}
\ No newline at end of file

Added: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanInterface.java
URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanInterface.java?rev=383417&view=auto
==============================================================================
--- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanInterface.java (added)
+++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanInterface.java Sun Mar  5 14:11:11 2006
@@ -0,0 +1,376 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed 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.jdo.tck.api.persistencemanager.fetchplan;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.jdo.FetchPlan;
+
+import org.apache.jdo.tck.JDO_Test;
+
+import org.apache.jdo.tck.pc.mylib.PCPoint;
+import org.apache.jdo.tck.pc.mylib.PCRect;
+
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+/**
+ *<B>Title:</B> Test TITLE
+ *<BR>
+ *<B>Keywords:</B> fetch plan
+ *<BR>
+ *<B>Assertion IDs:</B> 12.7.5-1
+ *<BR>
+ *<B>Assertion Description: </B>
+public interface FetchPlan {
+String DEFAULT = "default";
+String ALL = "all";
+int FETCH_SIZE_GREEDY = -1;
+int FETCH_SIZE_OPTIMAL = 0;
+int DETACH_LOAD_FIELDS = 1;
+int DETACH_UNLOAD_FIELDS = 2;
+A12.7.1-1 [/** Add the fetchgroup to the set of active fetch groups. Duplicate names will be removed.
+FetchPlan addGroup(String fetchGroupName);
+/** Remove the fetch group from the set active fetch groups. 
+FetchPlan removeGroup(String fetchGroupName);
+/** Remove all active groups, including the default fetch group. 
+FetchPlan clearGroups();
+/** Return an immutable Set of the names of all active fetch groups. 
+Set getGroups();
+/** Set a Collection of group names to replace the current groups. Duplicate names will be removed.
+FetchPlan setGroups(Collection fetchGroupNames);
+/** Set an array of group names to replace the current groups. Duplicate names will be removed.
+FetchPlan setGroups(String[] fetchGroupNames);
+/** Set a single group to replace the current groups. 
+FetchPlan setGroup(String fetchGroupName);] 
+/** Set the roots for DetachAllOnCommit 
+FetchPlan setDetachmentRoots(Collection roots);
+/** Get the roots for DetachAllOnCommit 
+Collection getDetachmentRoots();
+/** Set the roots for DetachAllOnCommit 
+FetchPlan setDetachmentRootClasses(Class[] rootClasses);
+/** Get the roots for DetachAllOnCommit 
+Class[] getDetachmentRootClasses();
+/** Set the maximum fetch depth. 
+FetchPlan setMaxFetchDepth(int fetchDepth);
+/** Get the maximum fetch depth. 
+int getMaxFetchDepth();
+A12.7.1-2 [/** Set the fetch size for large result set support. 
+FetchPlan setFetchSize(int fetchSize);
+/** Return the fetch size; 0 if not set; -1 for greedy fetching. 
+int getFetchSize();]
+A12.7.1-3 [/** Set detachment options 
+FetchPlan setDetachmentOptions(int options);
+/** Return the detachment options 
+int getDetachmentOptions();]
+ */
+
+public class FetchPlanInterface extends JDO_Test {
+
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion 12.7.5-1 (FetchPlanTest) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(FetchPlanInterface.class);
+    }
+
+    /**
+     * @see JDO_Test#localSetUp()
+     */
+    protected void localSetUp() {
+        addTearDownClass(PCRect.class);
+        addTearDownClass(PCPoint.class);
+    }
+
+    /** */
+    protected boolean setEquals
+            (Collection expected, Collection actual) {
+        if (expected == actual) 
+            return true;
+        if (expected == null || actual == null) 
+            return false;
+        Set expectedSet = new HashSet(expected);
+        Set actualSet = new HashSet(actual);
+        return expectedSet.equals(actualSet);
+    }
+
+    /** */
+    protected void failCompare(String message, 
+            Object expected, Object actual) {
+        appendMessage(ASSERTION_FAILED + message);
+        appendMessage("expected: " + expected);
+        appendMessage("actual: " + actual);
+    }
+
+    /** */
+    protected void failCompare(String message, 
+            int expected, int actual) {
+        appendMessage(ASSERTION_FAILED + message);
+        appendMessage("expected: " + expected);
+        appendMessage("actual: " + actual);
+    }
+
+    /** */
+    public void testGroups() {
+        checkDefaultGroups();
+        checkClearGroups();
+        checkSetGroup();
+        checkAddGroup();
+        checkRemoveGroup();
+        checkClearGroups();
+        checkSetGroupsCollection();
+        checkSetGroupsArray();
+        failOnError();
+    }
+
+    /** */
+    public void testDetachmentRoots() {
+        checkGetDetachmentRoots();
+        checkSetDetachmentRoots();
+        checkSetDetachmentRootClasses();
+        failOnError();
+    }
+
+    /** */
+    public void testDetachmentOptions() {
+        int expectedOptions = 
+                FetchPlan.DETACH_LOAD_FIELDS + 
+                FetchPlan.DETACH_UNLOAD_FIELDS;
+        FetchPlan fp = getPM().getFetchPlan();
+        int initialOptions = fp.getDetachmentOptions();
+        if (FetchPlan.DETACH_LOAD_FIELDS != initialOptions) {
+            failCompare(
+                "testDetachmentOptions(): wrong getDetachmentOptions() " + 
+                    "after getPersistenceManager().",
+                    FetchPlan.DETACH_LOAD_FIELDS, initialOptions);
+        }
+        fp.setDetachmentOptions(expectedOptions);
+        int actualOptions = fp.getDetachmentOptions();
+        if (expectedOptions != actualOptions) {
+            failCompare(
+                "testDetachmentOptions(): wrong getDetachmentOptions() " + 
+                    "after setDetachmentOptions().",
+                    expectedOptions, actualOptions);
+        }
+        cleanupPM();
+        failOnError();
+    }
+
+    /** */
+    public void testMaxFetchDepth() {
+        int expectedMaxFetchDepth = 12;
+        FetchPlan fp = getPM().getFetchPlan();
+        fp.setMaxFetchDepth(expectedMaxFetchDepth);
+        int actualMaxFetchDepth = fp.getMaxFetchDepth();
+        if (expectedMaxFetchDepth != actualMaxFetchDepth) {
+            failCompare(
+                "testMaxFetchDepth(): wrong getMaxFetchDepth() " + 
+                    "after setMaxFetchDepth().",
+                    expectedMaxFetchDepth, actualMaxFetchDepth);
+        }
+        cleanupPM();
+        failOnError();
+    }
+
+    /** */
+    public void testFetchSize() {
+        int expectedFetchSize = 12;
+        FetchPlan fp = getPM().getFetchPlan();
+        fp.setFetchSize(expectedFetchSize);
+        int actualFetchSize = fp.getFetchSize();
+        if (expectedFetchSize != actualFetchSize) {
+            failCompare(
+                "testFetchSize(): wrong getFetchSize() " + 
+                    "after setFetchSize().",
+                    expectedFetchSize, actualFetchSize);
+        }
+        cleanupPM();
+        failOnError();
+    }
+
+    /** */
+    public void checkDefaultGroups() {
+        Set expectedGroups = new HashSet();
+        expectedGroups.add("default");
+        FetchPlan fp = getPM().getFetchPlan();
+        Collection groups = fp.getGroups();
+        if (!setEquals(expectedGroups, groups)) {
+            failCompare(
+                "checkDefaultGroups(): wrong getGroups() " + 
+                    "after getPersistenceManager().",
+                    expectedGroups, groups);
+        }
+        cleanupPM();
+    }
+
+    /** */
+    public void checkClearGroups() {
+        Set expectedGroups = new HashSet();
+        FetchPlan fp = getPM().getFetchPlan();
+        fp.clearGroups();
+        Collection groups = fp.getGroups();
+        if (!setEquals(expectedGroups, groups)) {
+            failCompare(
+                "checkClearGroups(): wrong getGroups() " + 
+                    "after clearGroups.",
+                    expectedGroups, groups);
+        }
+        cleanupPM();
+    }
+
+    /** */
+    public void checkSetGroup() {
+        Set expectedGroups = new HashSet();
+        expectedGroups.add("group1");
+        FetchPlan fp = getPM().getFetchPlan();
+        fp.setGroup("group1");
+        Collection groups = fp.getGroups();
+        if (!setEquals(expectedGroups, groups)) {
+            failCompare(
+                "checkSetGroup(): wrong getGroups() " + 
+                    "after setGroup.",
+                    expectedGroups, groups);
+        }
+        cleanupPM();
+    }
+
+    /** */
+    public void checkAddGroup() {
+        Set expectedGroups = new HashSet();
+        expectedGroups.add("default");
+        expectedGroups.add("group1");
+        FetchPlan fp = getPM().getFetchPlan();
+        fp.addGroup("group1");
+        Collection groups = fp.getGroups();
+        if (!setEquals(expectedGroups, groups)) {
+            failCompare(
+                "checkAddGroup(): wrong getGroups() " + 
+                    "after addGroup.",
+                    expectedGroups, groups);
+        }
+        cleanupPM();
+    }
+
+    /** */
+    public void checkRemoveGroup() {
+        Set expectedGroups = new HashSet();
+        FetchPlan fp = getPM().getFetchPlan();
+        Collection groups = fp.getGroups();
+        fp.removeGroup("default");
+        if (!setEquals(expectedGroups, groups)) {
+            failCompare(
+                "checkRemoveGroup(): wrong getGroups() " + 
+                    "after removeGroup.",
+                    expectedGroups, groups);
+        }
+        cleanupPM();
+    }
+
+    /** */
+    public void checkSetGroupsCollection() {
+        Set expectedGroups = new HashSet();
+        expectedGroups.add("default");
+        expectedGroups.add("group1");
+        expectedGroups.add("group2");
+        FetchPlan fp = getPM().getFetchPlan();
+        fp.setGroups(expectedGroups);
+        Collection groups = fp.getGroups();
+        if (!setEquals(expectedGroups, groups)) {
+            failCompare(
+                "checkSetGroupsCollection(): wrong getGroups() " + 
+                    "after SetGroups(Collection).",
+                    expectedGroups, groups);
+        }
+        cleanupPM();
+    }
+
+    /** */
+    public void checkSetGroupsArray() {
+        Set expectedGroups = new HashSet();
+        expectedGroups.add("default");
+        expectedGroups.add("group1");
+        expectedGroups.add("group2");
+        FetchPlan fp = getPM().getFetchPlan();
+        fp.setGroups(new String[] {"default", "group1", "group2"});
+        Collection groups = fp.getGroups();
+        if (!setEquals(expectedGroups, groups)) {
+            failCompare(
+                "checkSetGroupsArray(): wrong getGroups() " + 
+                    "after setGroups(String[]).",
+                    expectedGroups, groups);
+        }
+         cleanupPM();
+    }
+
+    /** */
+    protected void checkGetDetachmentRoots() {
+        Set expectedRoots = new HashSet();
+        FetchPlan fp = getPM().getFetchPlan();
+        Collection roots = fp.getDetachmentRoots();
+        if (!setEquals(expectedRoots, roots)) {
+            failCompare(
+                "checkGetDetachmentRoots(): wrong getDetachmentRoots() " + 
+                    "after getPersistenceManager().",
+                    expectedRoots, roots);
+        }
+         cleanupPM();
+    }
+
+    /** */
+    protected void checkSetDetachmentRoots() {
+        PCPoint p = new PCPoint(10, 20);
+        Set expectedRoots = new HashSet();
+        expectedRoots.add(p);
+        FetchPlan fp = getPM().getFetchPlan();
+        fp.setDetachmentRoots(expectedRoots);
+        Collection roots = fp.getDetachmentRoots();
+        if (!setEquals(expectedRoots, roots)) {
+            failCompare(
+                "checkGetDetachmentRoots(): wrong getDetachmentRoots() " + 
+                    "after setDetachmentRoots().",
+                    expectedRoots, roots);
+        }
+         cleanupPM();
+    }
+
+    /** */
+    private void checkSetDetachmentRootClasses() {
+        Class[] expectedRootClasses = new Class[] {PCPoint.class};
+        FetchPlan fp = getPM().getFetchPlan();
+        fp.setDetachmentRootClasses(
+                expectedRootClasses);
+        Class[] rootClasses = fp.getDetachmentRootClasses();
+        if (!Arrays.equals(expectedRootClasses, rootClasses)) {
+            failCompare(
+                "checkGetDetachmentRootClasses(): " + 
+                    "wrong getDetachmentRootClasses() " + 
+                    "after setDetachmentRootClasses().",
+                    expectedRootClasses, rootClasses);
+        }
+         cleanupPM();
+    }
+
+}
\ No newline at end of file

Added: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanMakeTransient.java
URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanMakeTransient.java?rev=383417&view=auto
==============================================================================
--- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanMakeTransient.java (added)
+++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanMakeTransient.java Sun Mar  5 14:11:11 2006
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed 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.jdo.tck.api.persistencemanager.fetchplan;
+
+import java.util.Collection;
+import java.util.HashSet;
+
+import org.apache.jdo.tck.api.persistencemanager.fetchplan.AbstractFetchPlanTest;
+
+import org.apache.jdo.tck.pc.mylib.PCRect;
+
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+/**
+ *<B>Title:</B> Test FetchPlanMakeTransient
+ *<BR>
+ *<B>Keywords:</B> FetchPlan makeTransient
+ *<BR>
+ *<B>Assertion IDs:</B> Assertion 12.7.1
+ *<BR>
+ *<B>Assertion Description: </B>
+If the useFetchPlan parameter is true, the current FetchPlan, 
+including MaxFetchDepth, DETACH_LOAD_FIELDS, and DETACH_UNLOAD_FIELDS, 
+is applied to the pc or pcs parameter instance(s) to load fields 
+and instances from the datastore. The DetachmentRoots is not affected. 
+After the fetch plan is used to load instances, the entire graph 
+of instances reachable via loaded fields of the parameter instances 
+is made transient. Transient fields are not modified by the method. 
+ */
+
+public class FetchPlanMakeTransient extends AbstractFetchPlanTest {
+
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion 12.7.1 (FetchPlanMakeTransient) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(FetchPlanMakeTransient.class);
+    }
+    
+    /** */
+    public void testMakeTransientAllCollection() {
+        setBothGroup();
+        pm.currentTransaction().begin();
+        PCRect instance = (PCRect)pm.getObjectById(pcrectoid, false);
+        Collection instances = new HashSet();
+        instances.add(instance);
+        pm.makeTransientAll(instances, true);
+        checkBothLoaded(ASSERTION_FAILED, instance);
+        pm.currentTransaction().commit();
+        failOnError();
+    }
+
+    /** */
+    public void testMakeTransientAllArray() {
+        setBothGroup();
+        pm.currentTransaction().begin();
+        PCRect instance = (PCRect)pm.getObjectById(pcrectoid, false);
+        pm.makeTransientAll(new Object[]{instance}, true);
+        checkBothLoaded(ASSERTION_FAILED, instance);
+        pm.currentTransaction().commit();
+        failOnError();
+    }
+
+    /** */
+    public void testMakeTransient() {
+        setBothGroup();
+        pm.currentTransaction().begin();
+        PCRect instance = (PCRect)pm.getObjectById(pcrectoid, false);
+        pm.makeTransient(instance, true);
+        checkBothLoaded(ASSERTION_FAILED, instance);
+        pm.currentTransaction().commit();
+        failOnError();
+    }
+}
\ No newline at end of file

Added: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanQuery.java
URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanQuery.java?rev=383417&view=auto
==============================================================================
--- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanQuery.java (added)
+++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanQuery.java Sun Mar  5 14:11:11 2006
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed 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.jdo.tck.api.persistencemanager.fetchplan;
+
+import javax.jdo.FetchPlan;
+import javax.jdo.Query;
+
+import org.apache.jdo.tck.api.persistencemanager.fetchplan.AbstractFetchPlanTest;
+
+import org.apache.jdo.tck.pc.mylib.PCRect;
+
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+/**
+ *<B>Title:</B> Test FetchPlanQuery
+ *<BR>
+ *<B>Keywords:</B> FetchPlan Query
+ *<BR>
+ *<B>Assertion IDs:</B> Assertion 12.7.1
+ *<BR>
+ *<B>Assertion Description: </B>
+12.7.1 When executing a query the JDO implementation loads the fields 
+as specified in the fetch plan associated with the Query instance. 
+ */
+
+public class FetchPlanQuery extends AbstractFetchPlanTest {
+
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion 12.7.1 (FetchPlanQuery) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(FetchPlanQuery.class);
+    }
+    
+    /** */
+    public void testQuery() {
+        setBothGroup();
+        pm.currentTransaction().begin();
+        Query query = pm.newQuery(PCRect.class);
+        checkGroups(ASSERTION_FAILED + "after newQuery().getFetchPlan() ", 
+                query.getFetchPlan(), bothGroup);
+        query.setUnique(true);
+        PCRect instance = (PCRect)query.execute();
+        checkBothLoaded(ASSERTION_FAILED, instance);
+        pm.currentTransaction().commit();
+        failOnError();
+    }
+
+}
\ No newline at end of file

Added: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanRefresh.java
URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanRefresh.java?rev=383417&view=auto
==============================================================================
--- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanRefresh.java (added)
+++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanRefresh.java Sun Mar  5 14:11:11 2006
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed 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.jdo.tck.api.persistencemanager.fetchplan;
+
+import org.apache.jdo.tck.api.persistencemanager.fetchplan.AbstractFetchPlanTest;
+
+import org.apache.jdo.tck.pc.mylib.PCRect;
+
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+/**
+ *<B>Title:</B> Test FetchPlanRefresh
+ *<BR>
+ *<B>Keywords:</B> FetchPlan getObjectById
+ *<BR>
+ *<B>Assertion IDs:</B> Assertion 12.7.1
+ *<BR>
+ *<B>Assertion Description: </B>
+12.7.1 For refresh, after clearing fields in the instances, 
+the JDO implementation uses the fetch plan to determine 
+which fields to load from the datastore. 
+ */
+
+public class FetchPlanRefresh extends AbstractFetchPlanTest {
+
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion 12.7.1 (FetchPlanRefresh) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(FetchPlanRefresh.class);
+    }
+    
+    /** */
+    public void testRefresh() {
+        setBothGroup();
+        pm.currentTransaction().begin();
+        PCRect instance = (PCRect)pm.getObjectById(pcrectoid, false);
+        pm.refresh(instance);
+        checkBothLoaded(ASSERTION_FAILED, instance);
+        pm.currentTransaction().commit();
+        failOnError();
+    }
+}
\ No newline at end of file

Added: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanRetrieve.java
URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanRetrieve.java?rev=383417&view=auto
==============================================================================
--- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanRetrieve.java (added)
+++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/api/persistencemanager/fetchplan/FetchPlanRetrieve.java Sun Mar  5 14:11:11 2006
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed 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.jdo.tck.api.persistencemanager.fetchplan;
+
+import org.apache.jdo.tck.api.persistencemanager.fetchplan.AbstractFetchPlanTest;
+
+import org.apache.jdo.tck.pc.mylib.PCRect;
+
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+/**
+ *<B>Title:</B> Test FetchPlanRetrieve
+ *<BR>
+ *<B>Keywords:</B> FetchPlan getObjectById
+ *<BR>
+ *<B>Assertion IDs:</B> Assertion 12.7.1
+ *<BR>
+ *<B>Assertion Description: </B>
+12.7.1 For retrieve with FGonly true, the implementation uses the fetch plan to 
+determine which fields are loaded from the datastore. With FGonly false, the 
+implementation reverts to JDO 1 behavior, which loads all fields from the 
+datastore; in this case, no related instances are loaded. 
+ */
+
+public class FetchPlanRetrieve extends AbstractFetchPlanTest {
+
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion 12.7.1 (FetchPlanRetrieve) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(FetchPlanRetrieve.class);
+    }
+    
+    /** */
+    public void testRetrieve() {
+        setBothGroup();
+        pm.currentTransaction().begin();
+        PCRect instance = (PCRect)pm.getObjectById(pcrectoid, false);
+        pm.retrieve(instance, true);
+        checkBothLoaded(ASSERTION_FAILED, instance);
+        pm.currentTransaction().commit();
+        failOnError();
+    }
+}
\ No newline at end of file