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    }