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 mc...@apache.org on 2006/06/24 07:02:09 UTC

svn commit: r416861 - in /db/jdo/trunk/tck20/src: conf/query.conf java/org/apache/jdo/tck/query/result/ProjectedSCODoesNotTrackChanges.java

Author: mcaisse
Date: Fri Jun 23 22:02:08 2006
New Revision: 416861

URL: http://svn.apache.org/viewvc?rev=416861&view=rev
Log:
JDO-382

Added:
    db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/query/result/ProjectedSCODoesNotTrackChanges.java
Modified:
    db/jdo/trunk/tck20/src/conf/query.conf

Modified: db/jdo/trunk/tck20/src/conf/query.conf
URL: http://svn.apache.org/viewvc/db/jdo/trunk/tck20/src/conf/query.conf?rev=416861&r1=416860&r2=416861&view=diff
==============================================================================
--- db/jdo/trunk/tck20/src/conf/query.conf (original)
+++ db/jdo/trunk/tck20/src/conf/query.conf Fri Jun 23 22:02:08 2006
@@ -60,6 +60,7 @@
 org.apache.jdo.tck.query.result.ImmutableQueryResult \
 org.apache.jdo.tck.query.result.NPEInResultExpr \
 org.apache.jdo.tck.query.result.NullResults \
+org.apache.jdo.tck.query.result.ProjectedSCODoesNotTrackChanges \
 org.apache.jdo.tck.query.result.ResultClassRequirements \
 org.apache.jdo.tck.query.result.ResultExpressions \
 org.apache.jdo.tck.query.result.ShapeOfResult \

Added: db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/query/result/ProjectedSCODoesNotTrackChanges.java
URL: http://svn.apache.org/viewvc/db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/query/result/ProjectedSCODoesNotTrackChanges.java?rev=416861&view=auto
==============================================================================
--- db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/query/result/ProjectedSCODoesNotTrackChanges.java (added)
+++ db/jdo/trunk/tck20/src/java/org/apache/jdo/tck/query/result/ProjectedSCODoesNotTrackChanges.java Fri Jun 23 22:02:08 2006
@@ -0,0 +1,152 @@
+/*
+ * Copyright 2006 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.query.result;
+
+import java.util.Date;
+
+import javax.jdo.JDOHelper;
+import javax.jdo.Query;
+
+import org.apache.jdo.tck.JDO_Test;
+import org.apache.jdo.tck.pc.company.Address;
+import org.apache.jdo.tck.pc.company.Company;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+/**
+ *<B>Title:</B> Projected Second Class Objects Do Not Track Their Changes
+ *<BR>
+ *<B>Keywords:</B> embedded query
+ *<BR>
+ *<B>Assertion ID:</B> [None yet]
+ *<BR>
+ *<B>Assertion Description: </B>
+Section 14.6.9: Projected SCOs are never owned, projected FCOs are always
+managed. Modifying unowned SCOs never has an effect on the database.
+Modifying FCOs no matter how you get them always has an effect if the
+tx commits.
+ */
+
+public class ProjectedSCODoesNotTrackChanges extends JDO_Test {
+
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion A?? (ProjectedSCODoesNotTrackChanges) 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(ProjectedSCODoesNotTrackChanges.class);
+    }
+    
+    /**
+     * @see JDO_Test#localSetUp()
+     */
+    protected void localSetUp() {
+        addTearDownClass(Company.class);
+    }
+
+    private Company getPersistentNewInstance(long companyid) {
+        Company obj = new Company(companyid, "MyCompany", new Date(),
+                new Address(0,"","","","",""));
+        pm.makePersistent(obj); // obj should transition to persistent-new
+        int curr = currentState(obj);
+        if( curr != PERSISTENT_NEW ){
+            fail(ASSERTION_FAILED,
+                "Unable to create persistent-new instance "
+                + "from transient instance via makePersistent(), state is "
+                + states[curr]);
+        }
+        return obj;
+    }
+
+    /** This tests that when an embedded field is selected
+     *  and modified, there is no change in the owned instance. 
+     */
+    public void testEmbeddedField() {
+        String testZip = "94040";
+        pm = getPM();
+        pm.currentTransaction().begin();
+        Company comp = getPersistentNewInstance(0);
+        pm.currentTransaction().commit();
+
+        // Select address, modify, and commit
+        pm.currentTransaction().begin();
+        Query query = pm.newQuery(Company.class,
+                "name.startsWith(\"MyCompany\")");
+        query.setResult("address");
+        query.setUnique(true);
+        Address myCompanyAddress = (Address) query.execute();
+        myCompanyAddress.setZipcode(testZip);
+        if (JDOHelper.isDirty((Object)comp)) {
+            appendMessage("Expected Company instance not to be dirty; "
+                + "actual state is " + getStateOfInstance((Object)comp));
+        }
+        pm.currentTransaction().commit();
+
+        // Check value of address
+        pm.currentTransaction().begin();
+        Address persistedCompanyAddress = (Address) query.execute();
+        String actualZip = persistedCompanyAddress.getZipcode();
+        if (actualZip.equals(testZip)) {
+            appendMessage("Expected projected field value is "
+                + testZip + "; actual value is " + actualZip);
+        }
+        logger.debug("MyCompany's zipcode is '" + actualZip + "'");
+        pm.currentTransaction().commit();
+        failOnError();
+    }
+
+    /** This tests that when a Date field is selected
+     *  and modified, there is no change in the owned instance. 
+     */
+    public void testDateField() {
+        Date testDate = new Date(123789L);
+        pm = getPM();
+        pm.currentTransaction().begin();
+        Company comp = getPersistentNewInstance(0);
+        pm.currentTransaction().commit();
+
+        // Select date, modify, and commit
+        pm.currentTransaction().begin();
+        Query query = pm.newQuery(Company.class,
+                "name.startsWith(\"MyCompany\")");
+        query.setResult("founded");
+        query.setUnique(true);
+        Date expectedDate = (Date) query.execute();
+        comp.setFounded(testDate);
+        if (JDOHelper.isDirty((Object)comp)) {
+            appendMessage("Expected Company instance not to be dirty; "
+                + "actual state is " + getStateOfInstance((Object)comp));
+        }
+        pm.currentTransaction().commit();
+
+        // Check value of date
+        pm.currentTransaction().begin();
+        Date actualDate = (Date) query.execute();
+        if (!actualDate.equals(expectedDate)) {
+            appendMessage("Expected projected field value is "
+                + expectedDate + "; actual value is " + actualDate);
+        }
+        logger.debug("MyCompany's founded date is '" + actualDate + "'");
+        pm.currentTransaction().commit();
+        failOnError();
+    }
+}