KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > bridge > ErroneousFilledNodeTest


1 /*
2
3 This software is OSI Certified Open Source Software.
4 OSI Certified is a certification mark of the Open Source Initiative.
5
6 The license (Mozilla version 1.0) can be read at the MMBase site.
7 See http://www.MMBase.org/license
8
9 */

10
11 package org.mmbase.bridge;
12
13 import org.mmbase.tests.*;
14 import java.text.*;
15 import java.util.*;
16 import org.w3c.dom.Document JavaDoc;
17
18 import org.mmbase.util.*;
19 import org.mmbase.datatypes.*;
20
21 /**
22  * Like FilledNodeTest but the used builder is oddly configured.
23  *
24  * @author Michiel Meeuwissen
25  * @since MMBase-1.8
26  */

27 public class ErroneousFilledNodeTest extends BridgeTest {
28
29     protected static Object JavaDoc[] cases;
30     static {
31         try {
32             cases = new Object JavaDoc[] {
33                 /* {field {valid values= {invalue, outvalue}, ... } {invalid values}} */
34                 new Object JavaDoc[] {"integerstring", // integer in db. getValue returns an Integer
35
new Object JavaDoc[] {
36                                  new Integer JavaDoc(1232),
37                                  new Entry("1234", new Integer JavaDoc(1234))
38                               },
39                               new Object JavaDoc[] {
40                                   "abac"
41                               }
42                 },
43                 new Object JavaDoc[] {"stringinteger", // string in db. getValue returns a String
44
new Object JavaDoc[] {
45                                   new Entry(new Integer JavaDoc(1232), "1232"),
46                                   "1234"},
47                               new Object JavaDoc[] {
48                                   "abac"
49                               }
50                 },
51                 new Object JavaDoc[] {"floatdouble", // float in db
52
new Object JavaDoc[] {new Float JavaDoc(1232), new Entry("1234", new Float JavaDoc(1234))},
53                               new Object JavaDoc[] {
54                                   "abac"
55                               }
56                 },
57                 new Object JavaDoc[] {"doublefloat", // double in db
58
new Object JavaDoc[] {new Double JavaDoc(1232), new Entry("1234", new Double JavaDoc(1234))},
59                               new Object JavaDoc[] {
60                                   "abac"
61                               }
62                 },
63             };
64         } catch (Exception JavaDoc e) {
65         }
66     }
67
68
69     public ErroneousFilledNodeTest(String JavaDoc name) {
70         super(name);
71     }
72
73     protected String JavaDoc getNodeManager() {
74         return "aaerrors";
75     }
76
77     public void testClasses() {
78         Cloud cloud = getCloud();
79         NodeManager nm = cloud.getNodeManager(getNodeManager());
80         // MM: it's (very) odd, but DataTypes are not necessary of the database type (any more)
81
// so actuallly I think these tests should be the other way around, but at least it should be defined, which of both must happen.
82
assertTrue(nm.getField("stringinteger").getDataType() instanceof IntegerDataType);
83         assertTrue(nm.getField("integerstring").getDataType() instanceof StringDataType); // ah, we can store strings in integers!
84
assertTrue(nm.getField("floatdouble").getDataType() instanceof DoubleDataType);
85         assertTrue(nm.getField("doublefloat").getDataType() instanceof FloatDataType);
86         
87     }
88
89     public void testValues() {
90      
91         Cloud cloud = getCloud();
92         NodeManager nm = cloud.getNodeManager(getNodeManager());
93         List errors = new ArrayList();
94         for (int i = 0 ; i < cases.length; i++) {
95             Object JavaDoc[] kase = (Object JavaDoc[]) cases[i];
96             String JavaDoc fieldName = (String JavaDoc) kase[0];
97             Object JavaDoc[] validValues = (Object JavaDoc[]) kase[1];
98             for (int j = 0; j < validValues.length; j++) {
99                 Object JavaDoc value = validValues[j];
100                 Object JavaDoc inValue;
101                 Object JavaDoc outValue;
102                 if (value instanceof Entry) {
103                     inValue = ((Entry) value).getKey();
104                     outValue = ((Entry) value).getValue();
105                 } else {
106                     inValue = value;
107                     outValue = value;
108                 }
109                 Node newNode = nm.createNode();
110                 newNode.setValue(fieldName, inValue);
111                 newNode.commit();
112                 Object JavaDoc actualOutValue = newNode.getValue(fieldName);
113                 if (outValue == null ? actualOutValue == null : outValue.equals(actualOutValue)) {
114                 } else {
115                     errors.add("Field " + fieldName + " " +
116                                (outValue != null ? " " + outValue.getClass() : "") + outValue + " != " +
117                                (actualOutValue != null ? " " + actualOutValue.getClass() : "") + actualOutValue);
118                 }
119             }
120             Object JavaDoc[] invalidValues = (Object JavaDoc[]) kase[2];
121             for (int k= 0; k < invalidValues.length; k++) {
122                 Object JavaDoc invalidValue = invalidValues[k];
123                 try {
124                     Node newNode = nm.createNode();
125                     newNode.setObjectValue(fieldName, invalidValue);
126                     newNode.commit();
127                     errors.add("Value " + invalidValue + " for field " + fieldName + " was expected to be invalid, but evaluated to " + newNode.getValue(fieldName) + " " + nm.getField(fieldName).getDataType());
128                 } catch (Exception JavaDoc e) {
129                     // ok, threw exception
130
}
131             }
132         }
133         assertTrue("" + errors, errors.size() == 0);
134     }
135
136 }
137
Popular Tags