/*
* Copyright 2001-2005 Stephen Colebourne
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.joda.time;
import java.util.Locale;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* This class is a Junit unit test for Partial.
*
* @author Stephen Colebourne
*/
public class TestPartial_Properties extends TestCase {
private static final DateTimeZone LONDON = DateTimeZone.forID("Europe/London");
private static final DateTimeZone PARIS = DateTimeZone.forID("Europe/Paris");
private DateTimeZone zone = null;
private static final DateTimeFieldType[] TYPES = new DateTimeFieldType[] {
DateTimeFieldType.hourOfDay(),
DateTimeFieldType.minuteOfHour(),
DateTimeFieldType.secondOfMinute(),
DateTimeFieldType.millisOfSecond()
};
private static final int[] VALUES = new int[] {10, 20, 30, 40};
private static final int[] VALUES1 = new int[] {1, 2, 3, 4};
private static final int[] VALUES2 = new int[] {5, 6, 7, 8};
// private long TEST_TIME_NOW =
// 10L * DateTimeConstants.MILLIS_PER_HOUR
// + 20L * DateTimeConstants.MILLIS_PER_MINUTE
// + 30L * DateTimeConstants.MILLIS_PER_SECOND
// + 40L;
//
private long TEST_TIME1 =
1L * DateTimeConstants.MILLIS_PER_HOUR
+ 2L * DateTimeConstants.MILLIS_PER_MINUTE
+ 3L * DateTimeConstants.MILLIS_PER_SECOND
+ 4L;
private long TEST_TIME2 =
1L * DateTimeConstants.MILLIS_PER_DAY
+ 5L * DateTimeConstants.MILLIS_PER_HOUR
+ 6L * DateTimeConstants.MILLIS_PER_MINUTE
+ 7L * DateTimeConstants.MILLIS_PER_SECOND
+ 8L;
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
public static TestSuite suite() {
return new TestSuite(TestPartial_Properties.class);
}
public TestPartial_Properties(String name) {
super(name);
}
protected void setUp() throws Exception {
zone = DateTimeZone.getDefault();
DateTimeZone.setDefault(DateTimeZone.UTC);
}
protected void tearDown() throws Exception {
DateTimeZone.setDefault(zone);
zone = null;
}
//-----------------------------------------------------------------------
public void testPropertyGetHour() {
Partial test = new Partial(TYPES, VALUES);
assertSame(test.getChronology().hourOfDay(), test.property(DateTimeFieldType.hourOfDay()).getField());
assertEquals("hourOfDay", test.property(DateTimeFieldType.hourOfDay()).getName());
assertEquals("Property[hourOfDay]", test.property(DateTimeFieldType.hourOfDay()).toString());
assertSame(test, test.property(DateTimeFieldType.hourOfDay()).getReadablePartial());
assertSame(test, test.property(DateTimeFieldType.hourOfDay()).getPartial());
assertEquals(10, test.property(DateTimeFieldType.hourOfDay()).get());
assertEquals("10", test.property(DateTimeFieldType.hourOfDay()).getAsString());
assertEquals("10", test.property(DateTimeFieldType.hourOfDay()).getAsText());
assertEquals("10", test.property(DateTimeFieldType.hourOfDay()).getAsText(Locale.FRENCH));
assertEquals("10", test.property(DateTimeFieldType.hourOfDay()).getAsShortText());
assertEquals("10", test.property(DateTimeFieldType.hourOfDay()).getAsShortText(Locale.FRENCH));
assertEquals(test.getChronology().hours(), test.property(DateTimeFieldType.hourOfDay()).getDurationField());
assertEquals(test.getChronology().days(), test.property(DateTimeFieldType.hourOfDay()).getRangeDurationField());
assertEquals(2, test.property(DateTimeFieldType.hourOfDay()).getMaximumTextLength(null));
assertEquals(2, test.property(DateTimeFieldType.hourOfDay()).getMaximumShortTextLength(null));
}
public void testPropertyGetMaxMinValuesHour() {
Partial test = new Partial(TYPES, VALUES);
assertEquals(0, test.property(DateTimeFieldType.hourOfDay()).getMinimumValue());
assertEquals(0, test.property(DateTimeFieldType.hourOfDay()).getMinimumValueOverall());
assertEquals(23, test.property(DateTimeFieldType.hourOfDay()).getMaximumValue());
assertEquals(23, test.property(DateTimeFieldType.hourOfDay()).getMaximumValueOverall());
}
// public void testPropertyAddHour() {
// Partial test = new Partial(TYPES, VALUES);
// Partial copy = test.property(DateTimeFieldType.hourOfDay()).addToCopy(9);
// check(test, 10, 20, 30, 40);
// check(copy, 19, 20, 30, 40);
//
// copy = test.property(DateTimeFieldType.hourOfDay()).addToCopy(0);
// check(copy, 10, 20, 30, 40);
//
// copy = test.property(DateTimeFieldType.hourOfDay()).addToCopy(13);
// check(copy, 23, 20, 30, 40);
//
// copy = test.property(DateTimeFieldType.hourOfDay()).addToCopy(14);
// check(copy, 0, 20, 30, 40);
//
// copy = test.property(DateTimeFieldType.hourOfDay()).addToCopy(-10);
// check(copy, 0, 20, 30, 40);
//
// copy = test.property(DateTimeFieldType.hourOfDay()).addToCopy(-11);
// check(copy, 23, 20, 30, 40);
// }
//
public void testPropertyAddHour() {
Partial test = new Partial(TYPES, VALUES);
Partial copy = test.property(DateTimeFieldType.hourOfDay()).addToCopy(9);
check(test, 10, 20, 30, 40);
check(copy, 19, 20, 30, 40);
copy = test.property(DateTimeFieldType.hourOfDay()).addToCopy(0);
check(copy, 10, 20, 30, 40);
copy = test.property(DateTimeFieldType.hourOfDay()).addToCopy(13);
check(copy, 23, 20, 30, 40);
try {
test.property(DateTimeFieldType.hourOfDay()).addToCopy(14);
fail();
} catch (IllegalArgumentException ex) {}
check(test, 10, 20, 30, 40);
copy = test.property(DateTimeFieldType.hourOfDay()).addToCopy(-10);
check(copy, 0, 20, 30, 40);
try {
test.property(DateTimeFieldType.hourOfDay()).addToCopy(-11);
fail();
} catch (IllegalArgumentException ex) {}
check(test, 10, 20, 30, 40);
}
public void testPropertyAddWrapFieldHour() {
Partial test = new Partial(TYPES, VALUES);
Partial copy = test.property(DateTimeFieldType.hourOfDay()).addWrapFieldToCopy(9);
check(test, 10, 20, 30, 40);
check(copy, 19, 20, 30, 40);
copy = test.property(DateTimeFieldType.hourOfDay()).addWrapFieldToCopy(0);
check(copy, 10, 20, 30, 40);
copy = test.property(DateTimeFieldType.hourOfDay()).addWrapFieldToCopy(18);
check(copy, 4, 20, 30, 40);
copy = test.property(DateTimeFieldType.hourOfDay()).addWrapFieldToCopy(-15);
check(copy, 19, 20, 30, 40);
}
public void testPropertySetHour() {
Partial test = new Partial(TYPES, VALUES);
Partial copy = test.property(DateTimeFieldType.hourOfDay()).setCopy(12);
check(test, 10, 20, 30, 40);
check(copy, 12, 20, 30, 40);
try {
test.property(DateTimeFieldType.hourOfDay()).setCopy(24);
fail();
} catch (IllegalArgumentException ex) {}
try {
test.property(DateTimeFieldType.hourOfDay()).setCopy(-1);
fail();
} catch (IllegalArgumentException ex) {}
}
public void testPropertySetTextHour() {
Partial test = new Partial(TYPES, VALUES);
Partial copy = test.property(DateTimeFieldType.hourOfDay()).setCopy("12");
check(test, 10, 20, 30, 40);
check(copy, 12, 20, 30, 40);
}
public void testPropertyWithMaximumValueHour() {
Partial test = new Partial(TYPES, VALUES);
Partial copy = test.property(DateTimeFieldType.hourOfDay()).withMaximumValue();
check(test, 10, 20, 30, 40);
check(copy, 23, 20, 30, 40);
}
public void testPropertyWithMinimumValueHour() {
Partial test = new Partial(TYPES, VALUES);
Partial copy = test.property(DateTimeFieldType.hourOfDay()).withMinimumValue();
check(test, 10, 20, 30, 40);
check(copy, 0, 20, 30, 40);
}
public void testPropertyCompareToHour() {
Partial test1 = new Partial(TYPES, VALUES1);
Partial test2 = new Partial(TYPES, VALUES2);
assertEquals(true, test1.property(DateTimeFieldType.hourOfDay()).compareTo(test2) < 0);
assertEquals(true, test2.property(DateTimeFieldType.hourOfDay()).compareTo(test1) > 0);
assertEquals(true, test1.property(DateTimeFieldType.hourOfDay()).compareTo(test1) == 0);
try {
test1.property(DateTimeFieldType.hourOfDay()).compareTo((ReadablePartial) null);
fail();
} catch (IllegalArgumentException ex) {}
DateTime dt1 = new DateTime(TEST_TIME1);
DateTime dt2 = new DateTime(TEST_TIME2);
assertEquals(true, test1.property(DateTimeFieldType.hourOfDay()).compareTo(dt2) < 0);
assertEquals(true, test2.property(DateTimeFieldType.hourOfDay()).compareTo(dt1) > 0);
assertEquals(true, test1.property(DateTimeFieldType.hourOfDay()).compareTo(dt1) == 0);
try {
test1.property(DateTimeFieldType.hourOfDay()).compareTo((ReadableInstant) null);
fail();
} catch (IllegalArgumentException ex) {}
}
//-----------------------------------------------------------------------
public void testPropertyGetMinute() {
Partial test = new Partial(TYPES, VALUES);
assertSame(test.getChronology().minuteOfHour(), test.property(DateTimeFieldType.minuteOfHour()).getField());
assertEquals("minuteOfHour", test.property(DateTimeFieldType.minuteOfHour()).getName());
assertEquals("Property[minuteOfHour]", test.property(DateTimeFieldType.minuteOfHour()).toString());
assertSame(test, test.property(DateTimeFieldType.minuteOfHour()).getReadablePartial());
assertSame(test, test.property(DateTimeFieldType.minuteOfHour()).getPartial());
assertEquals(20, test.property(DateTimeFieldType.minuteOfHour()).get());
assertEquals("20", test.property(DateTimeFieldType.minuteOfHour()).getAsString());
assertEquals("20", test.property(DateTimeFieldType.minuteOfHour()).getAsText());
assertEquals("20", test.property(DateTimeFieldType.minuteOfHour()).getAsText(Locale.FRENCH));
assertEquals("20", test.property(DateTimeFieldType.minuteOfHour()).getAsShortText());
assertEquals("20", test.property(DateTimeFieldType.minuteOfHour()).getAsShortText(Locale.FRENCH));
assertEquals(test.getChronology().minutes(), test.property(DateTimeFieldType.minuteOfHour()).getDurationField());
assertEquals(test.getChronology().hours(), test.property(DateTimeFieldType.minuteOfHour()).getRangeDurationField());
assertEquals(2, test.property(DateTimeFieldType.minuteOfHour()).getMaximumTextLength(null));
assertEquals(2, test.property(DateTimeFieldType.minuteOfHour()).getMaximumShortTextLength(null));
}
public void testPropertyGetMaxMinValuesMinute() {
Partial test = new Partial(TYPES, VALUES);
assertEquals(0, test.property(DateTimeFieldType.minuteOfHour()).getMinimumValue());
assertEquals(0, test.property(DateTimeFieldType.minuteOfHour()).getMinimumValueOverall());
assertEquals(59, test.property(DateTimeFieldType.minuteOfHour()).getMaximumValue());
assertEquals(59, test.property(DateTimeFieldType.minuteOfHour()).getMaximumValueOverall());
}
// public void testPropertyAddMinute() {
// Partial test = new Partial(TYPES, VALUES);
// Partial copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(9);
// check(test, 10, 20, 30, 40);
// check(copy, 10, 29, 30, 40);
//
// copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(39);
// check(copy, 10, 59, 30, 40);
//
// copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(40);
// check(copy, 11, 0, 30, 40);
//
// copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(1 * 60 + 45);
// check(copy, 12, 5, 30, 40);
//
// copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(13 * 60 + 39);
// check(copy, 23, 59, 30, 40);
//
// copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(13 * 60 + 40);
// check(copy, 0, 0, 30, 40);
//
// copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-9);
// check(copy, 10, 11, 30, 40);
//
// copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-19);
// check(copy, 10, 1, 30, 40);
//
// copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-20);
// check(copy, 10, 0, 30, 40);
//
// copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-21);
// check(copy, 9, 59, 30, 40);
//
// copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-(10 * 60 + 20));
// check(copy, 0, 0, 30, 40);
//
// copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-(10 * 60 + 21));
// check(copy, 23, 59, 30, 40);
// }
public void testPropertyAddMinute() {
Partial test = new Partial(TYPES, VALUES);
Partial copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(9);
check(test, 10, 20, 30, 40);
check(copy, 10, 29, 30, 40);
copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(39);
check(copy, 10, 59, 30, 40);
copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(40);
check(copy, 11, 0, 30, 40);
copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(1 * 60 + 45);
check(copy, 12, 5, 30, 40);
copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(13 * 60 + 39);
check(copy, 23, 59, 30, 40);
try {
test.property(DateTimeFieldType.minuteOfHour()).addToCopy(13 * 60 + 40);
fail();
} catch (IllegalArgumentException ex) {}
check(test, 10, 20, 30, 40);
copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-9);
check(copy, 10, 11, 30, 40);
copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-19);
check(copy, 10, 1, 30, 40);
copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-20);
check(copy, 10, 0, 30, 40);
copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-21);
check(copy, 9, 59, 30, 40);
copy = test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-(10 * 60 + 20));
check(copy, 0, 0, 30, 40);
try {
test.property(DateTimeFieldType.minuteOfHour()).addToCopy(-(10 * 60 + 21));
fail();
} catch (IllegalArgumentException ex) {}
check(test, 10, 20, 30, 40);
}
public void testPropertyAddWrapFieldMinute() {
Partial test = new Partial(TYPES, VALUES);
Partial copy = test.property(DateTimeFieldType.minuteOfHour()).addWrapFieldToCopy(9);
check(test, 10, 20, 30, 40);
check(copy, 10, 29, 30, 40);
copy = test.property(DateTimeFieldType.minuteOfHour()).addWrapFieldToCopy(49);
check(copy, 10, 9, 30, 40);
copy = test.property(DateTimeFieldType.minuteOfHour()).addWrapFieldToCopy(-47);
check(copy, 10, 33, 30, 40);
}
public void testPropertySetMinute() {
Partial test = new Partial(TYPES, VALUES);
Partial copy = test.property(DateTimeFieldType.minuteOfHour()).setCopy(12);
check(test, 10, 20, 30, 40);
check(copy, 10, 12, 30, 40);
try {
test.property(DateTimeFieldType.minuteOfHour()).setCopy(60);
fail();
} catch (IllegalArgumentException ex) {}
try {
test.property(DateTimeFieldType.minuteOfHour()).setCopy(-1);
fail();
} catch (IllegalArgumentException ex) {}
}
public void testPropertySetTextMinute() {
Partial test = new Partial(TYPES, VALUES);
Partial copy = test.property(DateTimeFieldType.minuteOfHour()).setCopy("12");
check(test, 10, 20, 30, 40);
check(copy, 10, 12, 30, 40);
}
public void testPropertyCompareToMinute() {
Partial test1 = new Partial(TYPES, VALUES1);
Partial test2 = new Partial(TYPES, VALUES2);
assertEquals(true, test1.property(DateTimeFieldType.minuteOfHour()).compareTo(test2) < 0);
assertEquals(true, test2.property(DateTimeFieldType.minuteOfHour()).compareTo(test1) > 0);
assertEquals(true, test1.property(DateTimeFieldType.minuteOfHour()).compareTo(test1) == 0);
try {
test1.property(DateTimeFieldType.minuteOfHour()).compareTo((ReadablePartial) null);
fail();
} catch (IllegalArgumentException ex) {}
DateTime dt1 = new DateTime(TEST_TIME1);
DateTime dt2 = new DateTime(TEST_TIME2);
assertEquals(true, test1.property(DateTimeFieldType.minuteOfHour()).compareTo(dt2) < 0);
assertEquals(true, test2.property(DateTimeFieldType.minuteOfHour()).compareTo(dt1) > 0);
assertEquals(true, test1.property(DateTimeFieldType.minuteOfHour()).compareTo(dt1) == 0);
try {
test1.property(DateTimeFieldType.minuteOfHour()).compareTo((ReadableInstant) null);
fail();
} catch (IllegalArgumentException ex) {}
}
//-----------------------------------------------------------------------
private void check(Partial test, int hour, int min, int sec, int milli) {
assertEquals(hour, test.get(DateTimeFieldType.hourOfDay()));
assertEquals(min, test.get(DateTimeFieldType.minuteOfHour()));
assertEquals(sec, test.get(DateTimeFieldType.secondOfMinute()));
assertEquals(milli, test.get(DateTimeFieldType.millisOfSecond()));
}
}