001: /*
002: * Copyright 1999-2004 The Apache Software Foundation
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016: package org.apache.commons.jxpath.util;
017:
018: import java.lang.reflect.Array;
019: import java.math.BigDecimal;
020: import java.util.ArrayList;
021: import java.util.Arrays;
022: import java.util.Collections;
023: import java.util.Date;
024: import java.util.List;
025:
026: import junit.framework.TestCase;
027:
028: import org.apache.commons.jxpath.NodeSet;
029: import org.apache.commons.jxpath.Pointer;
030:
031: /**
032: * Tests BasicTypeConverter
033: *
034: * @author Dmitri Plotnikov
035: * @version $Revision: 1.7 $ $Date: 2004/06/29 21:50:02 $
036: */
037:
038: public class BasicTypeConverterTest extends TestCase {
039: /**
040: * Construct a new instance of this test case.
041: *
042: * @param name Name of the test case
043: */
044: public BasicTypeConverterTest(String name) {
045: super (name);
046: }
047:
048: public void testPrimitiveToString() {
049: assertConversion(new Integer(1), String.class, "1");
050: }
051:
052: public void testArrayToList() {
053: assertConversion(new int[] { 1, 2 }, List.class,
054: Arrays.asList(new Object[] { new Integer(1),
055: new Integer(2) }));
056: }
057:
058: public void testArrayToArray() {
059: assertConversion(new int[] { 1, 2 }, String[].class, Arrays
060: .asList(new String[] { "1", "2" }));
061: }
062:
063: public void testListToArray() {
064: assertConversion(Arrays.asList(new Integer[] { new Integer(1),
065: new Integer(2) }), String[].class, Arrays
066: .asList(new String[] { "1", "2" }));
067:
068: assertConversion(Arrays.asList(new String[] { "1", "2" }),
069: int[].class, Arrays.asList(new Integer[] {
070: new Integer(1), new Integer(2) }));
071: }
072:
073: public void testInvalidConversion() {
074: boolean exception = false;
075: try {
076: TypeUtils.convert("'foo'", Date.class);
077: } catch (Throwable ex) {
078: exception = true;
079: }
080: assertTrue("Type conversion exception", exception);
081: }
082:
083: public void assertConversion(Object from, Class toType,
084: Object expected) {
085: boolean can = TypeUtils.canConvert(from, toType);
086: assertTrue("Can convert: " + from.getClass() + " to " + toType,
087: can);
088: Object result = TypeUtils.convert(from, toType);
089: if (result.getClass().isArray()) {
090: ArrayList list = new ArrayList();
091: for (int j = 0; j < Array.getLength(result); j++) {
092: list.add(Array.get(result, j));
093: }
094: result = list;
095: }
096: assertEquals("Convert: " + from.getClass() + " to " + toType,
097: expected, result);
098: }
099:
100: public void testSingletonCollectionToString() {
101: assertConversion(Collections.singleton("Earth"), String.class,
102: "Earth");
103: }
104:
105: public void testSingletonArrayToString() {
106: assertConversion(new String[] { "Earth" }, String.class,
107: "Earth");
108: }
109:
110: public void testPointerToString() {
111: assertConversion(new Pointer() {
112: public Object getValue() {
113: return "value";
114: }
115:
116: public Object getNode() {
117: return null;
118: }
119:
120: public void setValue(Object value) {
121: }
122:
123: public Object getRootNode() {
124: return null;
125: }
126:
127: public String asPath() {
128: return null;
129: }
130:
131: public Object clone() {
132: return null;
133: }
134:
135: public int compareTo(Object o) {
136: return 0;
137: }
138: }, String.class, "value");
139: }
140:
141: public void testNodeSetToString() {
142: assertConversion(new NodeSet() {
143: public List getNodes() {
144: return null;
145: }
146:
147: public List getPointers() {
148: return null;
149: }
150:
151: public List getValues() {
152: List list = new ArrayList();
153: list.add("hello");
154: list.add("goodbye");
155: return Collections.singletonList(list);
156: }
157: }, String.class, "hello");
158: }
159:
160: // succeeds in current version
161: public void testNodeSetToInteger() {
162: assertConversion(new NodeSet() {
163: public List getNodes() {
164: return null;
165: }
166:
167: public List getPointers() {
168: return null;
169: }
170:
171: public List getValues() {
172: return Collections.singletonList("9");
173: }
174: }, Integer.class, new Integer(9));
175: }
176:
177: public void testBeanUtilsConverter() {
178: assertConversion("12", BigDecimal.class, new BigDecimal(12));
179: }
180: }
|