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/01/06 06:56:49 UTC
svn commit: r366436 -
/db/jdo/trunk/tck20/test/java/org/apache/jdo/tck/models/fieldtypes/TestArrayCollections.java
Author: mcaisse
Date: Thu Jan 5 21:56:45 2006
New Revision: 366436
URL: http://svn.apache.org/viewcvs?rev=366436&view=rev
Log:
JDO-263
Modified:
db/jdo/trunk/tck20/test/java/org/apache/jdo/tck/models/fieldtypes/TestArrayCollections.java
Modified: db/jdo/trunk/tck20/test/java/org/apache/jdo/tck/models/fieldtypes/TestArrayCollections.java
URL: http://svn.apache.org/viewcvs/db/jdo/trunk/tck20/test/java/org/apache/jdo/tck/models/fieldtypes/TestArrayCollections.java?rev=366436&r1=366435&r2=366436&view=diff
==============================================================================
--- db/jdo/trunk/tck20/test/java/org/apache/jdo/tck/models/fieldtypes/TestArrayCollections.java (original)
+++ db/jdo/trunk/tck20/test/java/org/apache/jdo/tck/models/fieldtypes/TestArrayCollections.java Thu Jan 5 21:56:45 2006
@@ -1,167 +1,198 @@
-/*
- * 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.models.fieldtypes;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Vector;
-
-import javax.jdo.PersistenceManager;
-import javax.jdo.Transaction;
-
-import org.apache.jdo.tck.JDO_Test;
-import org.apache.jdo.tck.pc.fieldtypes.ArrayCollections;
-import org.apache.jdo.tck.pc.fieldtypes.SimpleClass;
-import org.apache.jdo.tck.util.BatchTestRunner;
-
-/**
- *<B>Title:</B> Support of field type array.
- *<BR>
- *<B>Keywords:</B> model
- *<BR>
- *<B>Assertion ID:</B> A6.4.3-39.
- *<BR>
- *<B>Assertion Description: </B>
-JDO implementations may optionally support fields of array types.
- */
-
-public class TestArrayCollections extends JDO_Test {
-
- /** */
- private static final String ASSERTION_FAILED =
- "Assertion (TestArrayCollections) 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(TestArrayCollections.class);
- }
-
- /**
- * @see JDO_Test#localSetUp()
- */
- protected void localSetUp() {
- addTearDownClass(ArrayCollections.class);
- addTearDownClass(SimpleClass.class);
- }
-
- /** */
- public void test() {
- pm = getPM();
-
- runTest(pm);
-
- pm.close();
- pm = null;
- }
-
- /** */
- void runTest(PersistenceManager pm)
- {
- if (!isArraySupported()) {
- if (debug)
- logger.debug("JDO Implementation does not support" +
- "optional feature Array");
- return;
- }
-
- Transaction tx = pm.currentTransaction();
- ArrayCollections expectedValue = new ArrayCollections();
-
- // turn on datastore transactions
- tx.setOptimistic(false);
- tx.begin();
- ArrayCollections pi = new ArrayCollections();
- pi.identifier = 1;
- pm.makePersistent(pi);
- Object oid = pm.getObjectId(pi);
- // Provide initial set of values
- setValues(pi, 1);
-
- tx.commit();
- // cache will be flushed
- pi = null;
- System.gc();
-
- tx.begin();
- setValues(expectedValue, 1);
-
- // check if persistent fields have values set
- checkValues(oid, expectedValue);
- pi = (ArrayCollections) pm.getObjectById(oid, true);
-
- // Provide new set of values
- setValues(pi, 2);
- tx.commit();
- // cache will be flushed
- pi = null;
- System.gc();
-
- tx.begin();
- // check new values
- setValues(expectedValue, 2);
- checkValues(oid, expectedValue);
- tx.commit();
- }
-
- /** */
- private void setValues(ArrayCollections collect, int order)
- {
- Vector value;
- int n = collect.getLength();
- for (int i = 0; i < n; ++i) {
- String valueType = TestUtil.getFieldSpecs(
- ArrayCollections.fieldSpecs[i]);
- Object[] valueArray = null;
- value = TestUtil.makeNewVectorInstance(valueType, order);
- value.copyInto(valueArray);
- collect.set(i, valueArray);
- if (debug)
- logger.debug("Set " + i + "th value to: "
- + valueArray.toString());
- }
- }
-
- /** */
- private void checkValues(Object oid, ArrayCollections expectedValue)
- {
- StringBuffer sbuf = new StringBuffer();
- ArrayCollections pi = (ArrayCollections) pm.getObjectById(oid, true);
- int n = pi.getLength();
- for (int i = 0; i < n; ++i) {
- Object [] expected = expectedValue.get(i);
- Object [] actual = pi.get(i);
- if (actual.length != expected.length) {
- sbuf.append("\nFor element " + i + ", expected size = " +
- expected.length + ", actual size = " + actual.length
- + " . ");
- continue;
- }
- if (! Arrays.equals(actual, expected)) {
- sbuf.append("\nFor element " + i + ", expected = " +
- expected + ", actual = " + actual + " . ");
- }
- }
- if (sbuf.length() > 0) {
- fail(ASSERTION_FAILED,
- "Expected and observed do not match!!" + sbuf.toString());
- }
- }
-}
+/*
+ * 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.models.fieldtypes;
+
+import java.lang.reflect.Array;
+
+import java.math.BigDecimal;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Vector;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import org.apache.jdo.tck.JDO_Test;
+import org.apache.jdo.tck.pc.fieldtypes.ArrayCollections;
+import org.apache.jdo.tck.pc.fieldtypes.SimpleClass;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+/**
+ *<B>Title:</B> Support of field type array.
+ *<BR>
+ *<B>Keywords:</B> model
+ *<BR>
+ *<B>Assertion ID:</B> A6.4.3-39.
+ *<BR>
+ *<B>Assertion Description: </B>
+JDO implementations may optionally support fields of array types.
+ */
+
+public class TestArrayCollections extends JDO_Test {
+
+ /** */
+ private static final String ASSERTION_FAILED =
+ "Assertion (TestArrayCollections) 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(TestArrayCollections.class);
+ }
+
+ /**
+ * @see JDO_Test#localSetUp()
+ */
+ protected void localSetUp() {
+ addTearDownClass(ArrayCollections.class);
+ addTearDownClass(SimpleClass.class);
+ }
+
+ /** */
+ public void test() {
+ pm = getPM();
+
+ runTest(pm);
+
+ pm.close();
+ pm = null;
+ }
+
+ /** */
+ void runTest(PersistenceManager pm)
+ {
+ if (!isArraySupported()) {
+ if (debug)
+ logger.debug("JDO Implementation does not support" +
+ "optional feature Array");
+ return;
+ }
+
+ Transaction tx = pm.currentTransaction();
+ ArrayCollections expectedValue = new ArrayCollections();
+
+ // turn on datastore transactions
+ tx.setOptimistic(false);
+ tx.begin();
+ ArrayCollections pi = new ArrayCollections();
+ pi.identifier = 1;
+ pm.makePersistent(pi);
+ Object oid = pm.getObjectId(pi);
+ // Provide initial set of values
+ setValues(pi, 1);
+
+ tx.commit();
+ // cache will be flushed
+ pi = null;
+ System.gc();
+
+ tx.begin();
+ setValues(expectedValue, 1);
+
+ // check if persistent fields have values set
+ checkValues(oid, expectedValue);
+ pi = (ArrayCollections) pm.getObjectById(oid, true);
+
+ // Provide new set of values
+ setValues(pi, 2);
+ tx.commit();
+ // cache will be flushed
+ pi = null;
+ System.gc();
+
+ tx.begin();
+ // check new values
+ setValues(expectedValue, 2);
+ checkValues(oid, expectedValue);
+ tx.commit();
+ }
+
+ /** */
+ private void setValues(ArrayCollections collect, int order)
+ {
+ Vector value;
+ Class vectorClass = null;
+ int n = collect.getLength();
+ for (int i = 0; i < n; ++i) {
+ String valueType = TestUtil.getFieldSpecs(
+ ArrayCollections.fieldSpecs[i]);
+ value = TestUtil.makeNewVectorInstance(valueType, order);
+ try {
+ // get the right class to instantiate
+ vectorClass = value.get(0).getClass();
+ } catch (Exception e) {
+ }
+
+ Object[] valueArray = (Object[])Array.newInstance(vectorClass,
+ value.size());
+ value.toArray(valueArray);
+
+ collect.set(i, valueArray);
+ if (debug)
+ logger.debug("Set " + i + "th value to: "
+ + valueArray.toString());
+ }
+ }
+
+ /** */
+ private void checkValues(Object oid, ArrayCollections expectedValue)
+ {
+ StringBuffer sbuf = new StringBuffer();
+ ArrayCollections pi = (ArrayCollections) pm.getObjectById(oid, true);
+ int n = pi.getLength();
+ for (int i = 0; i < n; ++i) {
+ Object obj = new Object();
+ Class objClass = obj.getClass();
+ Object[] expected = (Object[])Array.newInstance(objClass, 5);
+ Object[] actual = (Object[])Array.newInstance(objClass, 5);
+ expected = expectedValue.get(i);
+ actual = pi.get(i);
+ if (expected.length != actual.length) {
+ sbuf.append("\nFor element " + i + ", expected size = " +
+ expected.length + ", actual size = " + actual.length
+ + " . ");
+ continue;
+ }
+ else if (!Arrays.equals(expected, actual)) {
+ if (TestUtil.getFieldSpecs(ArrayCollections.fieldSpecs[i]
+ ).equals("BigDecimal")) {
+ for (int j = 0; j < actual.length; ++j) {
+ BigDecimal expectedBD = (BigDecimal)expected[j];
+ Object actualBD = (BigDecimal)actual[j];
+ if ((expectedBD.compareTo(actualBD) != 0)) {
+ sbuf.append("\nFor element " + i + "[" + j +
+ "], expected = " + expectedBD +
+ ", actual = " + actualBD + " . ");
+ }
+ }
+ }
+ else {
+ sbuf.append("\nFor element " + i + ", expected = " +
+ expected + ", actual = " + actual + " . ");
+ }
+ }
+ }
+ if (sbuf.length() > 0) {
+ fail(ASSERTION_FAILED,
+ "Expected and observed do not match!!" + sbuf.toString());
+ }
+ }
+}