Author: michiel
Date: 2009-10-20 22:09:38 +0200 (Tue, 20 Oct 2009)
New Revision: 39256

Added:
   
mmbase/trunk/core/src/test/java/org/mmbase/datatypes/ParameterizedDataTypesTest.java
Log:
ported the 'datatypes' tests to use the mock-objects

Added: 
mmbase/trunk/core/src/test/java/org/mmbase/datatypes/ParameterizedDataTypesTest.java
===================================================================
--- 
mmbase/trunk/core/src/test/java/org/mmbase/datatypes/ParameterizedDataTypesTest.java
                                (rev 0)
+++ 
mmbase/trunk/core/src/test/java/org/mmbase/datatypes/ParameterizedDataTypesTest.java
        2009-10-20 20:09:38 UTC (rev 39256)
@@ -0,0 +1,279 @@
+/*
+
+This software is OSI Certified Open Source Software.
+OSI Certified is a certification mark of the Open Source Initiative.
+
+The license (Mozilla version 1.0) can be read at the MMBase site.
+See http://www.MMBase.org/license
+
+*/
+
+package org.mmbase.datatypes;
+
+import org.junit.*;
+import org.junit.runner.*;
+import org.junit.runners.*;
+import static org.junit.Assert.*;
+
+import org.mmbase.bridge.*;
+import org.mmbase.bridge.mock.*;
+import java.util.*;
+import java.math.BigDecimal;
+
+import org.mmbase.util.*;
+
+
+/**
+ * Testing valid/invalid for lots of different configurations. The fields of 
tests/datatypes.xml are used.
+ *
+ * @author Michiel Meeuwissen
+ * @since MMBase-1.9.2
+ * @version $Id: DataTypesTest.java 39003 2009-10-06 14:42:39Z michiel $
+ */
+...@runwith(Parameterized.class)
+public class ParameterizedDataTypesTest  {
+
+    static final MockCloudContext CLOUD_CONTEXT = new MockCloudContext();
+    static {
+        DataTypes.initialize();
+        try {
+            
CLOUD_CONTEXT.addNodeManagers(ResourceLoader.getConfigurationRoot().getChildResourceLoader("builders/core"));
+            
CLOUD_CONTEXT.addNodeManagers(ResourceLoader.getConfigurationRoot().getChildResourceLoader("builders/tests"));
+        } catch (java.io.IOException ioe) {
+            throw new RuntimeException(ioe);
+        }
+    }
+
+    @BeforeClass
+    public static void setUp() throws Exception {
+
+
+    }
+
+    protected static Cloud getCloud() {
+        return CLOUD_CONTEXT.getCloud("mmbase");
+    }
+
+    /**
+     * All test-cases from his class are defined here.
+     * Note that this method is also called from the 'integration tests" from 
tests/bridge, adn the same tests are performed on an actual running mmbase (so 
no mocking).
+     */
+
+    public static Object[][] getCases(Cloud cloud, byte[] binary) throws 
Exception {
+
+        Node node1 = cloud.getNodeManager("datatypes");
+        NodeManager object = cloud.getNodeManager("object");
+        Node node2 = object.createNode();
+        node2.commit();
+        NodeManager aa = cloud.getNodeManager("aa");
+        Node node3 = aa.createNode();
+        commit(node3);
+        Object[][] cases = new Object[][] {
+            /*            {field,
+                          {valid values},
+                          {invalid values}} */
+            new Object[] {"string",
+                          new Object[] {"abcdefg", "ijklm\nopqrstx", null},
+                          new Object[] {}},
+            new Object[] {"line",
+                          new Object[] {"abcdefg", new Integer(40), new 
Float(3.141592), null},
+                          new Object[] {"ijklm\nopqrstx"}},
+            new Object[] {"field",
+                          new Object[] {"xyz", "zyz\nkloink", null} ,
+                          new Object[] {}},
+            new Object[] {"zipcode",
+                          new Object[] {"7081EA", "7081  ea", null},
+                          new Object[] {"70823b", "xx 7081 EA",  "xx\n7081 
EA"}},
+            new Object[] {"pattern",
+                          new Object[] {"ababa", "aBB", null},
+                          new Object[] {"c", "abaxbab"}},
+            new Object[] {"email",
+                          new Object[] {"a...@bla.nl", null},
+                          new Object[] {"abaxbab"}},
+            new Object[] {"stringrange",
+                          new Object[] {"a", "ab", "xyzab", "zzzzz", 
"zzzzaaaaa", null},
+                          new Object[] {"", "zzzzza", "\na"}},
+            new Object[] {"stringlength",
+                          new Object[] {"a", "0123456789",  "123456789\n", 
"\n123456789", null},
+                          new Object[] {"",  "bbbbbbbbbbb", "123456789\n\n"}},
+            new Object[] {"required_stringlength",
+                          new Object[] {"aaa", "0123456789",  "123456789\n", 
"\n123456789"},
+                          new Object[] {null, "",  "bbbbbbbbbbb", 
"123456789\n\n"}},
+            new Object[] {"required_legacy",
+                          new Object[] {"aaa", "0123456789",  "123456789\n", 
"\n123456789", ""},
+                          new Object[] {null}}
+            ,
+            new Object[] {"languages",
+                          new Object[] {"nl", "en", null},
+                          new Object[] {"c", "ababab", ""}},
+            new Object[] {"integer",
+                          new Object[] {new Integer(-100), "-1", new 
Integer(100), "-100", new Float(10.0), "1234", "1234.4", "1e7",  null, ""},
+                          new Object[] {new Long(Long.MAX_VALUE), "1e30",  
"asdfe"}
+            },
+            new Object[] {"duration",
+                          new Object[] { new Integer(100), "100", new 
Float(10.0), "1234", "1234.4", "1e7",  null, "", "10:10:10", new 
Long(Long.MAX_VALUE)},
+                          new Object[] { "1e50",  "asdfe", "-100", new 
Integer(-100) }
+            }
+            ,
+            new Object[] {"duration_required",
+                          new Object[] { new Integer(100), "100", new 
Float(10.0), "1234", "1234.4", "1e7", "10:10:10", new Long(Long.MAX_VALUE)},
+                          new Object[] { "1e50",  "asdfe", "-100", new 
Integer(-100), null, "" }
+            }
+            ,
+            new Object[] {"range",
+                          new Object[] {new Integer(5), "1", "6.0", new 
Float(2.0), null},
+                          new Object[] {"-1", "11", "xyz", new Integer(0), new 
Integer(10)}},
+            new Object[] {"datetime",
+                          new Object[] {new Date(), "2005-01-01", 
DynamicDate.getInstance("now - 5 year"), null},
+                          new Object[] {"xxx"}},
+            new Object[] {"period",
+                          new Object[] {new Date(), "2005-01-01", 
"2006-01-01", null},
+                          new Object[] {"1973-03-05", "2050-01-01"}},
+            new Object[] {"dynamic_period",
+                          new Object[] {new Date(), "today + 100 year", null},
+                          new Object[] {"now - 4 day", "today + 101 year"}},
+            new Object[] {"integer_datetime",
+                          new Object[] {new Date(), "2005-01-01", 
DynamicDate.getInstance("now - 5 year"), new Integer(Integer.MAX_VALUE), null},
+                          new Object[] {"xxx", "2100-01-01", 
DynamicDate.getInstance("now + 100 year"), new Long(Long.MAX_VALUE)}},
+            new Object[] {"mmbase_state_enumeration",
+                          new Object[] {"ACTIVE", "inactive", "unknown", new 
Integer(1), "1", null},
+                          new Object[] {"-2", new Long(71221111112L), "bla 
bla"}},
+            new Object[] {"enumeration",
+                          new Object[] {"2", "4", new Integer(6), null},
+                          new Object[] {"-1", "xxx"}},
+            new Object[] {"restricted_ordinals",
+                          new Object[] {"2", "4", new Integer(6), null},
+                          new Object[] {"1", "21", new Integer(10)}},
+            new Object[] {"float",
+                          new Object[] {"2", "4", new Integer(6), null, new 
Double(1.0), "1.0", "1e20", null, ""},
+                          new Object[] {new Double(Double.POSITIVE_INFINITY), 
"bla bla"
+                          }},
+            new Object[] {"handle",
+                          new Object[] {binary, null},
+                          new Object[] {new byte[] {1, 2}}
+            },
+            new Object[] {"boolean",
+                          new Object[] {Boolean.TRUE, Boolean.FALSE, "true", 
"false", new Integer(1), new Integer(0), null},
+                          new Object[] {"asjdlkf", "21", "yes", new 
Integer(10)}},
+            new Object[] {"yesno",
+                          new Object[] {Boolean.TRUE, Boolean.FALSE,"true", 
"false", new Integer(1), new Integer(0), null},
+                          new Object[] {"asjdlkf", "21", new Integer(10)}},
+            new Object[] {"integer_boolean",
+                          new Object[] {Boolean.TRUE, Boolean.FALSE, "true", 
"false", new Integer(1), new Integer(0), null},
+                          new Object[] {"asjdlkf", "21", new Integer(10)}},
+
+            new Object[] {"string_boolean",
+                          new Object[] {Boolean.TRUE, Boolean.FALSE, "true", 
"false", new Integer(1), new Integer(0), null},
+                          new Object[] {"asjdlkf", "21", new Integer(10)}},
+            new Object[] {"boolean_string",
+                          new Object[] {Boolean.TRUE, Boolean.FALSE, "true", 
"false", null},
+                          new Object[] { "asjdlkf", "21", new Integer(10)}},
+            new Object[] {"integer_string",
+                          new Object[] {"1", "100", new Integer(10), new 
Integer(-1), "-1" , null},
+                          new Object[] { "asjdlkf"}},
+            new Object[] {"node",
+                          new Object[] {node1, node2, "" + node1.getNumber(), 
new Integer(node1.getNumber()), new Integer(node2.getNumber()),  new 
Integer(-1), null, ""},
+                          new Object[] {"asjdlkf", new Integer(-2), new 
Integer(-100)}}
+            ,
+            new Object[] {"typedef",
+                          new Object[] {node1, new Integer(node1.getNumber()), 
 null, ""},
+                          new Object[] {"asjdlkf", node3, new 
Integer(node3.getNumber()), new Integer(-2), new Integer(-100)}}
+            ,
+            new Object[] {"nonode_typedef",
+                          new Object[] {"object", "typedef", "datatypes"},
+                          new Object[] {"", "asjdlkf", node1}}
+            ,
+            new Object[] {"decimal",
+                          new Object[] 
{"22222222222222222222222222222222222.111111111111111111111111111111"/*35.30*/, 
"1", new Integer(100),
+                                        new 
BigDecimal("22222222222222222222222222222222222.1234")},
+                          new Object[] 
{"333333333333333333333333333333333333", "asjdlkf"}}
+            ,
+            new Object[] {"currency",
+                          new Object[] {"222222222222222.11111"/*15.5*/, "1", 
new Integer(100),
+                                        new BigDecimal("1.123456789"), 
"12345.1111111111"},
+                          new Object[] {"3333333333333333", "asjdlkf"}}
+            /*
+              XML not very well supported yet
+              new Object[] {"xml",
+              new Object[] {"<p />",  null},
+              new Object[] {"asjdlkf", new Integer(-1), new Integer(-100), new 
Float(2.0)}
+              }
+            */
+
+        };
+        return cases;
+    }
+
+
+    @Parameterized.Parameters
+    public static Collection<Object[]> data() throws Exception {
+        Cloud cloud = getCloud();
+
+        List<Object[]> result = new ArrayList<Object[]>();
+        for (Object[] kase : getCases(cloud, new byte[] {1, 2, 3, 4})) {
+            String fieldName = (String) kase[0];
+            Object[] validValues = (Object[]) kase[1];
+            Object[] invalidValues = (Object[]) kase[2];
+            for (Object validValue : validValues) {
+                result.add(new Object[] {fieldName, validValue, true});
+            }
+            for (Object invalidValue : invalidValues) {
+                result.add(new Object[] {fieldName, invalidValue, false});
+            }
+        }
+        //result = result.subList(0, 10);
+        //System.out.println("Found "+ result);
+        return result;
+    }
+
+
+    private final String fieldName;
+    private final Object value;
+    private final boolean valid;
+    public ParameterizedDataTypesTest(String field, Object value, boolean 
valid) {
+        this.fieldName = field;
+        this.value = value;
+        this.valid = valid;
+    }
+
+
+
+
+    protected static void commit(Node node) {
+        node.commit();
+        if (node.getCloud() instanceof Transaction) {
+            ((Transaction) node.getCloud()).commit();
+        }
+    }
+
+
+    @Test
+    public void testCheckValid() {
+        try {
+            Cloud cloud = getCloud();
+            NodeManager nodeManager = cloud.getNodeManager("datatypes");
+            Field field = nodeManager.getField(fieldName);
+            field.getDataType().validate(value); // should not give errors
+            Collection<LocalizedString> errors = 
field.getDataType().validate(value, null, field);
+
+            if (valid) {
+                assertEquals(toString() + " is valid, but: " + errors, 0, 
errors.size());
+            } else {
+                assertTrue(toString() + " is not valid, but no error", 
errors.size() > 0);
+            }
+        } catch (AssertionError ae) {
+            throw ae;
+        } catch (Throwable t) {
+            throw new RuntimeException(toString() + ":" + t.getMessage(), t);
+        }
+    }
+
+    @Override
+    public String toString() {
+        return fieldName + ":" + value + "(" + (valid ? "valid" : "invalid") + 
")";
+    }
+
+
+
+
+}

_______________________________________________
Cvs mailing list
Cvs@lists.mmbase.org
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to