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 552123 2007-06-30 09:26:22Z mvdb $
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      /**
71       * Testcase added for BETWIXT-58
72       * @throws Exception
73       */
74      public void testConvertUtilsObjectStringConverter() throws Exception {
75          ConvertUtilsObjectStringConverter converter = new ConvertUtilsObjectStringConverter();
76          assertEquals("", converter.stringToObject(null,null, null, null));
77      }
78      
79      private void commonTestForConvertUtilsConverters(ObjectStringConverter objectStringConverter) {
80          Converter converter = new Converter() {
81              public Object convert(Class type, Object value) {
82                  if ( type == SecurityManager.class) {
83                      return "Life, The Universe And Everything";
84                  }
85                  return "The answer is " + value.toString();
86              }
87          };
88          
89          Long test = new Long(42);
90          
91          ConvertUtils.register( converter, Object.class );
92          ConvertUtils.register( converter, String.class );
93          ConvertUtils.register( converter, SecurityManager.class );
94          
95          String stringFromObject = objectStringConverter.objectToString( null, Object.class, "gooseberry", dummyContext );
96          assertEquals("Null should return empty string", "", stringFromObject);
97          stringFromObject = objectStringConverter.objectToString( test, Object.class, "logonberry", dummyContext );
98          assertEquals("Normal object conversion (1)", "The answer is 42", stringFromObject); 
99  
100         
101         Object objectFromString = objectStringConverter.stringToObject( 
102                         "Forty Two", Object.class, "damsen", dummyContext );
103         assertEquals("Normal object conversion (2)", "The answer is Forty Two", objectFromString); 
104         objectFromString = objectStringConverter.stringToObject( 
105                         "Trillian", SecurityManager.class, "cranberry", dummyContext );
106         assertEquals("Special object conversion", "Life, The Universe And Everything", objectFromString); 
107         
108         ConvertUtils.deregister();
109     }
110     
111     public void testDefaultOSConverter() {
112         ObjectStringConverter converter = new DefaultObjectStringConverter();
113         commonTestForConvertUtilsConverters( converter );
114     }
115     
116     public void testDefaultOSConverterDates() {
117         
118     
119         Converter converter = new Converter() {
120             public Object convert(Class type, Object value) {
121                 return "Arthur Dent";
122             }
123         };
124         
125         ConvertUtils.register( converter, java.sql.Date.class );
126         
127         converter = new Converter() {
128             public Object convert(Class type, Object value) {
129                 return "Ford Prefect";
130             }
131         };
132         
133         ConvertUtils.register( converter, String.class );
134         
135         converter = new Converter() {
136             public Object convert(Class type, Object value) {
137                 return "Marvin";
138             }
139         };
140         
141         ConvertUtils.register( converter, java.util.Date.class );
142     
143         java.util.Date utilNow = new java.util.Date();
144         String nowAsString = utilNow.toString();
145         java.sql.Date sqlNow = new java.sql.Date(System.currentTimeMillis());
146         ObjectStringConverter objectStringConverter = new DefaultObjectStringConverter();
147         
148         String stringFromObject = objectStringConverter.objectToString( 
149                                         utilNow, java.util.Date.class, "blackcurrent", dummyContext );
150         assertEquals( "String output same as java.util.Date.toString() (1)", utilNow.toString(), stringFromObject );
151 
152         stringFromObject = objectStringConverter.objectToString( 
153                                         sqlNow, java.util.Date.class, "redcurrent", dummyContext );      
154         assertEquals( "String output same as java.util.Date.toString() (2)", utilNow.toString(), stringFromObject );
155         
156         stringFromObject = objectStringConverter.objectToString( 
157                                         utilNow, java.sql.Date.class, "whitecurrent", dummyContext );      
158         assertEquals( "Should use converter (2)", "Ford Prefect", stringFromObject ); 
159         
160         Object objectFromString = objectStringConverter.stringToObject( 
161                                         nowAsString, java.sql.Date.class, "blackberry", dummyContext );      
162         assertEquals( "Should use converter (3)", "Ford Prefect", stringFromObject ); 
163         objectFromString = objectStringConverter.stringToObject( 
164                                         nowAsString, java.util.Date.class, "tayberry", dummyContext );      
165         assertTrue( "Date should be returned", objectFromString instanceof java.util.Date); 
166         assertEquals( "Date returned should be the same", nowAsString,  objectFromString.toString()); 
167         
168         ConvertUtils.deregister();
169     }
170 }
171 
172