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 }