svn commit: r981625 - in /ofbiz/trunk/framework/sql: ./ src/org/ofbiz/sql/ src/org/ofbiz/sql/test/

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r981625 - in /ofbiz/trunk/framework/sql: ./ src/org/ofbiz/sql/ src/org/ofbiz/sql/test/

doogie-3
Author: doogie
Date: Mon Aug  2 17:42:49 2010
New Revision: 981625

URL: http://svn.apache.org/viewvc?rev=981625&view=rev
Log:
TESTS: Start adding low-level object unit tests.

Added:
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/test/ConditionsTest.java
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/test/Recorder.java
      - copied, changed from r981624, ofbiz/trunk/framework/sql/src/org/ofbiz/sql/CountAllFunction.java
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/test/SelectTest.java
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/test/ValuesTest.java
Modified:
    ofbiz/trunk/framework/sql/build.xml
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/BetweenCondition.java
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/BooleanCondition.java
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/ConditionList.java
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/CountAllFunction.java
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/CountFunction.java
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/FieldAll.java
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/FieldDef.java
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/FieldValue.java
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/FunctionCall.java
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/ListCondition.java
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/MathValue.java
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/NumberValue.java
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/OrderByItem.java
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/ParameterValue.java
    ofbiz/trunk/framework/sql/src/org/ofbiz/sql/StringValue.java

Modified: ofbiz/trunk/framework/sql/build.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/build.xml?rev=981625&r1=981624&r2=981625&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/build.xml (original)
+++ ofbiz/trunk/framework/sql/build.xml Mon Aug  2 17:42:49 2010
@@ -46,6 +46,9 @@ under the License.
        <pathelement location="src"/>
     </path>
     <filelist id="test.classes" dir="${src.dir}">
+        <file name="org/ofbiz/sql/test/ValuesTest.java"/>
+        <file name="org/ofbiz/sql/test/ConditionsTest.java"/>
+        <file name="org/ofbiz/sql/test/SelectTest.java"/>
         <file name="org/ofbiz/sql/test/SQLTest.java"/>
     </filelist>
 

Modified: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/BetweenCondition.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/BetweenCondition.java?rev=981625&r1=981624&r2=981625&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/BetweenCondition.java (original)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/BetweenCondition.java Mon Aug  2 17:42:49 2010
@@ -18,6 +18,9 @@
  */
 package org.ofbiz.sql;
 
