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);
+ }
+ }
+}