KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > commons > jxpath > ri > compiler > CoreFunctionTest


1 /*
2  * Copyright 1999-2004 The Apache Software Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package org.apache.commons.jxpath.ri.compiler;
17
18 import java.text.DecimalFormatSymbols JavaDoc;
19
20 import org.apache.commons.jxpath.IdentityManager;
21 import org.apache.commons.jxpath.JXPathContext;
22 import org.apache.commons.jxpath.JXPathTestCase;
23 import org.apache.commons.jxpath.KeyManager;
24 import org.apache.commons.jxpath.Pointer;
25 import org.apache.commons.jxpath.TestMixedModelBean;
26 import org.apache.commons.jxpath.Variables;
27 import org.apache.commons.jxpath.ri.model.NodePointer;
28
29 /**
30  * Test basic functionality of JXPath - core functions.
31  *
32  * @author Dmitri Plotnikov
33  * @version $Revision: 1.10 $ $Date: 2004/05/08 20:07:09 $
34  */

35
36 public class CoreFunctionTest extends JXPathTestCase {
37     private JXPathContext context;
38
39     /**
40      * Construct a new instance of this test case.
41      *
42      * @param name Name of the test case
43      */

44     public CoreFunctionTest(String JavaDoc name) {
45         super(name);
46     }
47
48     public void setUp() {
49         if (context == null) {
50             context = JXPathContext.newContext(new TestMixedModelBean());
51             Variables vars = context.getVariables();
52             vars.declareVariable("nan", new Double JavaDoc(Double.NaN));
53             vars.declareVariable("bool_true", new Boolean JavaDoc("true"));
54             vars.declareVariable("bool_false", new Boolean JavaDoc("false"));
55         }
56     }
57
58     public void testCoreFunctions() {
59         assertXPathValue(context, "string(2)", "2");
60         assertXPathValue(context, "string($nan)", "NaN");
61         assertXPathValue(context, "string(-$nan)", "NaN");
62         assertXPathValue(context, "string(-2 div 0)", "-Infinity");
63         assertXPathValue(context, "string(2 div 0)", "Infinity");
64         assertXPathValue(context, "concat('a', 'b', 'c')", "abc");
65         assertXPathValue(context, "starts-with('abc', 'ab')", Boolean.TRUE);
66         assertXPathValue(context, "starts-with('xabc', 'ab')", Boolean.FALSE);
67         assertXPathValue(context, "contains('xabc', 'ab')", Boolean.TRUE);
68         assertXPathValue(context, "contains('xabc', 'ba')", Boolean.FALSE);
69         assertXPathValue(
70             context,
71             "substring-before('1999/04/01', '/')",
72             "1999");
73         assertXPathValue(
74             context,
75             "substring-after('1999/04/01', '/')",
76             "04/01");
77         assertXPathValue(context, "substring('12345', 2, 3)", "234");
78         assertXPathValue(context, "substring('12345', 2)", "2345");
79         assertXPathValue(context, "substring('12345', 1.5, 2.6)", "234");
80         assertXPathValue(context, "substring('12345', 0, 3)", "12");
81         assertXPathValue(context, "substring('12345', 0 div 0, 3)", "");
82         assertXPathValue(context, "substring('12345', 1, 0 div 0)", "");
83         assertXPathValue(context, "substring('12345', -42, 1 div 0)", "12345");
84         assertXPathValue(context, "substring('12345', -1 div 0, 1 div 0)", "");
85         assertXPathValue(context, "string-length('12345')", new Double JavaDoc(5));
86         assertXPathValue(context, "normalize-space(' abc def ')", "abc def");
87         assertXPathValue(context, "normalize-space('abc def')", "abc def");
88         assertXPathValue(context, "normalize-space(' ')", "");
89         assertXPathValue(context, "translate('--aaa--', 'abc-', 'ABC')", "AAA");
90         assertXPathValue(context, "boolean(1)", Boolean.TRUE);
91         assertXPathValue(context, "boolean(0)", Boolean.FALSE);
92         assertXPathValue(context, "boolean('x')", Boolean.TRUE);
93         assertXPathValue(context, "boolean('')", Boolean.FALSE);
94
95         assertXPathValue(context, "true()", Boolean.TRUE);
96         assertXPathValue(context, "false()", Boolean.FALSE);
97         assertXPathValue(context, "not(false())", Boolean.TRUE);
98         assertXPathValue(context, "not(true())", Boolean.FALSE);
99         assertXPathValue(context, "number('1')", new Double JavaDoc(1));
100         assertXPathValue(context, "number($bool_true)", new Double JavaDoc(1));
101         assertXPathValue(context, "number($bool_false)", new Double JavaDoc(0));
102         assertXPathValue(context, "floor(1.5)", new Double JavaDoc(1));
103         assertXPathValue(context, "floor(-1.5)", new Double JavaDoc(-2));
104         assertXPathValue(context, "ceiling(1.5)", new Double JavaDoc(2));
105         assertXPathValue(context, "ceiling(-1.5)", new Double JavaDoc(-1));
106         assertXPathValue(context, "round(1.5)", new Double JavaDoc(2));
107         assertXPathValue(context, "round(-1.5)", new Double JavaDoc(-1));
108         assertXPathValue(context, "null()", null);
109     }
110
111     public void testIDFunction() {
112         context.setIdentityManager(new IdentityManager() {
113             public Pointer getPointerByID(JXPathContext context, String JavaDoc id) {
114                 NodePointer ptr = (NodePointer) context.getPointer("/document");
115                 ptr = ptr.getValuePointer();
116                 return ptr.getPointerByID(context, id);
117             }
118         });
119
120         assertXPathValueAndPointer(
121             context,
122             "id(101)//street",
123             "Tangerine Drive",
124             "id('101')/address[1]/street[1]");
125
126         assertXPathPointerLenient(
127             context,
128             "id(105)/address/street",
129             "id(105)/address/street");
130     }
131
132     public void testKeyFunction() {
133         context.setKeyManager(new KeyManager() {
134             public Pointer getPointerByKey(
135                 JXPathContext context,
136                 String JavaDoc key,
137                 String JavaDoc value)
138             {
139                 return NodePointer.newNodePointer(null, "42", null);
140             }
141         });
142
143         assertEquals("Test key", "42", context.getValue("key('a', 'b')"));
144     }
145     
146     public void testFormatNumberFunction() {
147         
148         DecimalFormatSymbols JavaDoc symbols = new DecimalFormatSymbols JavaDoc();
149         symbols.setDigit('D');
150         
151         context.setDecimalFormatSymbols("test", symbols);
152         
153         assertXPathValue(
154             context,
155             "format-number(123456789, '#.000000000')",
156             "123456789.000000000");
157
158         assertXPathValue(
159             context,
160             "format-number(123456789, '#.0')",
161             "123456789.0");
162
163         assertXPathValue(
164             context,
165             "format-number(0.123456789, '##%')",
166             "12%");
167
168         assertXPathValue(
169             context,
170             "format-number(123456789, '################')",
171             "123456789");
172
173         assertXPathValue(
174             context,
175             "format-number(123456789, 'D.0', 'test')",
176             "123456789.0");
177
178         assertXPathValue(
179             context,
180             "format-number(123456789, '$DDD,DDD,DDD.DD', 'test')",
181             "$123,456,789");
182     }
183 }
Popular Tags