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 * https://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.beanutils2.sql.converters;
19
20 import java.sql.Time;
21 import java.util.Calendar;
22 import java.util.Locale;
23
24 import org.apache.commons.beanutils2.converters.AbstractDateConverterTest;
25 import org.junit.jupiter.api.Test;
26
27 /**
28 * Test Case for the {@link SqlTimeConverter} class.
29 */
30 public class SqlTimeConverterTest extends AbstractDateConverterTest<Time> {
31
32 /**
33 * Gets the expected type
34 *
35 * @return The expected type
36 */
37 @Override
38 protected Class<Time> getExpectedType() {
39 return Time.class;
40 }
41
42 /**
43 * Create the Converter with no default value.
44 *
45 * @return A new Converter
46 */
47 @Override
48 protected SqlTimeConverter makeConverter() {
49 return new SqlTimeConverter();
50 }
51
52 /**
53 * Create the Converter with a default value.
54 *
55 * @param defaultValue The default value
56 * @return A new Converter
57 */
58 @Override
59 protected SqlTimeConverter makeConverter(final Time defaultValue) {
60 return new SqlTimeConverter(defaultValue);
61 }
62
63 /**
64 * Test default String to java.sql.Time conversion
65 */
66 @Override
67 @Test
68 public void testDefaultStringToTypeConvert() {
69 // Create & Configure the Converter
70 final SqlTimeConverter converter = makeConverter();
71 converter.setUseLocaleFormat(false);
72
73 // Valid String --> java.sql.Time Conversion
74 final String testString = "15:36:21";
75 final Object expected = toType(testString, "HH:mm:ss", null);
76 validConversion(converter, expected, testString);
77
78 // Invalid String --> java.sql.Time Conversion
79 invalidConversion(converter, "15:36");
80 }
81
82 /**
83 * Test Date Converter with no default value
84 */
85 @Override
86 @Test
87 public void testLocale() {
88 // Re-set the default Locale to Locale.US
89 final Locale defaultLocale = Locale.getDefault();
90 Locale.setDefault(Locale.US);
91
92 final String pattern = "h:mm a"; // SHORT style time format for US Locale
93
94 // Create & Configure the Converter
95 final SqlTimeConverter converter = makeConverter();
96 converter.setUseLocaleFormat(true);
97
98 // Valid String --> Type Conversion
99 final String testString = "3:06 pm";
100 final Object expected = toType(testString, pattern, null);
101 validConversion(converter, expected, testString);
102
103 // Invalid Conversions
104 invalidConversion(converter, null);
105 invalidConversion(converter, "");
106 invalidConversion(converter, "13:05");
107 invalidConversion(converter, "11:05 p");
108 invalidConversion(converter, "11.05 pm");
109 invalidConversion(converter, Integer.valueOf(2));
110
111 // Test specified Locale
112 converter.setLocale(Locale.UK);
113 invalidConversion(converter, testString); // Test previous value now fails
114 validConversion(converter, expected, "15:06"); // UK Short style is "HH:mm"
115
116 // Restore the default Locale
117 Locale.setDefault(defaultLocale);
118 }
119
120 /**
121 * Convert from a Calendar to the appropriate Date type
122 *
123 * @param value The Calendar value to convert
124 * @return The converted value
125 */
126 @Override
127 protected Time toType(final Calendar value) {
128 return new Time(getTimeInMillis(value));
129 }
130
131 }