001 /*
002 * Copyright 2001-2005 Stephen Colebourne
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.joda.time.convert;
017
018 import java.lang.reflect.Constructor;
019 import java.lang.reflect.Modifier;
020 import java.util.Calendar;
021 import java.util.GregorianCalendar;
022
023 import junit.framework.TestCase;
024 import junit.framework.TestSuite;
025
026 import org.joda.time.DateMidnight;
027 import org.joda.time.DateTime;
028 import org.joda.time.ReadWritableDateTime;
029 import org.joda.time.ReadWritableInstant;
030 import org.joda.time.ReadableDateTime;
031 import org.joda.time.ReadableInstant;
032
033 /**
034 * This class is a JUnit test for ConverterSet.
035 * Mostly for coverage.
036 *
037 * @author Stephen Colebourne
038 */
039 public class TestConverterSet extends TestCase {
040
041 private static final Converter c1 = new Converter() {
042 public Class getSupportedType() {return Boolean.class;}
043 };
044 private static final Converter c2 = new Converter() {
045 public Class getSupportedType() {return Character.class;}
046 };
047 private static final Converter c3 = new Converter() {
048 public Class getSupportedType() {return Byte.class;}
049 };
050 private static final Converter c4 = new Converter() {
051 public Class getSupportedType() {return Short.class;}
052 };
053 private static final Converter c4a = new Converter() {
054 public Class getSupportedType() {return Short.class;}
055 };
056 private static final Converter c5 = new Converter() {
057 public Class getSupportedType() {return Integer.class;}
058 };
059
060 public static void main(String[] args) {
061 junit.textui.TestRunner.run(suite());
062 }
063
064 public static TestSuite suite() {
065 return new TestSuite(TestConverterSet.class);
066 }
067
068 public TestConverterSet(String name) {
069 super(name);
070 }
071
072 //-----------------------------------------------------------------------
073 public void testClass() throws Exception {
074 Class cls = ConverterSet.class;
075 assertEquals(false, Modifier.isPublic(cls.getModifiers()));
076 assertEquals(false, Modifier.isProtected(cls.getModifiers()));
077 assertEquals(false, Modifier.isPrivate(cls.getModifiers()));
078
079 assertEquals(1, cls.getDeclaredConstructors().length);
080 Constructor con = cls.getDeclaredConstructors()[0];
081 assertEquals(false, Modifier.isPublic(con.getModifiers()));
082 assertEquals(false, Modifier.isProtected(con.getModifiers()));
083 assertEquals(false, Modifier.isPrivate(con.getModifiers()));
084 }
085
086 //-----------------------------------------------------------------------
087 public void testBigHashtable() {
088 Converter[] array = new Converter[] {
089 c1, c2, c3, c4,
090 };
091 ConverterSet set = new ConverterSet(array);
092 set.select(Boolean.class);
093 set.select(Character.class);
094 set.select(Byte.class);
095 set.select(Short.class);
096 set.select(Integer.class);
097 set.select(Long.class);
098 set.select(Float.class);
099 set.select(Double.class);
100 set.select(null);
101 set.select(Calendar.class);
102 set.select(GregorianCalendar.class);
103 set.select(DateTime.class);
104 set.select(DateMidnight.class);
105 set.select(ReadableInstant.class);
106 set.select(ReadableDateTime.class);
107 set.select(ReadWritableInstant.class); // 16
108 set.select(ReadWritableDateTime.class);
109 set.select(DateTime.class);
110 assertEquals(4, set.size());
111 }
112
113 //-----------------------------------------------------------------------
114 public void testAddNullRemoved1() {
115 Converter[] array = new Converter[] {
116 c1, c2, c3, c4,
117 };
118 ConverterSet set = new ConverterSet(array);
119 ConverterSet result = set.add(c5, null);
120 assertEquals(4, set.size());
121 assertEquals(5, result.size());
122 }
123
124 public void testAddNullRemoved2() {
125 Converter[] array = new Converter[] {
126 c1, c2, c3, c4,
127 };
128 ConverterSet set = new ConverterSet(array);
129 ConverterSet result = set.add(c4, null);
130 assertSame(set, result);
131 }
132
133 public void testAddNullRemoved3() {
134 Converter[] array = new Converter[] {
135 c1, c2, c3, c4,
136 };
137 ConverterSet set = new ConverterSet(array);
138 ConverterSet result = set.add(c4a, null);
139 assertTrue(set != result);
140 assertEquals(4, set.size());
141 assertEquals(4, result.size());
142 }
143
144 //-----------------------------------------------------------------------
145 public void testRemoveNullRemoved1() {
146 Converter[] array = new Converter[] {
147 c1, c2, c3, c4,
148 };
149 ConverterSet set = new ConverterSet(array);
150 ConverterSet result = set.remove(c3, null);
151 assertEquals(4, set.size());
152 assertEquals(3, result.size());
153 }
154
155 public void testRemoveNullRemoved2() {
156 Converter[] array = new Converter[] {
157 c1, c2, c3, c4,
158 };
159 ConverterSet set = new ConverterSet(array);
160 ConverterSet result = set.remove(c5, null);
161 assertSame(set, result);
162 }
163
164 //-----------------------------------------------------------------------
165 public void testRemoveBadIndex1() {
166 Converter[] array = new Converter[] {
167 c1, c2, c3, c4,
168 };
169 ConverterSet set = new ConverterSet(array);
170 try {
171 set.remove(200, null);
172 fail();
173 } catch (IndexOutOfBoundsException ex) {}
174 assertEquals(4, set.size());
175 }
176
177 public void testRemoveBadIndex2() {
178 Converter[] array = new Converter[] {
179 c1, c2, c3, c4,
180 };
181 ConverterSet set = new ConverterSet(array);
182 try {
183 set.remove(-1, null);
184 fail();
185 } catch (IndexOutOfBoundsException ex) {}
186 assertEquals(4, set.size());
187 }
188
189 }