1   /*
2    * Copyright 2001-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   
17  package org.apache.commons.betwixt.strategy;
18  
19  import junit.framework.Test;
20  import junit.framework.TestCase;
21  import junit.framework.TestSuite;
22  
23  import org.apache.commons.beanutils.ConvertUtils;
24  import org.apache.commons.beanutils.Converter;
25  import org.apache.commons.betwixt.expression.Context;
26  
27  /***
28   * Test harness for ObjectStringConverter implementations
29   * 
30   * @author <a href="mailto:rdonkin at apache.org">Robert Burrell Donkin</a>
31   * @version $Id: TestObjectStringConverters.java 155402 2005-02-26 12:52:00Z dirkv $
32   */
33  public class TestObjectStringConverters extends TestCase
34  {
35  
36      protected Context dummyContext = new Context();
37  
38      public static Test suite() {
39          return new TestSuite(TestObjectStringConverters.class);
40      }
41      
42      public TestObjectStringConverters(String testName) {
43          super(testName);
44      }
45      
46      public void testBaseConverter() {
47          Object test = new Object () {
48              public String toString() {
49                  return "funciporcini";
50              }
51          };
52          
53          ObjectStringConverter converter = new ObjectStringConverter();
54          String stringFromObject = converter.objectToString( null, Object.class, "raspberry", dummyContext );
55          assertEquals("Null should return empty string", "", stringFromObject);
56          stringFromObject = converter.objectToString( test, Object.class, "raspberry", dummyContext );
57          assertEquals("Object should return toString", "funciporcini", stringFromObject);       
58          
59          Object objectFromString = converter.stringToObject( "Mungo Jerry", Object.class, "strawberry", dummyContext );
60          assertEquals("String should return itself", "Mungo Jerry", objectFromString);  
61      }
62      
63      
64      public void testConvertUtilsConverter() throws Exception {
65          ObjectStringConverter converter = new ConvertUtilsObjectStringConverter();
66          commonTestForConvertUtilsConverters( converter );
67      }
68      
69      private void commonTestForConvertUtilsConverters(ObjectStringConverter objectStringConverter) {
70          Converter converter = new Converter() {
71              public Object convert(Class type, Object value) {
72                  if ( type == SecurityManager.class) {
73                      return "Life, The Universe And Everything";
74                  }
75                  return "The answer is " + value.toString();
76              }
77          };
78          
79          Long test = new Long(42);
80          
81          ConvertUtils.register( converter, Object.class );
82          ConvertUtils.register( converter, String.class );
83          ConvertUtils.register( converter, SecurityManager.class );
84          
85          String stringFromObject = objectStringConverter.objectToString( null, Object.class, "gooseberry", dummyContext );
86          assertEquals("Null should return empty string", "", stringFromObject);
87          stringFromObject = objectStringConverter.objectToString( test, Object.class, "logonberry", dummyContext );
88          assertEquals("Normal object conversion (1)", "The answer is 42", stringFromObject); 
89  
90          
91          Object objectFromString = objectStringConverter.stringToObject( 
92                          "Forty Two", Object.class, "damsen", dummyContext );
93          assertEquals("Normal object conversion (2)", "The answer is Forty Two", objectFromString); 
94          objectFromString = objectStringConverter.stringToObject( 
95                          "Trillian", SecurityManager.class, "cranberry", dummyContext );
96          assertEquals("Special object conversion", "Life, The Universe And Everything", objectFromString); 
97          
98          ConvertUtils.deregister();
99      }
100     
101     public void testDefaultOSConverter() {
102         ObjectStringConverter converter = new DefaultObjectStringConverter();
103         commonTestForConvertUtilsConverters( converter );
104     }
105     
106     public void testDefaultOSConverterDates() {
107         
108     
109         Converter converter = new Converter() {
110             public Object convert(Class type, Object value) {
111                 return "Arthur Dent";
112             }
113         };
114         
115         ConvertUtils.register( converter, java.sql.Date.class );
116         
117         converter = new Converter() {
118             public Object convert(Class type, Object value) {
119                 return "Ford Prefect";
120             }
121         };
122         
123         ConvertUtils.register( converter, String.class );
124         
125         converter = new Converter() {
126             public Object convert(Class type, Object value) {
127                 return "Marvin";
128             }
129         };
130         
131         ConvertUtils.register( converter, java.util.Date.class );
132     
133         java.util.Date utilNow = new java.util.Date();
134         String nowAsString = utilNow.toString();
135         java.sql.Date sqlNow = new java.sql.Date(System.currentTimeMillis());
136         ObjectStringConverter objectStringConverter = new DefaultObjectStringConverter();
137         
138         String stringFromObject = objectStringConverter.objectToString( 
139                                         utilNow, java.util.Date.class, "blackcurrent", dummyContext );
140         assertEquals( "String output same as java.util.Date.toString() (1)", utilNow.toString(), stringFromObject );
141 
142         stringFromObject = objectStringConverter.objectToString( 
143                                         sqlNow, java.util.Date.class, "redcurrent", dummyContext );      
144         assertEquals( "String output same as java.util.Date.toString() (2)", utilNow.toString(), stringFromObject );
145         
146         stringFromObject = objectStringConverter.objectToString( 
147                                         utilNow, java.sql.Date.class, "whitecurrent", dummyContext );      
148         assertEquals( "Should use converter (2)", "Ford Prefect", stringFromObject ); 
149         
150         Object objectFromString = objectStringConverter.stringToObject( 
151                                         nowAsString, java.sql.Date.class, "blackberry", dummyContext );      
152         assertEquals( "Should use converter (3)", "Ford Prefect", stringFromObject ); 
153         objectFromString = objectStringConverter.stringToObject( 
154                                         nowAsString, java.util.Date.class, "tayberry", dummyContext );      
155         assertTrue( "Date should be returned", objectFromString instanceof java.util.Date); 
156         assertEquals( "Date returned should be the same", nowAsString,  objectFromString.toString()); 
157         
158         ConvertUtils.deregister();
159     }
160 }
161 
162