1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    * 
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */ 
17   
18  package org.apache.commons.betwixt.strategy;
19  
20  import junit.framework.Test;
21  import junit.framework.TestCase;
22  import junit.framework.TestSuite;
23  
24  import org.apache.commons.beanutils.ConvertUtils;
25  import org.apache.commons.beanutils.Converter;
26  import org.apache.commons.betwixt.expression.Context;
27  
28  /***
29   * Test harness for ObjectStringConverter implementations
30   * 
31   * @author <a href="mailto:rdonkin at apache.org">Robert Burrell Donkin</a>
32   * @version $Id: TestObjectStringConverters.java 438373 2006-08-30 05:17:21Z bayard $
33   */
34  public class TestObjectStringConverters extends TestCase
35  {
36  
37      protected Context dummyContext = new Context();
38  
39      public static Test suite() {
40          return new TestSuite(TestObjectStringConverters.class);
41      }
42      
43      public TestObjectStringConverters(String testName) {
44          super(testName);
45      }
46      
47      public void testBaseConverter() {
48          Object test = new Object () {
49              public String toString() {
50                  return "funciporcini";
51              }
52          };
53          
54          ObjectStringConverter converter = new ObjectStringConverter();
55          String stringFromObject = converter.objectToString( null, Object.class, "raspberry", dummyContext );
56          assertEquals("Null should return empty string", "", stringFromObject);
57          stringFromObject = converter.objectToString( test, Object.class, "raspberry", dummyContext );
58          assertEquals("Object should return toString", "funciporcini", stringFromObject);       
59          
60          Object objectFromString = converter.stringToObject( "Mungo Jerry", Object.class, "strawberry", dummyContext );
61          assertEquals("String should return itself", "Mungo Jerry", objectFromString);  
62      }
63      
64      
65      public void testConvertUtilsConverter() throws Exception {
66          ObjectStringConverter converter = new ConvertUtilsObjectStringConverter();
67          commonTestForConvertUtilsConverters( converter );
68      }
69      
70      private void commonTestForConvertUtilsConverters(ObjectStringConverter objectStringConverter) {
71          Converter converter = new Converter() {
72              public Object convert(Class type, Object value) {
73                  if ( type == SecurityManager.class) {
74                      return "Life, The Universe And Everything";
75                  }
76                  return "The answer is " + value.toString();
77              }
78          };
79          
80          Long test = new Long(42);
81          
82          ConvertUtils.register( converter, Object.class );
83          ConvertUtils.register( converter, String.class );
84          ConvertUtils.register( converter, SecurityManager.class );
85          
86          String stringFromObject = objectStringConverter.objectToString( null, Object.class, "gooseberry", dummyContext );
87          assertEquals("Null should return empty string", "", stringFromObject);
88          stringFromObject = objectStringConverter.objectToString( test, Object.class, "logonberry", dummyContext );
89          assertEquals("Normal object conversion (1)", "The answer is 42", stringFromObject); 
90  
91          
92          Object objectFromString = objectStringConverter.stringToObject( 
93                          "Forty Two", Object.class, "damsen", dummyContext );
94          assertEquals("Normal object conversion (2)", "The answer is Forty Two", objectFromString); 
95          objectFromString = objectStringConverter.stringToObject( 
96                          "Trillian", SecurityManager.class, "cranberry", dummyContext );
97          assertEquals("Special object conversion", "Life, The Universe And Everything", objectFromString); 
98          
99          ConvertUtils.deregister();
100     }
101     
102     public void testDefaultOSConverter() {
103         ObjectStringConverter converter = new DefaultObjectStringConverter();
104         commonTestForConvertUtilsConverters( converter );
105     }
106     
107     public void testDefaultOSConverterDates() {
108         
109     
110         Converter converter = new Converter() {
111             public Object convert(Class type, Object value) {
112                 return "Arthur Dent";
113             }
114         };
115         
116         ConvertUtils.register( converter, java.sql.Date.class );
117         
118         converter = new Converter() {
119             public Object convert(Class type, Object value) {
120                 return "Ford Prefect";
121             }
122         };
123         
124         ConvertUtils.register( converter, String.class );
125         
126         converter = new Converter() {
127             public Object convert(Class type, Object value) {
128                 return "Marvin";
129             }
130         };
131         
132         ConvertUtils.register( converter, java.util.Date.class );
133     
134         java.util.Date utilNow = new java.util.Date();
135         String nowAsString = utilNow.toString();
136         java.sql.Date sqlNow = new java.sql.Date(System.currentTimeMillis());
137         ObjectStringConverter objectStringConverter = new DefaultObjectStringConverter();
138         
139         String stringFromObject = objectStringConverter.objectToString( 
140                                         utilNow, java.util.Date.class, "blackcurrent", dummyContext );
141         assertEquals( "String output same as java.util.Date.toString() (1)", utilNow.toString(), stringFromObject );
142 
143         stringFromObject = objectStringConverter.objectToString( 
144                                         sqlNow, java.util.Date.class, "redcurrent", dummyContext );      
145         assertEquals( "String output same as java.util.Date.toString() (2)", utilNow.toString(), stringFromObject );
146         
147         stringFromObject = objectStringConverter.objectToString( 
148                                         utilNow, java.sql.Date.class, "whitecurrent", dummyContext );      
149         assertEquals( "Should use converter (2)", "Ford Prefect", stringFromObject ); 
150         
151         Object objectFromString = objectStringConverter.stringToObject( 
152                                         nowAsString, java.sql.Date.class, "blackberry", dummyContext );      
153         assertEquals( "Should use converter (3)", "Ford Prefect", stringFromObject ); 
154         objectFromString = objectStringConverter.stringToObject( 
155                                         nowAsString, java.util.Date.class, "tayberry", dummyContext );      
156         assertTrue( "Date should be returned", objectFromString instanceof java.util.Date); 
157         assertEquals( "Date returned should be the same", nowAsString,  objectFromString.toString()); 
158         
159         ConvertUtils.deregister();
160     }
161 }
162 
163