+import org.ofbiz.base.lang.SourceMonitored;
+
+@SourceMonitored
 public final class BetweenCondition extends Condition {
     private final Value left;
     private final Value r1;

Modified: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/BooleanCondition.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/BooleanCondition.java?rev=981625&r1=981624&r2=981625&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/BooleanCondition.java (original)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/BooleanCondition.java Mon Aug  2 17:42:49 2010
@@ -18,6 +18,9 @@
  */
 package org.ofbiz.sql;
 
+import org.ofbiz.base.lang.SourceMonitored;
+
+@SourceMonitored
 public final class BooleanCondition extends Condition {
     private final Value left;
     private final String op;

Modified: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/ConditionList.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/ConditionList.java?rev=981625&r1=981624&r2=981625&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/ConditionList.java (original)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/ConditionList.java Mon Aug  2 17:42:49 2010
@@ -21,8 +21,10 @@ package org.ofbiz.sql;
 import java.util.Iterator;
 import java.util.List;
 
+import org.ofbiz.base.lang.SourceMonitored;
 import org.ofbiz.base.util.StringUtil;
 
+@SourceMonitored
 public final class ConditionList extends Condition implements Iterable<Condition> {
     private final Joiner joiner;
     private final List<Condition> conditions;

Modified: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/CountAllFunction.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/CountAllFunction.java?rev=981625&r1=981624&r2=981625&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/CountAllFunction.java (original)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/CountAllFunction.java Mon Aug  2 17:42:49 2010
@@ -18,6 +18,9 @@
  */
 package org.ofbiz.sql;
 
+import org.ofbiz.base.lang.SourceMonitored;
+
+@SourceMonitored
 public final class CountAllFunction extends StaticValue {
     public void accept(Visitor visitor) {
         visitor.visit(this);

Modified: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/CountFunction.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/CountFunction.java?rev=981625&r1=981624&r2=981625&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/CountFunction.java (original)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/CountFunction.java Mon Aug  2 17:42:49 2010
@@ -18,6 +18,9 @@
  */
 package org.ofbiz.sql;
 
+import org.ofbiz.base.lang.SourceMonitored;
+
+@SourceMonitored
 public final class CountFunction extends StaticValue {
     private final boolean isDistinct;
     private final FieldValue field;

Modified: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/FieldAll.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/FieldAll.java?rev=981625&r1=981624&r2=981625&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/FieldAll.java (original)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/FieldAll.java Mon Aug  2 17:42:49 2010
@@ -21,8 +21,10 @@ package org.ofbiz.sql;
 import java.util.Iterator;
 import java.util.Set;
 
+import org.ofbiz.base.lang.SourceMonitored;
 import org.ofbiz.base.util.StringUtil;
 
+@SourceMonitored
 public final class FieldAll extends Atom implements Iterable<String> {
     private final String alias;
     private final Set<String> exclude;

Modified: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/FieldDef.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/FieldDef.java?rev=981625&r1=981624&r2=981625&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/FieldDef.java (original)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/FieldDef.java Mon Aug  2 17:42:49 2010
@@ -18,6 +18,9 @@
  */
 package org.ofbiz.sql;
 
+import org.ofbiz.base.lang.SourceMonitored;
+
+@SourceMonitored
 public final class FieldDef extends Atom {
     private final String alias;
     private final StaticValue value;

Modified: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/FieldValue.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/FieldValue.java?rev=981625&r1=981624&r2=981625&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/FieldValue.java (original)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/FieldValue.java Mon Aug  2 17:42:49 2010
@@ -18,6 +18,9 @@
  */
 package org.ofbiz.sql;
 
+import org.ofbiz.base.lang.SourceMonitored;
+
+@SourceMonitored
 public final class FieldValue extends StaticValue {
     private final String fieldName;
     private final String tableName;

Modified: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/FunctionCall.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/FunctionCall.java?rev=981625&r1=981624&r2=981625&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/FunctionCall.java (original)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/FunctionCall.java Mon Aug  2 17:42:49 2010
@@ -21,8 +21,10 @@ package org.ofbiz.sql;
 import java.util.Iterator;
 import java.util.List;
 
+import org.ofbiz.base.lang.SourceMonitored;
 import org.ofbiz.base.util.StringUtil;
 
+@SourceMonitored
 public final class FunctionCall extends StaticValue implements Iterable<Value> {
     private final String name;
     private final List<Value> values;

Modified: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/ListCondition.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/ListCondition.java?rev=981625&r1=981624&r2=981625&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/ListCondition.java (original)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/ListCondition.java Mon Aug  2 17:42:49 2010
@@ -20,8 +20,10 @@ package org.ofbiz.sql;
 
 import java.util.List;
 
+import org.ofbiz.base.lang.SourceMonitored;
 import org.ofbiz.base.util.StringUtil;
 
+@SourceMonitored
 public final class ListCondition extends Condition {
     private final Value left;
     private final String op;

Modified: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/MathValue.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/MathValue.java?rev=981625&r1=981624&r2=981625&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/MathValue.java (original)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/MathValue.java Mon Aug  2 17:42:49 2010
@@ -21,8 +21,10 @@ package org.ofbiz.sql;
 import java.util.Iterator;
 import java.util.List;
 
+import org.ofbiz.base.lang.SourceMonitored;
 import org.ofbiz.base.util.StringUtil;
 
+@SourceMonitored
 public final class MathValue extends StaticValue implements Iterable<ConstantValue> {
     private final String op;
     private final List<ConstantValue> values;

Modified: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/NumberValue.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/NumberValue.java?rev=981625&r1=981624&r2=981625&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/NumberValue.java (original)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/NumberValue.java Mon Aug  2 17:42:49 2010
@@ -18,6 +18,9 @@
  */
 package org.ofbiz.sql;
 
+import org.ofbiz.base.lang.SourceMonitored;
+
+@SourceMonitored
 public final class NumberValue<N extends Number> extends ConstantValue {
     private final N number;
 

Modified: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/OrderByItem.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/OrderByItem.java?rev=981625&r1=981624&r2=981625&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/OrderByItem.java (original)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/OrderByItem.java Mon Aug  2 17:42:49 2010
@@ -18,6 +18,9 @@
  */
 package org.ofbiz.sql;
 
+import org.ofbiz.base.lang.SourceMonitored;
+
+@SourceMonitored
 public final class OrderByItem extends Atom {
     public enum Order { DEFAULT, ASCENDING, DESCENDING };
 

Modified: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/ParameterValue.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/ParameterValue.java?rev=981625&r1=981624&r2=981625&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/ParameterValue.java (original)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/ParameterValue.java Mon Aug  2 17:42:49 2010
@@ -18,6 +18,9 @@
  */
 package org.ofbiz.sql;
 
+import org.ofbiz.base.lang.SourceMonitored;
+
+@SourceMonitored
 public final class ParameterValue extends Value {
     private final String name;
 

Modified: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/StringValue.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/StringValue.java?rev=981625&r1=981624&r2=981625&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/StringValue.java (original)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/StringValue.java Mon Aug  2 17:42:49 2010
@@ -18,6 +18,9 @@
  */
 package org.ofbiz.sql;
 
+import org.ofbiz.base.lang.SourceMonitored;
+
+@SourceMonitored
 public final class StringValue extends ConstantValue {
     private final String str;
 

Added: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/test/ConditionsTest.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/test/ConditionsTest.java?rev=981625&view=auto
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/test/ConditionsTest.java (added)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/test/ConditionsTest.java Mon Aug  2 17:42:49 2010
@@ -0,0 +1,167 @@
+/*
+ * 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.ofbiz.sql.test;
+
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.ofbiz.sql.BetweenCondition;
+import org.ofbiz.sql.BooleanCondition;
+import org.ofbiz.sql.Condition;
+import org.ofbiz.sql.ConditionList;
+import org.ofbiz.sql.Joiner;
+import org.ofbiz.sql.ListCondition;
+import org.ofbiz.sql.NumberValue;
+import org.ofbiz.sql.StringValue;
+import org.ofbiz.sql.Value;
+
+import org.ofbiz.base.lang.SourceMonitored;
+import org.ofbiz.base.test.GenericTestCaseBase;
+
+@SourceMonitored
+public class ConditionsTest extends GenericTestCaseBase {
+    private static final StringValue s1 = new StringValue("a");
+    private static final StringValue s2 = new StringValue("b");
+    private static final StringValue s3 = new StringValue("c");
+    private static final NumberValue<Long> l1 = NumberValue.valueOf(1);
+    private static final NumberValue<Long> l2 = NumberValue.valueOf(5);
+    private static final NumberValue<Long> l3 = NumberValue.valueOf(10);
+
+    public ConditionsTest(String name) {
+        super(name);
+    }
+
+    private static <C extends Condition> void basicTest(String label, Class<C> clz, C c, String s, C o, boolean matches) {
+        assertEquals(label + ":toString", s, c.toString());
+        assertNotEquals(label + ":not-equals-this", c, ConditionsTest.class);
+        if (o != null) {
+            if (matches) {
+                assertEquals(label + ":equals", o, c);
+            } else {
+                assertNotEquals(label + ":not-equals", o, c);
+            }
+        }
+        ConditionVisitorRecorder visitor = new ConditionVisitorRecorder();
+        c.accept(visitor);
+        c.accept(visitor);
+        assertEquals(label + ":visited", 2, visitor.counts.remove(clz).intValue());
+        assertTrue(label + ":nothing-else-visited", visitor.counts.isEmpty());
+    }
+
+    private static void betweenConditionTest(String label, BetweenCondition c, Value left, Value r1, Value r2, String s, BetweenCondition o, boolean matches) {
+        assertEquals(label + ":left", left, c.getLeft());
+        assertEquals(label + ":r1", r1, c.getR1());
+        assertEquals(label + ":r2", r2, c.getR2());
+        basicTest(label, BetweenCondition.class, c, s, o, matches);
+    }
+
+    public void testBetweenCondition() {
+        BetweenCondition c1 = new BetweenCondition(l1, l2, l3);
+        betweenConditionTest("c1", c1, l1, l2, l3, "1 BETWEEN 5 AND 10", null, false);
+        BetweenCondition c2 = new BetweenCondition(l3, l1, l2);
+        betweenConditionTest("c2", c2, l3, l1, l2, "10 BETWEEN 1 AND 5", c1, false);
+        BetweenCondition c3 = new BetweenCondition(l1, l2, l3);
+        betweenConditionTest("c3", c3, l1, l2, l3, "1 BETWEEN 5 AND 10", c1, true);
+        BetweenCondition c4 = new BetweenCondition(l1, l3, l2);
+        betweenConditionTest("c4", c4, l1, l3, l2, "1 BETWEEN 10 AND 5", c1, false);
+        BetweenCondition c5 = new BetweenCondition(l1, l2, l1);
+        betweenConditionTest("c5", c5, l1, l2, l1, "1 BETWEEN 5 AND 1", c1, false);
+    }
+
+    private static void booleanConditionTest(String label, BooleanCondition c, Value left, String op, Value right, String s, BooleanCondition o, boolean matches) {
+        assertEquals(label + ":left", left, c.getLeft());
+        assertEquals(label + ":op", op, c.getOp());
+        assertEquals(label + ":right", right, c.getRight());
+        basicTest(label, BooleanCondition.class, c, s, o, matches);
+    }
+
+    public void testBooleanCondition() {
+        BooleanCondition c1 = new BooleanCondition(l1, "=", l2);
+        booleanConditionTest("c1", c1, l1, "=", l2, "1 = 5", null, false);
+        BooleanCondition c2 = new BooleanCondition(l1, "=", l3);
+        booleanConditionTest("c2", c2, l1, "=", l3, "1 = 10", c1, false);
+        BooleanCondition c3 = new BooleanCondition(l1, "<", l2);
+        booleanConditionTest("c3", c3, l1, "<", l2, "1 < 5", c1, false);
+        BooleanCondition c4 = new BooleanCondition(l2, ">", l3);
+        booleanConditionTest("c4", c4, l2, ">", l3, "5 > 10", c1, false);
+        BooleanCondition c5 = new BooleanCondition(l1, "=", l2);
+        booleanConditionTest("c5", c5, l1, "=", l2, "1 = 5", c1, true);
+    }
+
+    private static void conditionListTest(String label, ConditionList c, Joiner joiner, List<? extends Condition> conditions, String s, ConditionList o, boolean matches) {
+        assertEquals(label + ":joiner", joiner, c.getJoiner());
+        basicTest(label, ConditionList.class, c, s, o, matches);
+        BooleanCondition b = new BooleanCondition(l1, "=", l3);
+        c.add(b);
+        assertEqualsIterable(label + ":iterable", conditions, Collections.<Condition>emptyList(), false, c, list(b), true);
+    }
+
+    public void testConditionList() {
+        BooleanCondition b1 = new BooleanCondition(l1, "=", l2);
+        BooleanCondition b2 = new BooleanCondition(l2, "=", l3);
+        BooleanCondition b3 = new BooleanCondition(l1, "=", l3);
+        ConditionList c1 = new ConditionList(Joiner.AND, GenericTestCaseBase.<Condition>list(b1));
+        conditionListTest("c1", c1, Joiner.AND, list(b1), "( 1 = 5 )", null, false);
+        ConditionList c2 = new ConditionList(Joiner.AND, GenericTestCaseBase.<Condition>list(b1, b2));
+        conditionListTest("c2", c2, Joiner.AND, list(b1, b2), "( 1 = 5 AND 5 = 10 )", c1, false);
+        ConditionList c3 = new ConditionList(Joiner.OR, GenericTestCaseBase.<Condition>list(b2, b1));
+        conditionListTest("c3", c3, Joiner.OR, list(b2, b1), "( 5 = 10 OR 1 = 5 )", c1, false);
+        ConditionList c4 = new ConditionList(Joiner.AND, GenericTestCaseBase.<Condition>list(b1));
+        conditionListTest("c4", c4, Joiner.AND, list(b1), "( 1 = 5 )", c1, true);
+    }
+
+    private static void listConditionTest(String label, ListCondition c, Value left, String op, List<? extends Value> values, String s, ListCondition o, boolean matches) {
+        assertEquals(label + ":left", left, c.getLeft());
+        assertEquals(label + ":op", op, c.getOp());
+        assertEquals(label + ":right", values, c.getValues());
+        basicTest(label, ListCondition.class, c, s, o, matches);
+    }
+
+    public void testListCondition() {
+        ListCondition c1 = new ListCondition(l1, "IN", GenericTestCaseBase.<Value>list(l2));
+        listConditionTest("c1", c1, l1, "in", list(l2), "1 in (5)", null, false);
+        ListCondition c2 = new ListCondition(l1, "NOT IN", GenericTestCaseBase.<Value>list(l2));
+        listConditionTest("c2", c2, l1, "not in", list(l2), "1 not in (5)", c1, false);
+        ListCondition c3 = new ListCondition(l2, "IN", GenericTestCaseBase.<Value>list(l3));
+        listConditionTest("c3", c3, l2, "in", list(l3), "5 in (10)", c1, false);
+        ListCondition c4 = new ListCondition(l1, "IN", GenericTestCaseBase.<Value>list(l2, l3));
+        listConditionTest("c4", c4, l1, "in", list(l2, l3), "1 in (5, 10)", c1, false);
+        ListCondition c5 = new ListCondition(l1, "IN", GenericTestCaseBase.<Value>list(l2));
+        listConditionTest("c5", c5, l1, "in", list(l2), "1 in (5)", c1, true);
+    }
+
+    public static class ConditionVisitorRecorder extends Recorder<Class<? extends Condition>> implements Condition.Visitor {
+        public void visit(BetweenCondition condition) {
+            record(BetweenCondition.class);
+        }
+
+        public void visit(BooleanCondition condition) {
+            record(BooleanCondition.class);
+        }
+
+        public void visit(ConditionList condition) {
+            record(ConditionList.class);
+        }
+
+        public void visit(ListCondition condition) {
+            record(ListCondition.class);
+        }
+    }
+}

Copied: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/test/Recorder.java (from r981624, ofbiz/trunk/framework/sql/src/org/ofbiz/sql/CountAllFunction.java)
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/test/Recorder.java?p2=ofbiz/trunk/framework/sql/src/org/ofbiz/sql/test/Recorder.java&p1=ofbiz/trunk/framework/sql/src/org/ofbiz/sql/CountAllFunction.java&r1=981624&r2=981625&rev=981625&view=diff
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/CountAllFunction.java (original)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/test/Recorder.java Mon Aug  2 17:42:49 2010
@@ -16,19 +16,21 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.ofbiz.sql;
 
-public final class CountAllFunction extends StaticValue {
-    public void accept(Visitor visitor) {
-        visitor.visit(this);
-    }
+package org.ofbiz.sql.test;
 
-    public String getDefaultName() {
-        return "COUNT";
-    }
+import java.util.HashMap;
+import java.util.Map;
+
+public abstract class Recorder<I> {
+    public Map<I, Integer> counts = new HashMap<I, Integer>();
 
-    public StringBuilder appendTo(StringBuilder sb) {
-        sb.append("COUNT(*)");
-        return sb;
+    protected void record(I key) {
+        Integer count = counts.get(key);
+        if (count == null) {
+            counts.put(key, Integer.valueOf(1));
+        } else {
+            counts.put(key, Integer.valueOf(count.intValue() + 1));
+        }
     }
 }

Added: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/test/SelectTest.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/test/SelectTest.java?rev=981625&view=auto
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/test/SelectTest.java (added)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/test/SelectTest.java Mon Aug  2 17:42:49 2010
@@ -0,0 +1,139 @@
+/*
+ * 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.ofbiz.sql.test;
+
+import java.io.StringReader;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import junit.framework.TestCase;
+
+import org.ofbiz.sql.ConstantValue;
+import org.ofbiz.sql.CountAllFunction;
+import org.ofbiz.sql.CountFunction;
+import org.ofbiz.sql.FieldValue;
+import org.ofbiz.sql.FunctionCall;
+import org.ofbiz.sql.MathValue;
+import org.ofbiz.sql.NumberValue;
+import org.ofbiz.sql.ParameterValue;
+import org.ofbiz.sql.StaticValue;
+import org.ofbiz.sql.StringValue;
+import org.ofbiz.sql.Value;
+
+import org.ofbiz.sql.FieldAll;
+import org.ofbiz.sql.FieldDef;
+import org.ofbiz.sql.Parser;
+import org.ofbiz.sql.OrderByItem;
+
+import org.ofbiz.base.lang.SourceMonitored;
+import org.ofbiz.base.test.GenericTestCaseBase;
+
+@SourceMonitored
+public class SelectTest extends GenericTestCaseBase {
+    private static final FieldValue fv1 = new FieldValue("partyId");
+    private static final FieldValue fv2 = new FieldValue("a", "partyId");
+    private static final FieldValue fv3 = new FieldValue(null, "partyId");
+    private static final FieldValue fv4 = new FieldValue(null, "firstName");
+    private static final NumberValue<Long> nv1 = NumberValue.valueOf(1);
+    private static final NumberValue<Double> nv2 = NumberValue.valueOf(2D);
+    private static final NumberValue<Long> nv3 = NumberValue.valueOf(3);
+
+    public SelectTest(String name) {
+        super(name);
+    }
+
+    private static Parser parser(Object v) {
+        return new Parser(new StringReader(v.toString()));
+    }
+
+    private static <V> void basicTest(String label, Class<V> clz, V v, V o, boolean matches) {
+        assertNotEquals(label + ":not-equals-this", v, SelectTest.class);
+        if (o != null) {
+            if (matches) {
+                assertEquals(label + ":equals", o, v);
+            } else {
+                assertNotEquals(label + ":not-equals", o, v);
+            }
+        }
+    }
+
+    private static void fieldAllTest(String label, FieldAll v, String alias, Set<String> exclude, FieldAll o, boolean matches) throws Exception {
+        assertEquals(label + ":alias", alias, v.getAlias());
+        assertEquals(label + ":exclude", exclude, set(v));
+        assertEquals(label + ":parse", v, parser(v).parse_FieldAll());
+        basicTest(label, FieldAll.class, v, o, matches);
+    }
+
+    public void testFieldAll() throws Exception {
+        FieldAll v1 = new FieldAll("a", set("a", "b"));
+        fieldAllTest("v1", v1, "a", set("a", "b"), null, false);
+        FieldAll v2 = new FieldAll("b", set("a", "b"));
+        fieldAllTest("v2", v2, "b", set("a", "b"), v1, false);
+        FieldAll v3 = new FieldAll("a", set("b", "c"));
+        fieldAllTest("v3", v3, "a", set("b", "c"), v1, false);
+        FieldAll v4 = new FieldAll("a", Collections.<String>emptySet());
+        fieldAllTest("v4", v4, "a", Collections.<String>emptySet(), v1, false);
+        FieldAll v5 = new FieldAll("a", set("b", "a"));
+        fieldAllTest("v5", v5, "a", set("b", "a"), v1, true);
+    }
+
+    private static void fieldDefTest(String label, FieldDef v, StaticValue value, String alias, String defaultName, FieldDef o, boolean matches) throws Exception {
+        assertEquals(label + ":value", value, v.getValue());
+        assertEquals(label + ":alias", alias, v.getAlias());
+        assertEquals(label + ":default-name", defaultName, v.getDefaultName());
+        assertEquals(label + ":parse", v, parser(v).parse_FieldDef());
+        basicTest(label, FieldDef.class, v, o, matches);
+    }
+
+    public void testFieldDef() throws Exception {
+        FieldDef v1 = new FieldDef(fv1, null);
+        fieldDefTest("v1", v1, fv1, null, "partyId", null, false);
+        FieldDef v2 = new FieldDef(fv1, "partyId");
+        fieldDefTest("v2", v2, fv1, "partyId", "partyId", v1, false);
+        FieldDef v3 = new FieldDef(fv4, null);
+        fieldDefTest("v3", v3, fv4, null, "firstName", v1, false);
+        FieldDef v4 = new FieldDef(fv4, "partyId");
+        fieldDefTest("v4", v4, fv4, "partyId", "partyId", v1, false);
+        FieldDef v5 = new FieldDef(fv1, null);
+        fieldDefTest("v5", v5, fv1, null, "partyId", v1, true);
+    }
+
+    private static void orderByItemTest(String label, OrderByItem v, OrderByItem.Order order, String functionName, String fieldName, OrderByItem o, boolean matches) throws Exception {
+        assertEquals(label + ":order", order, v.getOrder());
+        assertEquals(label + ":function-name", functionName, v.getFunctionName());
+        assertEquals(label + ":field-name", fieldName, v.getFieldName());
+        assertEquals(label + ":parse", v, parser(v).parse_OrderByItem());
+        basicTest(label, OrderByItem.class, v, o, matches);
+    }
+
+    public void testOrderByItem() throws Exception {
+        OrderByItem v1 = new OrderByItem(OrderByItem.Order.DEFAULT, null, "partyId");
+        orderByItemTest("v1", v1, OrderByItem.Order.DEFAULT, null, "partyId", null, false);
+        OrderByItem v2 = new OrderByItem(OrderByItem.Order.ASCENDING, null, "partyId");
+        orderByItemTest("v3", v2, OrderByItem.Order.ASCENDING, null, "partyId", v1, false);
+        OrderByItem v3 = new OrderByItem(OrderByItem.Order.DESCENDING, null, "partyId");
+        orderByItemTest("v2", v3, OrderByItem.Order.DESCENDING, null, "partyId", v1, false);
+        OrderByItem v4 = new OrderByItem(OrderByItem.Order.DEFAULT, "LOWER", "partyId");
+        orderByItemTest("v4", v4, OrderByItem.Order.DEFAULT, "LOWER", "partyId", v1, false);
+        OrderByItem v5 = new OrderByItem(OrderByItem.Order.DEFAULT, null, "firstName");
+        orderByItemTest("v5", v5, OrderByItem.Order.DEFAULT, null, "firstName", v1, false);
+    }
+}

Added: ofbiz/trunk/framework/sql/src/org/ofbiz/sql/test/ValuesTest.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/sql/src/org/ofbiz/sql/test/ValuesTest.java?rev=981625&view=auto
==============================================================================
--- ofbiz/trunk/framework/sql/src/org/ofbiz/sql/test/ValuesTest.java (added)
+++ ofbiz/trunk/framework/sql/src/org/ofbiz/sql/test/ValuesTest.java Mon Aug  2 17:42:49 2010
@@ -0,0 +1,228 @@
+/*
+ * 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.ofbiz.sql.test;
+
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.ofbiz.sql.ConstantValue;
+import org.ofbiz.sql.CountAllFunction;
+import org.ofbiz.sql.CountFunction;
+import org.ofbiz.sql.FieldValue;
+import org.ofbiz.sql.FunctionCall;
+import org.ofbiz.sql.MathValue;
+import org.ofbiz.sql.NumberValue;
+import org.ofbiz.sql.ParameterValue;
+import org.ofbiz.sql.StaticValue;
+import org.ofbiz.sql.StringValue;
+import org.ofbiz.sql.Value;
+
+import org.ofbiz.base.lang.SourceMonitored;
+import org.ofbiz.base.test.GenericTestCaseBase;
+
+@SourceMonitored
+public class ValuesTest extends GenericTestCaseBase {
+    private static final FieldValue fv1 = new FieldValue("partyId");
+    private static final FieldValue fv2 = new FieldValue("a", "partyId");
+    private static final FieldValue fv3 = new FieldValue(null, "partyId");
+    private static final FieldValue fv4 = new FieldValue(null, "firstName");
+    private static final NumberValue<Long> nv1 = NumberValue.valueOf(1);
+    private static final NumberValue<Double> nv2 = NumberValue.valueOf(2D);
+    private static final NumberValue<Long> nv3 = NumberValue.valueOf(3);
+
+    public ValuesTest(String name) {
+        super(name);
+    }
+
+    private static <V extends Value> void basicTest(String label, Class<V> clz, V v, String defaultName, String s, V o, boolean matches) {
+        if (v instanceof StaticValue) {
+            assertEquals(label + ":default-name", defaultName, ((StaticValue) v).getDefaultName());
+        }
+        assertEquals(label + ":toString", s, v.toString());
+        assertNotEquals(label + ":not-equals-this", v, ValuesTest.class);
+        if (o != null) {
+            if (matches) {
+                assertEquals(label + ":equals", o, v);
+            } else {
+                assertNotEquals(label + ":not-equals", o, v);
+            }
+        }
+        ValueVisitorRecorder visitor = new ValueVisitorRecorder();
+        v.accept(visitor);
+        v.accept(visitor);
+        assertEquals(label + ":visited", 2, visitor.counts.remove(clz).intValue());
+        assertTrue(label + ":nothing-else-visited", visitor.counts.isEmpty());
+    }
+
+    public void testCountAllFunction() {
+        CountAllFunction v1 = new CountAllFunction();
+        basicTest("count-all", CountAllFunction.class, v1, "COUNT", "COUNT(*)", null, false);
+    }
+
+    private static void countFunctionTest(String label, CountFunction v, boolean isDistinct, FieldValue fv, String s, CountFunction o, boolean matches) {
+        assertEquals(label + ":left", isDistinct, v.isDistinct());
+        assertEquals(label + ":field-value", fv, v.getField());
+        basicTest(label, CountFunction.class, v, "COUNT", s, o, matches);
+    }
+
+    public void testCountFunction() {
+        CountFunction v1 = new CountFunction(false, fv2);
+        countFunctionTest("v1", v1, false, fv2, "COUNT(a.partyId)", null, false);
+        CountFunction v2 = new CountFunction(true, fv2);
+        countFunctionTest("v2", v2, true, fv2, "COUNT(DISTINCT a.partyId)", v1, false);
+        CountFunction v3 = new CountFunction(true, fv1);
+        countFunctionTest("v3", v3, true, fv1, "COUNT(DISTINCT partyId)", v1, false);
+        CountFunction v4 = new CountFunction(false, fv1);
+        countFunctionTest("v4", v4, false, fv1, "COUNT(partyId)", v1, false);
+        CountFunction v5 = new CountFunction(false, fv2);
+        countFunctionTest("v5", v5, false, fv2, "COUNT(a.partyId)", v1, true);
+    }
+
+    private static void fieldValueTest(String label, FieldValue v, String tableName, String fieldName, String s, FieldValue o, boolean matches) {
+        assertEquals(label + ":table-name", tableName, v.getTableName());
+        assertEquals(label + ":field-name", fieldName, v.getFieldName());
+        basicTest(label, FieldValue.class, v, fieldName, s, o, matches);
+    }
+
+    public void testFieldValue() {
+        fieldValueTest("fv1", fv1, null, "partyId", "partyId", null, false);
+        fieldValueTest("fv2", fv2, "a", "partyId", "a.partyId", fv1, false);
+        fieldValueTest("fv3", fv3, null, "partyId", "partyId", fv1, true);
+        fieldValueTest("fv4", fv4, null, "firstName", "firstName", fv1, false);
+    }
+
+    private static void functionCallTest(String label, FunctionCall v, String name, List<? extends Value> values, String s, FunctionCall o, boolean matches) {
+        assertEquals(label + ":name", name, v.getName());
+        assertEquals(label + ":arg-count", values.size(), v.getArgCount());
+        assertEqualsIterable(label, values, v);
+        basicTest(label, FunctionCall.class, v, name, s, o, matches);
+    }
+
+    public void testFunctionCall() {
+        FunctionCall v1 = new FunctionCall("LENGTH", GenericTestCaseBase.<Value>list(nv1, nv2));
+        functionCallTest("v1", v1, "LENGTH", list(nv1, nv2), "LENGTH(1, 2.0)", null, false);
+        FunctionCall v2 = new FunctionCall("LENGTH", GenericTestCaseBase.<Value>list(nv1, nv3));
+        functionCallTest("v2", v2, "LENGTH", list(nv1, nv3), "LENGTH(1, 3)", v1, false);
+        FunctionCall v3 = new FunctionCall("LENGTH", GenericTestCaseBase.<Value>list(nv1, nv2));
+        functionCallTest("v3", v3, "LENGTH", list(nv1, nv2), "LENGTH(1, 2.0)", v1, true);
+        FunctionCall v4 = new FunctionCall("TRIM", GenericTestCaseBase.<Value>list(nv1, nv2));
+        functionCallTest("v4", v4, "TRIM", list(nv1, nv2), "TRIM(1, 2.0)", v1, false);
+    }
+
+    private static void mathValueTest(String label, MathValue v, String op, List<? extends ConstantValue> values, String s, MathValue o, boolean matches) {
+        assertEquals(label + ":op", op, v.getOp());
+        assertEqualsIterable(label, values, v);
+        basicTest(label, MathValue.class, v, null, s, o, matches);
+    }
+
+    public void testMathValue() {
+        MathValue v1 = new MathValue("+", GenericTestCaseBase.<ConstantValue>list(nv1, nv2));
+        mathValueTest("v1", v1, "+", list(nv1, nv2), "( 1+ 2.0)", null, false);
+        MathValue v2 = new MathValue("+", GenericTestCaseBase.<ConstantValue>list(nv1, nv3));
+        mathValueTest("v2", v2, "+", list(nv1, nv3), "( 1+ 3)", v1, false);
+        MathValue v3 = new MathValue("+", GenericTestCaseBase.<ConstantValue>list(nv1, nv2));
+        mathValueTest("v3", v3, "+", list(nv1, nv2), "( 1+ 2.0)", v1, true);
+        MathValue v4 = new MathValue("-", GenericTestCaseBase.<ConstantValue>list(nv1, nv3));
+        mathValueTest("v4", v4, "-", list(nv1, nv3), "( 1- 3)", v1, false);
+    }
+
+    public void testNull() {
+        basicTest("null", Value.Null.class, Value.NULL, null, "NULL", null, false);
+    }
+
+    private static <N extends Number> void numberValueTest(String label, NumberValue<N> v, N n, String s, NumberValue o, boolean matches) {
+        assertEquals(label + ":number", n, v.getNumber());
+        basicTest(label, NumberValue.class, v, null, s, o, matches);
+    }
+
+    public void testNumberValue() {
+        numberValueTest("nv1", nv1, Long.valueOf(1), "1", null, false);
+        numberValueTest("nv2", nv2, Double.valueOf(2), "2.0", nv1, false);
+        NumberValue<Long> nv3 = NumberValue.valueOf(1);
+        numberValueTest("nv3", nv3, Long.valueOf(1), "1", nv1, true);
+    }
+
+    private static void parameterValueTest(String label, ParameterValue v, String name, String s, ParameterValue o, boolean matches) {
+        assertEquals(label + ":name", name, v.getName());
+        basicTest(label, ParameterValue.class, v, null, s, o, matches);
+    }
+
+    public void testParameterValue() {
+        ParameterValue v1 = new ParameterValue("a");
+        parameterValueTest("v1", v1, "a", "?a", null, false);
+        ParameterValue v2 = new ParameterValue("b");
+        parameterValueTest("v2", v2, "b", "?b", v1, false);
+        ParameterValue v3 = new ParameterValue("a");
+        parameterValueTest("v3", v3, "a", "?a", v1, true);
+    }
+
+    private static void stringValueTest(String label, StringValue v, String string, String s, StringValue o, boolean matches) {
+        assertEquals(label + ":name", string, v.getString());
+        basicTest(label, StringValue.class, v, null, s, o, matches);
+    }
+
+    public void testStringValue() {
+        StringValue v1 = new StringValue("foo");
+        stringValueTest("v1", v1, "foo", "'foo'", null, false);
+        StringValue v2 = new StringValue("b'r");
+        stringValueTest("v2", v2, "b'r", "'b''r'", v1, false);
+        StringValue v3 = new StringValue("foo");
+        stringValueTest("v3", v3, "foo", "'foo'", v1, true);
+    }
+
+    public static class ValueVisitorRecorder extends Recorder<Class<? extends Value>> implements Value.Visitor {
+        public void visit(FieldValue value) {
+            record(FieldValue.class);
+        }
+
+        public void visit(FunctionCall value) {
+            record(FunctionCall.class);
+        }
+
+        public void visit(MathValue value) {
+            record(MathValue.class);
+        }
+
+        public void visit(Value.Null value) {
+            record(Value.Null.class);
+        }
+
+        public void visit(NumberValue value) {
+            record(NumberValue.class);
+        }
+
+        public void visit(ParameterValue value) {
+            record(ParameterValue.class);
+        }
+
+        public void visit(StringValue value) {
+            record(StringValue.class);
+        }
+
+        public void visit(CountFunction value) {
+            record(CountFunction.class);
+        }
+
+        public void visit(CountAllFunction value) {
+            record(CountAllFunction.class);
+        }
+    }
+}