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;
017
018 import java.util.Locale;
019
020 import junit.framework.TestCase;
021 import junit.framework.TestSuite;
022
023 /**
024 * This class is a Junit unit test for Partial.
025 *
026 * @author Stephen Colebourne
027 */
028 public class TestPartial_Properties extends TestCase {
029
030 private static final DateTimeZone LONDON = DateTimeZone.forID("Europe/London");
031 private static final DateTimeZone PARIS = DateTimeZone.forID("Europe/Paris");
032
033 private DateTimeZone zone = null;
034 private static final DateTimeFieldType[] TYPES = new DateTimeFieldType[] {
035 DateTimeFieldType.hourOfDay(),
036 DateTimeFieldType.minuteOfHour(),
037 DateTimeFieldType.secondOfMinute(),
038 DateTimeFieldType.millisOfSecond()
039 };
040 private static final int[] VALUES = new int[] {10, 20, 30, 40};
041 private static final int[] VALUES1 = new int[] {1, 2, 3, 4};
042 private static final int[] VALUES2 = new int[] {5, 6, 7, 8};
043
044 // private long TEST_TIME_NOW =
045 // 10L * DateTimeConstants.MILLIS_PER_HOUR
046 // + 20L * DateTimeConstants.MILLIS_PER_MINUTE
047 // + 30L * DateTimeConstants.MILLIS_PER_SECOND
048 // + 40L;
049 //
050 private long TEST_TIME1 =
051 1L * DateTimeConstants.MILLIS_PER_HOUR
052 + 2L * DateTimeConstants.MILLIS_PER_MINUTE
053 + 3L * DateTimeConstants.MILLIS_PER_SECOND
054 + 4L;
055 private long TEST_TIME2 =
056 1L * DateTimeConstants.MILLIS_PER_DAY
057 + 5L * DateTimeConstants.MILLIS_PER_HOUR
058 + 6L * DateTimeConstants.MILLIS_PER_MINUTE
059 + 7L * DateTimeConstants.MILLIS_PER_SECOND
060 + 8L;
061
062 public static void main(String[] args) {
063 junit.textui.TestRunner.run(suite());
064 }
065
066 public static TestSuite suite() {
067 return new TestSuite(TestPartial_Properties.class);
068 }
069
070 public TestPartial_Properties(String name) {
071 super(name);
072 }
073
074 protected void setUp() throws Exception {
075 zone = DateTimeZone.getDefault();
076 DateTimeZone.setDefault(DateTimeZone.UTC);
077 }
078
079 protected void tearDown() throws Exception {
080 DateTimeZone.setDefault(zone);
081 zone = null;
082 }
083
084 //-----------------------------------------------------------------------
085 public void testPropertyGetHour() {
086 Partial test = new Partial(TYPES, VALUES);
087 assertSame(test.getChronology().hourOfDay(), test.property(DateTimeFieldType.hourOfDay()).getField());
088 assertEquals("hourOfDay", test.property(DateTimeFieldType.hourOfDay()).getName());
089 assertEquals("Property[hourOfDay]", test.property(DateTimeFieldType.hourOfDay()).toString());
090 assertSame(test, test.property(DateTimeFieldType.hourOfDay()).getReadablePartial());
091 assertSame(test, test.property(DateTimeFieldType.hourOfDay()).getPartial());
092 assertEquals(10, test.property(DateTimeFieldType.hourOfDay()).get());
093 assertEquals("10", test.property(DateTimeFieldType.hourOfDay()).getAsString());
094 assertEquals("10", test.property(DateTimeFieldType.hourOfDay()).getAsText());
095 assertEquals("10", test.property(DateTimeFieldType.hourOfDay()).getAsText(Locale.FRENCH));
096 assertEquals("10", test.property(DateTimeFieldType.hourOfDay()).getAsShortText());
097 assertEquals("10", test.property(DateTimeFieldType.hourOfDay()).getAsShortText(Locale.FRENCH));
098 assertEquals(test.getChronology().hours(), test.property(DateTimeFieldType.hourOfDay()).getDurationField());
099 assertEquals(test.getChronology().days(), test.property(DateTimeFieldType.hourOfDay()).getRangeDurationField());
100 assertEquals(2, test.property(DateTimeFieldType.hourOfDay()).getMaximumTextLength(null));
101 assertEquals(2, test.property(DateTimeFieldType.hourOfDay()).getMaximumShortTextLength(null));
102 }
103
104 public void testPropertyGetMaxMinValuesHour() {
105 Partial test = new Partial(TYPES, VALUES);
106 assertEquals(0, test.property(DateTimeFieldType.hourOfDay()).getMinimumValue());
107 assertEquals(0, test.property(DateTimeFieldType.hourOfDay()).getMinimumValueOverall());
108 assertEquals(23, test.property(DateTimeFieldType.hourOfDay()).getMaximumValue());
109 assertEquals(23, test.property(DateTimeFieldType.hourOfDay()).getMaximumValueOverall());
110 }
111
112 // public void testPropertyAddHour() {
113 // Partial test = new Partial(TYPES, VALUES);
114 // Partial copy = test.property(DateTimeFieldType.hourOfDay()).addToCopy(9);
115 // check(test, 10, 20, 30, 40);
116 // check(copy, 19, 20, 30, 40);
117 //
118 // copy = test.property(DateTimeFieldType.hourOfDay()).addToCopy(0);
119 // check(copy, 10, 20, 30, 40);
120 //
121 // copy = test.property(DateTimeFieldType.hourOfDay()).addToCopy(13);
122 // check(copy, 23, 20, 30, 40);
123 //
124 // copy = test.property(DateTimeFieldType.hourOfDay()).addToCopy(14);
125 // check(copy, 0, 20, 30, 40);
126 //
127 // copy = test.property(DateTimeFieldType.hourOfDay()).addToCopy(-10);
128 // check(copy, 0, 20, 30, 40);
129 //
130 // copy = test.property(DateTimeFieldType.hourOfDay()).addToCopy(-11);
131 // check(copy, 23, 20, 30, 40);
132 // }
133 //
134 public void testPropertyAddHour() {
135 Partial test = new Partial(TYPES, VALUES);
136 Partial copy = test.property(DateTimeFieldType.hourOfDay()).addToCopy(9);
137 check(test, 10, 20, 30, 40);
138 check(copy, 19, 20, 30, 40);
139
140 copy = test.property(DateTimeFieldType.hourOfDay()).addToCopy(0);
141 check(copy, 10, 20, 30, 40);
142
143 copy = test.property(DateTimeFieldType.hourOfDay()).addToCopy(13);
144 check(copy, 23, 20, 30, 40);
145
146 try {
147 test.property(DateTimeFieldType.hourOfDay()).addToCopy(14);
148 fail();
149 } catch (IllegalArgumentException ex) {}
150 check(test, 10, 20, 30, 40);
151
152 copy = test.property(DateTimeFieldType.hourOfDay()).addToCopy(-10);
153 check(copy, 0, 20, 30, 40);
154
155 try {
156 test.property(DateTimeFieldType.hourOfDay()).addToCopy(-11);
157 fail();
158 } catch (IllegalArgumentException ex) {}
159 check(test, 10, 20, 30, 40);
160 }
161
162 public void testPropertyAddWrapFieldHour() {
163 Partial test = new Partial(TYPES, VALUES);
164 Partial copy = test.property(DateTimeFieldType.hourOfDay()).addWrapFieldToCopy(9);
165 check(test, 10, 20, 30, 40);
166 check(copy, 19, 20, 30, 40);
167
168 copy = test.property(DateTimeFieldType.hourOfDay()).addWrapFieldToCopy(0);
169 check(copy, 10, 20, 30, 40);
170
171 copy = test.property(DateTimeFieldType.hourOfDay()).addWrapFieldToCopy(18);
172 check(copy, 4, 20, 30, 40);
173
174 copy = test.property(DateTimeFieldType.hourOfDay()).addWrapFieldToCopy(-15);
175 check(copy, 19, 20, 30, 40);
176 }
177
178 public void testPropertySetHour() {
179 Partial test = new Partial(TYPES, VALUES);
180 Partial copy = test.property(DateTimeFieldType.hourOfDay()).setCopy(12);
181 check(test, 10, 20, 30, 40);
182 check(copy, 12, 20, 30, 40);
183
184 try {
185 test.property(DateTimeFieldType.hourOfDay()).setCopy(24);
186 fail();
187 } catch (IllegalArgumentException ex) {}
188 try {
189 test.property(DateTimeFieldType.hourOfDay()).setCopy(-1);
190 fail();
191 } catch (IllegalArgumentException ex) {}
192 }
193
194 public void testPropertySetTextHour() {
195 Partial test = new Partial(TYPES, VALUES);
196 Partial copy = test.property(DateTimeFieldType.hourOfDay()).setCopy("12");
197 check(test, 10, 20, 30, 40);
198 check(copy, 12, 20, 30, 40);
199 }
200
201 public void testPropertyWithMaximumValueHour() {
202 Partial test = new Partial(TYPES, VALUES);
203 Partial copy = test.property(DateTimeFieldType.hourOfDay()).withMaximumValue();
204 check(test, 10, 20, 30, 40);
205 check(copy, 23, 20, 30, 40);
206 }
207
208 public void testPropertyWithMinimumValueHour() {
209 Partial test = new Partial(TYPES, VALUES);
210 Partial copy = test.property(DateTimeFieldType.hourOfDay()).withMinimumValue();
211 check(test, 10, 20, 30, 40);
212 check(copy, 0, 20, 30, 40);
213 }
214
215 public void testPropertyCompareToHour() {
216 Partial test1 = new Partial(TYPES, VALUES1);
217 Partial test2 = new Partial(TYPES, VALUES2);
218 assertEquals(true, test1.property(DateTimeFieldType.hourOfDay()).compareTo(test2) < 0);
219 assertEquals(true, test2.property(DateTimeFieldType.hourOfDay()).compareTo(test1) > 0);
220 assertEquals(true, test1.property(DateTimeFieldType.hourOfDay()).compareTo(test1) == 0);
221 try {
222 test1.property(DateTimeFieldType.hourOfDay()).compareTo((ReadablePartial) null);
223 fail();
224 } catch (IllegalArgumentException ex) {}
225
226 DateTime dt1 = new DateTime(TEST_TIME1);
227 DateTime dt2 = new DateTime(TEST_TIME2);
228 assertEquals(true, test1.property(DateTimeFieldType.hourOfDay()).compareTo(dt2) < 0);
229 assertEquals(true, test2.property(DateTimeFieldType.hourOfDay()).compareTo(dt1) > 0);
230 assertEquals(true, test1.property(DateTimeFieldType.hourOfDay()).compareTo(dt1) == 0);
231 try {
232 test1.property(DateTimeFieldType.hourOfDay()).compareTo((ReadableInstant) null);
233 fail();
234 } catch (IllegalArgumentException ex) {}
235 }
236
237 //-----------------------------------------------------------------------
238 public void testPropertyGetMinute() {
239 Partial test = new Partial(TYPES, VALUES);
240 assertSame(test.getChronology().minuteOfHour(), test.property(DateTimeFieldType.minuteOfHour()).getField());
241 assertEquals("minuteOfHour", test.property(DateTimeFieldType.minuteOfHour()).getName());
242 assertEquals("Property[minuteOfHour]", test.property(DateTimeFieldType.minuteOfHour()).toString());
243 assertSame(test, test.property(DateTimeFieldType.minuteOfHour()).getReadablePartial());
244 assertSame(test, test.property(DateTimeFieldType.minuteOfHour()).getPartial());
245 assertEquals(20, test.property(DateTimeFieldType.minuteOfHour()).get());
246 assertEquals("20", test.property(DateTimeFieldType.minuteOfHour()).getAsString());
247 assertEquals("20", test.property(DateTimeFieldType.minuteOfHour()).getAsText());
248 assertEquals("20", test.property(DateTimeFieldType.minuteOfHour()).getAsText(Locale.FRENCH));
249 assertEquals("20", test.property(DateTimeFieldType.minuteOfHour()).getAsShortText());
250 assertEquals("20", test.property(DateTimeFieldType.minuteOfHour()).getAsShortText(Locale.FRENCH));
251 assertEquals(test.getChronology().minutes(), test.property(DateTimeFieldType.minuteOfHour()).getDurationField());
252 assertEquals(test.getChronology().hours(), test.property(DateTimeFieldType.minuteOfHour()).getRangeDurationField());
253 assertEquals(2, test.property(DateTimeFieldType.minuteOfHour()).getMaximumTextLength(null));
254 assertEquals(2, test.property(DateTimeFieldType.minuteOfHour()).getMaximumShortTextLength(null));
255 }
256
257 public void testPropertyGetMaxMinValuesMinute() {
258 Partial test = new Partial(TYPES, VALUES);
259 assertEquals(0, test.property(DateTimeFieldType.minuteOfHour()).getMinimumValue());
260 assertEquals(0, test.property(DateTimeFieldType.minuteOfHour()).getMinimumValueOverall());
261 assertEquals(59, test.property(DateTimeFieldType.minuteOfHour()).getMaximumValue());
262 assertEquals(59, test.property(DateTimeFieldType.minuteOfHour()).getMaximumValueOverall());
263 }
264
265 // public void testPropertyAddMinute() {
266 // Partial test = new Partial(TYPES, VALUES);
267 // Partial copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(9);
268 // check(test, 10, 20, 30, 40);
269 // check(copy, 10, 29, 30, 40);
270 //
271 // copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(39);
272 // check(copy, 10, 59, 30, 40);
273 //
274 // copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(40);
275 // check(copy, 11, 0, 30, 40);
276 //
277 // copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(1 * 60 + 45);
278 // check(copy, 12, 5, 30, 40);
279 //
280 // copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(13 * 60 + 39);
281 // check(copy, 23, 59, 30, 40);
282 //
283 // copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(13 * 60 + 40);
284 // check(copy, 0, 0, 30, 40);
285 //
286 // copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-9);
287 // check(copy, 10, 11, 30, 40);
288 //
289 // copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-19);
290 // check(copy, 10, 1, 30, 40);
291 //
292 // copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-20);
293 // check(copy, 10, 0, 30, 40);
294 //
295 // copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-21);
296 // check(copy, 9, 59, 30, 40);
297 //
298 // copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-(10 * 60 + 20));
299 // check(copy, 0, 0, 30, 40);
300 //
301 // copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-(10 * 60 + 21));
302 // check(copy, 23, 59, 30, 40);
303 // }
304
305 public void testPropertyAddMinute() {
306 Partial test = new Partial(TYPES, VALUES);
307 Partial copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(9);
308 check(test, 10, 20, 30, 40);
309 check(copy, 10, 29, 30, 40);
310
311 copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(39);
312 check(copy, 10, 59, 30, 40);
313
314 copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(40);
315 check(copy, 11, 0, 30, 40);
316
317 copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(1 * 60 + 45);
318 check(copy, 12, 5, 30, 40);
319
320 copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(13 * 60 + 39);
321 check(copy, 23, 59, 30, 40);
322
323 try {
324 test.property(DateTimeFieldType.minuteOfHour()).addToCopy(13 * 60 + 40);
325 fail();
326 } catch (IllegalArgumentException ex) {}
327 check(test, 10, 20, 30, 40);
328
329 copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-9);
330 check(copy, 10, 11, 30, 40);
331
332 copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-19);
333 check(copy, 10, 1, 30, 40);
334
335 copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-20);
336 check(copy, 10, 0, 30, 40);
337
338 copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-21);
339 check(copy, 9, 59, 30, 40);
340
341 copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-(10 * 60 + 20));
342 check(copy, 0, 0, 30, 40);
343
344 try {
345 test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-(10 * 60 + 21));
346 fail();
347 } catch (IllegalArgumentException ex) {}
348 check(test, 10, 20, 30, 40);
349 }
350
351 public void testPropertyAddWrapFieldMinute() {
352 Partial test = new Partial(TYPES, VALUES);
353 Partial copy = test.property(DateTimeFieldType.minuteOfHour()).addWrapFieldToCopy(9);
354 check(test, 10, 20, 30, 40);
355 check(copy, 10, 29, 30, 40);
356
357 copy = test.property(DateTimeFieldType.minuteOfHour()).addWrapFieldToCopy(49);
358 check(copy, 10, 9, 30, 40);
359
360 copy = test.property(DateTimeFieldType.minuteOfHour()).addWrapFieldToCopy(-47);
361 check(copy, 10, 33, 30, 40);
362 }
363
364 public void testPropertySetMinute() {
365 Partial test = new Partial(TYPES, VALUES);
366 Partial copy = test.property(DateTimeFieldType.minuteOfHour()).setCopy(12);
367 check(test, 10, 20, 30, 40);
368 check(copy, 10, 12, 30, 40);
369
370 try {
371 test.property(DateTimeFieldType.minuteOfHour()).setCopy(60);
372 fail();
373 } catch (IllegalArgumentException ex) {}
374 try {
375 test.property(DateTimeFieldType.minuteOfHour()).setCopy(-1);
376 fail();
377 } catch (IllegalArgumentException ex) {}
378 }
379
380 public void testPropertySetTextMinute() {
381 Partial test = new Partial(TYPES, VALUES);
382 Partial copy = test.property(DateTimeFieldType.minuteOfHour()).setCopy("12");
383 check(test, 10, 20, 30, 40);
384 check(copy, 10, 12, 30, 40);
385 }
386
387 public void testPropertyCompareToMinute() {
388 Partial test1 = new Partial(TYPES, VALUES1);
389 Partial test2 = new Partial(TYPES, VALUES2);
390 assertEquals(true, test1.property(DateTimeFieldType.minuteOfHour()).compareTo(test2) < 0);
391 assertEquals(true, test2.property(DateTimeFieldType.minuteOfHour()).compareTo(test1) > 0);
392 assertEquals(true, test1.property(DateTimeFieldType.minuteOfHour()).compareTo(test1) == 0);
393 try {
394 test1.property(DateTimeFieldType.minuteOfHour()).compareTo((ReadablePartial) null);
395 fail();
396 } catch (IllegalArgumentException ex) {}
397
398 DateTime dt1 = new DateTime(TEST_TIME1);
399 DateTime dt2 = new DateTime(TEST_TIME2);
400 assertEquals(true, test1.property(DateTimeFieldType.minuteOfHour()).compareTo(dt2) < 0);
401 assertEquals(true, test2.property(DateTimeFieldType.minuteOfHour()).compareTo(dt1) > 0);
402 assertEquals(true, test1.property(DateTimeFieldType.minuteOfHour()).compareTo(dt1) == 0);
403 try {
404 test1.property(DateTimeFieldType.minuteOfHour()).compareTo((ReadableInstant) null);
405 fail();
406 } catch (IllegalArgumentException ex) {}
407 }
408
409 //-----------------------------------------------------------------------
410 private void check(Partial test, int hour, int min, int sec, int milli) {
411 assertEquals(hour, test.get(DateTimeFieldType.hourOfDay()));
412 assertEquals(min, test.get(DateTimeFieldType.minuteOfHour()));
413 assertEquals(sec, test.get(DateTimeFieldType.secondOfMinute()));
414 assertEquals(milli, test.get(DateTimeFieldType.millisOfSecond()));
415 }
416 }