001 /* 002 * Copyright 2001-2010 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; 017 018 import java.util.Locale; 019 020 import junit.framework.TestCase; 021 import junit.framework.TestSuite; 022 023 import org.joda.time.chrono.CopticChronology; 024 import org.joda.time.chrono.LenientChronology; 025 import org.joda.time.chrono.StrictChronology; 026 027 /** 028 * This class is a Junit unit test for YearMonth. 029 * 030 * @author Stephen Colebourne 031 */ 032 public class TestYearMonth_Properties extends TestCase { 033 034 private static final DateTimeZone PARIS = DateTimeZone.forID("Europe/Paris"); 035 private static final Chronology COPTIC_PARIS = CopticChronology.getInstance(PARIS); 036 037 private long TEST_TIME_NOW = 038 (31L + 28L + 31L + 30L + 31L + 9L -1L) * DateTimeConstants.MILLIS_PER_DAY; 039 040 private long TEST_TIME1 = 041 (31L + 28L + 31L + 6L -1L) * DateTimeConstants.MILLIS_PER_DAY 042 + 12L * DateTimeConstants.MILLIS_PER_HOUR 043 + 24L * DateTimeConstants.MILLIS_PER_MINUTE; 044 045 private long TEST_TIME2 = 046 (365L + 31L + 28L + 31L + 30L + 7L -1L) * DateTimeConstants.MILLIS_PER_DAY 047 + 14L * DateTimeConstants.MILLIS_PER_HOUR 048 + 28L * DateTimeConstants.MILLIS_PER_MINUTE; 049 050 private DateTimeZone zone = null; 051 052 private Locale systemDefaultLocale = null; 053 054 public static void main(String[] args) { 055 junit.textui.TestRunner.run(suite()); 056 } 057 058 public static TestSuite suite() { 059 return new TestSuite(TestYearMonth_Properties.class); 060 } 061 062 public TestYearMonth_Properties(String name) { 063 super(name); 064 } 065 066 protected void setUp() throws Exception { 067 DateTimeUtils.setCurrentMillisFixed(TEST_TIME_NOW); 068 zone = DateTimeZone.getDefault(); 069 DateTimeZone.setDefault(DateTimeZone.UTC); 070 systemDefaultLocale = Locale.getDefault(); 071 Locale.setDefault(Locale.ENGLISH); 072 } 073 074 protected void tearDown() throws Exception { 075 DateTimeUtils.setCurrentMillisSystem(); 076 DateTimeZone.setDefault(zone); 077 zone = null; 078 Locale.setDefault(systemDefaultLocale); 079 systemDefaultLocale = null; 080 } 081 082 //----------------------------------------------------------------------- 083 public void testPropertyGetYear() { 084 YearMonth test = new YearMonth(1972, 6); 085 assertSame(test.getChronology().year(), test.year().getField()); 086 assertEquals("year", test.year().getName()); 087 assertEquals("Property[year]", test.year().toString()); 088 assertSame(test, test.year().getReadablePartial()); 089 assertSame(test, test.year().getYearMonth()); 090 assertEquals(1972, test.year().get()); 091 assertEquals("1972", test.year().getAsString()); 092 assertEquals("1972", test.year().getAsText()); 093 assertEquals("1972", test.year().getAsText(Locale.FRENCH)); 094 assertEquals("1972", test.year().getAsShortText()); 095 assertEquals("1972", test.year().getAsShortText(Locale.FRENCH)); 096 assertEquals(test.getChronology().years(), test.year().getDurationField()); 097 assertEquals(null, test.year().getRangeDurationField()); 098 assertEquals(9, test.year().getMaximumTextLength(null)); 099 assertEquals(9, test.year().getMaximumShortTextLength(null)); 100 } 101 102 public void testPropertyGetMaxMinValuesYear() { 103 YearMonth test = new YearMonth(1972, 6); 104 assertEquals(-292275054, test.year().getMinimumValue()); 105 assertEquals(-292275054, test.year().getMinimumValueOverall()); 106 assertEquals(292278993, test.year().getMaximumValue()); 107 assertEquals(292278993, test.year().getMaximumValueOverall()); 108 } 109 110 public void testPropertyAddYear() { 111 YearMonth test = new YearMonth(1972, 6); 112 YearMonth copy = test.year().addToCopy(9); 113 check(test, 1972, 6); 114 check(copy, 1981, 6); 115 116 copy = test.year().addToCopy(0); 117 check(copy, 1972, 6); 118 119 copy = test.year().addToCopy(292277023 - 1972); 120 check(copy, 292277023, 6); 121 122 try { 123 test.year().addToCopy(292278993 - 1972 + 1); 124 fail(); 125 } catch (IllegalArgumentException ex) {} 126 check(test, 1972, 6); 127 128 copy = test.year().addToCopy(-1972); 129 check(copy, 0, 6); 130 131 copy = test.year().addToCopy(-1973); 132 check(copy, -1, 6); 133 134 try { 135 test.year().addToCopy(-292275054 - 1972 - 1); 136 fail(); 137 } catch (IllegalArgumentException ex) {} 138 check(test, 1972, 6); 139 } 140 141 public void testPropertyAddWrapFieldYear() { 142 YearMonth test = new YearMonth(1972, 6); 143 YearMonth copy = test.year().addWrapFieldToCopy(9); 144 check(test, 1972, 6); 145 check(copy, 1981, 6); 146 147 copy = test.year().addWrapFieldToCopy(0); 148 check(copy, 1972, 6); 149 150 copy = test.year().addWrapFieldToCopy(292278993 - 1972 + 1); 151 check(copy, -292275054, 6); 152 153 copy = test.year().addWrapFieldToCopy(-292275054 - 1972 - 1); 154 check(copy, 292278993, 6); 155 } 156 157 public void testPropertySetYear() { 158 YearMonth test = new YearMonth(1972, 6); 159 YearMonth copy = test.year().setCopy(12); 160 check(test, 1972, 6); 161 check(copy, 12, 6); 162 } 163 164 public void testPropertySetTextYear() { 165 YearMonth test = new YearMonth(1972, 6); 166 YearMonth copy = test.year().setCopy("12"); 167 check(test, 1972, 6); 168 check(copy, 12, 6); 169 } 170 171 public void testPropertyCompareToYear() { 172 YearMonth test1 = new YearMonth(TEST_TIME1); 173 YearMonth test2 = new YearMonth(TEST_TIME2); 174 assertEquals(true, test1.year().compareTo(test2) < 0); 175 assertEquals(true, test2.year().compareTo(test1) > 0); 176 assertEquals(true, test1.year().compareTo(test1) == 0); 177 try { 178 test1.year().compareTo((ReadablePartial) null); 179 fail(); 180 } catch (IllegalArgumentException ex) {} 181 182 DateTime dt1 = new DateTime(TEST_TIME1); 183 DateTime dt2 = new DateTime(TEST_TIME2); 184 assertEquals(true, test1.year().compareTo(dt2) < 0); 185 assertEquals(true, test2.year().compareTo(dt1) > 0); 186 assertEquals(true, test1.year().compareTo(dt1) == 0); 187 try { 188 test1.year().compareTo((ReadableInstant) null); 189 fail(); 190 } catch (IllegalArgumentException ex) {} 191 } 192 193 //----------------------------------------------------------------------- 194 public void testPropertyGetMonth() { 195 YearMonth test = new YearMonth(1972, 6); 196 assertSame(test.getChronology().monthOfYear(), test.monthOfYear().getField()); 197 assertEquals("monthOfYear", test.monthOfYear().getName()); 198 assertEquals("Property[monthOfYear]", test.monthOfYear().toString()); 199 assertSame(test, test.monthOfYear().getReadablePartial()); 200 assertSame(test, test.monthOfYear().getYearMonth()); 201 assertEquals(6, test.monthOfYear().get()); 202 assertEquals("6", test.monthOfYear().getAsString()); 203 assertEquals("June", test.monthOfYear().getAsText()); 204 assertEquals("juin", test.monthOfYear().getAsText(Locale.FRENCH)); 205 assertEquals("Jun", test.monthOfYear().getAsShortText()); 206 assertEquals("juin", test.monthOfYear().getAsShortText(Locale.FRENCH)); 207 assertEquals(test.getChronology().months(), test.monthOfYear().getDurationField()); 208 assertEquals(test.getChronology().years(), test.monthOfYear().getRangeDurationField()); 209 assertEquals(9, test.monthOfYear().getMaximumTextLength(null)); 210 assertEquals(3, test.monthOfYear().getMaximumShortTextLength(null)); 211 test = new YearMonth(1972, 7); 212 assertEquals("juillet", test.monthOfYear().getAsText(Locale.FRENCH)); 213 assertEquals("juil.", test.monthOfYear().getAsShortText(Locale.FRENCH)); 214 } 215 216 public void testPropertyGetMaxMinValuesMonth() { 217 YearMonth test = new YearMonth(1972, 6); 218 assertEquals(1, test.monthOfYear().getMinimumValue()); 219 assertEquals(1, test.monthOfYear().getMinimumValueOverall()); 220 assertEquals(12, test.monthOfYear().getMaximumValue()); 221 assertEquals(12, test.monthOfYear().getMaximumValueOverall()); 222 } 223 224 public void testPropertyAddMonth() { 225 YearMonth test = new YearMonth(1972, 6); 226 YearMonth copy = test.monthOfYear().addToCopy(6); 227 check(test, 1972, 6); 228 check(copy, 1972, 12); 229 230 copy = test.monthOfYear().addToCopy(7); 231 check(copy, 1973, 1); 232 233 copy = test.monthOfYear().addToCopy(-5); 234 check(copy, 1972, 1); 235 236 copy = test.monthOfYear().addToCopy(-6); 237 check(copy, 1971, 12); 238 } 239 240 public void testPropertyAddWrapFieldMonth() { 241 YearMonth test = new YearMonth(1972, 6); 242 YearMonth copy = test.monthOfYear().addWrapFieldToCopy(4); 243 check(test, 1972, 6); 244 check(copy, 1972, 10); 245 246 copy = test.monthOfYear().addWrapFieldToCopy(8); 247 check(copy, 1972, 2); 248 249 copy = test.monthOfYear().addWrapFieldToCopy(-8); 250 check(copy, 1972, 10); 251 } 252 253 public void testPropertySetMonth() { 254 YearMonth test = new YearMonth(1972, 6); 255 YearMonth copy = test.monthOfYear().setCopy(12); 256 check(test, 1972, 6); 257 check(copy, 1972, 12); 258 259 try { 260 test.monthOfYear().setCopy(13); 261 fail(); 262 } catch (IllegalArgumentException ex) {} 263 try { 264 test.monthOfYear().setCopy(0); 265 fail(); 266 } catch (IllegalArgumentException ex) {} 267 } 268 269 public void testPropertySetTextMonth() { 270 YearMonth test = new YearMonth(1972, 6); 271 YearMonth copy = test.monthOfYear().setCopy("12"); 272 check(test, 1972, 6); 273 check(copy, 1972, 12); 274 275 copy = test.monthOfYear().setCopy("December"); 276 check(test, 1972, 6); 277 check(copy, 1972, 12); 278 279 copy = test.monthOfYear().setCopy("Dec"); 280 check(test, 1972, 6); 281 check(copy, 1972, 12); 282 } 283 284 public void testPropertyCompareToMonth() { 285 YearMonth test1 = new YearMonth(TEST_TIME1); 286 YearMonth test2 = new YearMonth(TEST_TIME2); 287 assertEquals(true, test1.monthOfYear().compareTo(test2) < 0); 288 assertEquals(true, test2.monthOfYear().compareTo(test1) > 0); 289 assertEquals(true, test1.monthOfYear().compareTo(test1) == 0); 290 try { 291 test1.monthOfYear().compareTo((ReadablePartial) null); 292 fail(); 293 } catch (IllegalArgumentException ex) {} 294 295 DateTime dt1 = new DateTime(TEST_TIME1); 296 DateTime dt2 = new DateTime(TEST_TIME2); 297 assertEquals(true, test1.monthOfYear().compareTo(dt2) < 0); 298 assertEquals(true, test2.monthOfYear().compareTo(dt1) > 0); 299 assertEquals(true, test1.monthOfYear().compareTo(dt1) == 0); 300 try { 301 test1.monthOfYear().compareTo((ReadableInstant) null); 302 fail(); 303 } catch (IllegalArgumentException ex) {} 304 } 305 306 //----------------------------------------------------------------------- 307 public void testPropertyEquals() { 308 YearMonth test1 = new YearMonth(11, 11); 309 YearMonth test2 = new YearMonth(11, 12); 310 YearMonth test3 = new YearMonth(11, 11, CopticChronology.getInstanceUTC()); 311 assertEquals(true, test1.monthOfYear().equals(test1.monthOfYear())); 312 assertEquals(false, test1.monthOfYear().equals(test1.year())); 313 assertEquals(false, test1.monthOfYear().equals(test2.monthOfYear())); 314 assertEquals(false, test1.monthOfYear().equals(test2.year())); 315 316 assertEquals(false, test1.year().equals(test1.monthOfYear())); 317 assertEquals(true, test1.year().equals(test1.year())); 318 assertEquals(false, test1.year().equals(test2.monthOfYear())); 319 assertEquals(true, test1.year().equals(test2.year())); 320 321 assertEquals(false, test1.monthOfYear().equals(null)); 322 assertEquals(false, test1.monthOfYear().equals("any")); 323 324 // chrono 325 assertEquals(false, test1.monthOfYear().equals(test3.monthOfYear())); 326 } 327 328 public void testPropertyHashCode() { 329 YearMonth test1 = new YearMonth(2005, 11); 330 YearMonth test2 = new YearMonth(2005, 12); 331 assertEquals(true, test1.monthOfYear().hashCode() == test1.monthOfYear().hashCode()); 332 assertEquals(false, test1.monthOfYear().hashCode() == test2.monthOfYear().hashCode()); 333 assertEquals(true, test1.year().hashCode() == test1.year().hashCode()); 334 assertEquals(true, test1.year().hashCode() == test2.year().hashCode()); 335 } 336 337 public void testPropertyEqualsHashCodeLenient() { 338 YearMonth test1 = new YearMonth(1970, 6, LenientChronology.getInstance(COPTIC_PARIS)); 339 YearMonth test2 = new YearMonth(1970, 6, LenientChronology.getInstance(COPTIC_PARIS)); 340 assertEquals(true, test1.monthOfYear().equals(test2.monthOfYear())); 341 assertEquals(true, test2.monthOfYear().equals(test1.monthOfYear())); 342 assertEquals(true, test1.monthOfYear().equals(test1.monthOfYear())); 343 assertEquals(true, test2.monthOfYear().equals(test2.monthOfYear())); 344 assertEquals(true, test1.monthOfYear().hashCode() == test2.monthOfYear().hashCode()); 345 assertEquals(true, test1.monthOfYear().hashCode() == test1.monthOfYear().hashCode()); 346 assertEquals(true, test2.monthOfYear().hashCode() == test2.monthOfYear().hashCode()); 347 } 348 349 public void testPropertyEqualsHashCodeStrict() { 350 YearMonth test1 = new YearMonth(1970, 6, StrictChronology.getInstance(COPTIC_PARIS)); 351 YearMonth test2 = new YearMonth(1970, 6, StrictChronology.getInstance(COPTIC_PARIS)); 352 assertEquals(true, test1.monthOfYear().equals(test2.monthOfYear())); 353 assertEquals(true, test2.monthOfYear().equals(test1.monthOfYear())); 354 assertEquals(true, test1.monthOfYear().equals(test1.monthOfYear())); 355 assertEquals(true, test2.monthOfYear().equals(test2.monthOfYear())); 356 assertEquals(true, test1.monthOfYear().hashCode() == test2.monthOfYear().hashCode()); 357 assertEquals(true, test1.monthOfYear().hashCode() == test1.monthOfYear().hashCode()); 358 assertEquals(true, test2.monthOfYear().hashCode() == test2.monthOfYear().hashCode()); 359 } 360 361 //----------------------------------------------------------------------- 362 private void check(YearMonth test, int year, int month) { 363 assertEquals(year, test.getYear()); 364 assertEquals(month, test.getMonthOfYear()); 365 } 366 }