001 /* 002 * Copyright 2001-2009 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.field; 017 018 import java.io.ByteArrayInputStream; 019 import java.io.ByteArrayOutputStream; 020 import java.io.ObjectInputStream; 021 import java.io.ObjectOutputStream; 022 023 import junit.framework.TestCase; 024 import junit.framework.TestSuite; 025 026 import org.joda.time.DurationField; 027 import org.joda.time.DurationFieldType; 028 import org.joda.time.chrono.ISOChronology; 029 030 /** 031 * This class is a Junit unit test for PreciseDurationField. 032 * 033 * @author Stephen Colebourne 034 */ 035 public class TestScaledDurationField extends TestCase { 036 037 private static final long LONG_INTEGER_MAX = Integer.MAX_VALUE; 038 private static final int INTEGER_MAX = Integer.MAX_VALUE; 039 private static final long LONG_MAX = Long.MAX_VALUE; 040 041 private ScaledDurationField iField; 042 043 public static void main(String[] args) { 044 junit.textui.TestRunner.run(suite()); 045 } 046 047 public static TestSuite suite() { 048 return new TestSuite(TestScaledDurationField.class); 049 } 050 051 public TestScaledDurationField(String name) { 052 super(name); 053 } 054 055 protected void setUp() throws Exception { 056 DurationField base = MillisDurationField.INSTANCE; 057 iField = new ScaledDurationField(base, DurationFieldType.minutes(), 90); 058 } 059 060 protected void tearDown() throws Exception { 061 iField = null; 062 } 063 064 //----------------------------------------------------------------------- 065 public void test_constructor() { 066 try { 067 new ScaledDurationField(null, DurationFieldType.minutes(), 10); 068 fail(); 069 } catch (IllegalArgumentException ex) {} 070 try { 071 new ScaledDurationField(MillisDurationField.INSTANCE, null, 10); 072 fail(); 073 } catch (IllegalArgumentException ex) {} 074 try { 075 new ScaledDurationField(MillisDurationField.INSTANCE, DurationFieldType.minutes(), 0); 076 fail(); 077 } catch (IllegalArgumentException ex) {} 078 try { 079 new ScaledDurationField(MillisDurationField.INSTANCE, DurationFieldType.minutes(), 1); 080 fail(); 081 } catch (IllegalArgumentException ex) {} 082 } 083 084 public void test_getScalar() { 085 assertEquals(90, iField.getScalar()); 086 } 087 088 //----------------------------------------------------------------------- 089 public void test_getType() { 090 assertEquals(DurationFieldType.minutes(), iField.getType()); 091 } 092 093 public void test_getName() { 094 assertEquals("minutes", iField.getName()); 095 } 096 097 public void test_isSupported() { 098 assertEquals(true, iField.isSupported()); 099 } 100 101 public void test_isPrecise() { 102 assertEquals(true, iField.isPrecise()); 103 } 104 105 public void test_getUnitMillis() { 106 assertEquals(90, iField.getUnitMillis()); 107 } 108 109 public void test_toString() { 110 assertEquals("DurationField[minutes]", iField.toString()); 111 } 112 113 //----------------------------------------------------------------------- 114 public void test_getValue_long() { 115 assertEquals(0, iField.getValue(0L)); 116 assertEquals(12345678 / 90, iField.getValue(12345678L)); 117 assertEquals(-1234 / 90, iField.getValue(-1234L)); 118 assertEquals(INTEGER_MAX / 90, iField.getValue(LONG_INTEGER_MAX)); 119 try { 120 iField.getValue(LONG_INTEGER_MAX + 1L); 121 fail(); 122 } catch (ArithmeticException ex) {} 123 } 124 125 public void test_getValueAsLong_long() { 126 assertEquals(0L, iField.getValueAsLong(0L)); 127 assertEquals(12345678L / 90, iField.getValueAsLong(12345678L)); 128 assertEquals(-1234 / 90L, iField.getValueAsLong(-1234L)); 129 assertEquals(LONG_INTEGER_MAX + 1L, iField.getValueAsLong(LONG_INTEGER_MAX * 90L + 90L)); 130 } 131 132 public void test_getValue_long_long() { 133 assertEquals(0, iField.getValue(0L, 567L)); 134 assertEquals(12345678 / 90, iField.getValue(12345678L, 567L)); 135 assertEquals(-1234 / 90, iField.getValue(-1234L, 567L)); 136 assertEquals(INTEGER_MAX / 90, iField.getValue(LONG_INTEGER_MAX, 567L)); 137 try { 138 iField.getValue(LONG_INTEGER_MAX + 1L, 567L); 139 fail(); 140 } catch (ArithmeticException ex) {} 141 } 142 143 public void test_getValueAsLong_long_long() { 144 assertEquals(0L, iField.getValueAsLong(0L, 567L)); 145 assertEquals(12345678 / 90L, iField.getValueAsLong(12345678L, 567L)); 146 assertEquals(-1234 / 90L, iField.getValueAsLong(-1234L, 567L)); 147 assertEquals(LONG_INTEGER_MAX + 1L, iField.getValueAsLong(LONG_INTEGER_MAX * 90L + 90L, 567L)); 148 } 149 150 //----------------------------------------------------------------------- 151 public void test_getMillis_int() { 152 assertEquals(0, iField.getMillis(0)); 153 assertEquals(1234L * 90L, iField.getMillis(1234)); 154 assertEquals(-1234L * 90L, iField.getMillis(-1234)); 155 assertEquals(LONG_INTEGER_MAX * 90L, iField.getMillis(INTEGER_MAX)); 156 } 157 158 public void test_getMillis_long() { 159 assertEquals(0L, iField.getMillis(0L)); 160 assertEquals(1234L * 90L, iField.getMillis(1234L)); 161 assertEquals(-1234L * 90L, iField.getMillis(-1234L)); 162 try { 163 iField.getMillis(LONG_MAX); 164 fail(); 165 } catch (ArithmeticException ex) {} 166 } 167 168 public void test_getMillis_int_long() { 169 assertEquals(0L, iField.getMillis(0, 567L)); 170 assertEquals(1234L * 90L, iField.getMillis(1234, 567L)); 171 assertEquals(-1234L * 90L, iField.getMillis(-1234, 567L)); 172 assertEquals(LONG_INTEGER_MAX * 90L, iField.getMillis(INTEGER_MAX, 567L)); 173 } 174 175 public void test_getMillis_long_long() { 176 assertEquals(0L, iField.getMillis(0L, 567L)); 177 assertEquals(1234L * 90L, iField.getMillis(1234L, 567L)); 178 assertEquals(-1234L * 90L, iField.getMillis(-1234L, 567L)); 179 try { 180 iField.getMillis(LONG_MAX, 567L); 181 fail(); 182 } catch (ArithmeticException ex) {} 183 } 184 185 //----------------------------------------------------------------------- 186 public void test_add_long_int() { 187 assertEquals(567L, iField.add(567L, 0)); 188 assertEquals(567L + 1234L * 90L, iField.add(567L, 1234)); 189 assertEquals(567L - 1234L * 90L, iField.add(567L, -1234)); 190 try { 191 iField.add(LONG_MAX, 1); 192 fail(); 193 } catch (ArithmeticException ex) {} 194 } 195 196 public void test_add_long_long() { 197 assertEquals(567L, iField.add(567L, 0L)); 198 assertEquals(567L + 1234L * 90L, iField.add(567L, 1234L)); 199 assertEquals(567L - 1234L * 90L, iField.add(567L, -1234L)); 200 try { 201 iField.add(LONG_MAX, 1L); 202 fail(); 203 } catch (ArithmeticException ex) {} 204 try { 205 iField.add(1L, LONG_MAX); 206 fail(); 207 } catch (ArithmeticException ex) {} 208 } 209 210 //----------------------------------------------------------------------- 211 public void test_getDifference_long_int() { 212 assertEquals(0, iField.getDifference(1L, 0L)); 213 assertEquals(567, iField.getDifference(567L * 90L, 0L)); 214 assertEquals(567 - 1234, iField.getDifference(567L * 90L, 1234L * 90L)); 215 assertEquals(567 + 1234, iField.getDifference(567L * 90L, -1234L * 90L)); 216 try { 217 iField.getDifference(LONG_MAX, -1L); 218 fail(); 219 } catch (ArithmeticException ex) {} 220 } 221 222 public void test_getDifferenceAsLong_long_long() { 223 assertEquals(0L, iField.getDifferenceAsLong(1L, 0L)); 224 assertEquals(567L, iField.getDifferenceAsLong(567L * 90L, 0L)); 225 assertEquals(567L - 1234L, iField.getDifferenceAsLong(567L * 90L, 1234L * 90L)); 226 assertEquals(567L + 1234L, iField.getDifferenceAsLong(567L * 90L, -1234L * 90L)); 227 try { 228 iField.getDifferenceAsLong(LONG_MAX, -1L); 229 fail(); 230 } catch (ArithmeticException ex) {} 231 } 232 233 //----------------------------------------------------------------------- 234 public void test_equals() { 235 assertEquals(true, iField.equals(iField)); 236 assertEquals(false, iField.equals(ISOChronology.getInstance().minutes())); 237 DurationField dummy = new ScaledDurationField(MillisDurationField.INSTANCE, DurationFieldType.minutes(), 2); 238 assertEquals(false, iField.equals(dummy)); 239 dummy = new ScaledDurationField(MillisDurationField.INSTANCE, DurationFieldType.minutes(), 90); 240 assertEquals(true, iField.equals(dummy)); 241 dummy = new ScaledDurationField(MillisDurationField.INSTANCE, DurationFieldType.millis(), 90); 242 assertEquals(false, iField.equals(dummy)); 243 assertEquals(false, iField.equals("")); 244 assertEquals(false, iField.equals(null)); 245 } 246 247 public void test_hashCode() { 248 assertEquals(iField.hashCode(), iField.hashCode()); 249 assertEquals(false, iField.hashCode() == ISOChronology.getInstance().minutes().hashCode()); 250 DurationField dummy = new ScaledDurationField(MillisDurationField.INSTANCE, DurationFieldType.minutes(), 2); 251 assertEquals(false, iField.hashCode() == dummy.hashCode()); 252 dummy = new ScaledDurationField(MillisDurationField.INSTANCE, DurationFieldType.minutes(), 90); 253 assertEquals(true, iField.hashCode() == dummy.hashCode()); 254 dummy = new ScaledDurationField(MillisDurationField.INSTANCE, DurationFieldType.millis(), 90); 255 assertEquals(false, iField.hashCode() == dummy.hashCode()); 256 } 257 258 //----------------------------------------------------------------------- 259 public void test_compareTo() { 260 assertEquals(0, iField.compareTo(iField)); 261 assertEquals(-1, iField.compareTo(ISOChronology.getInstance().minutes())); 262 DurationField dummy = new PreciseDurationField(DurationFieldType.minutes(), 0); 263 assertEquals(1, iField.compareTo(dummy)); 264 // try { 265 // iField.compareTo(""); 266 // fail(); 267 // } catch (ClassCastException ex) {} 268 try { 269 iField.compareTo(null); 270 fail(); 271 } catch (NullPointerException ex) {} 272 } 273 274 //----------------------------------------------------------------------- 275 public void testSerialization() throws Exception { 276 DurationField test = iField; 277 278 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 279 ObjectOutputStream oos = new ObjectOutputStream(baos); 280 oos.writeObject(test); 281 byte[] bytes = baos.toByteArray(); 282 oos.close(); 283 284 ByteArrayInputStream bais = new ByteArrayInputStream(bytes); 285 ObjectInputStream ois = new ObjectInputStream(bais); 286 DurationField result = (DurationField) ois.readObject(); 287 ois.close(); 288 289 assertEquals(test, result); 290 } 291 292 }