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