/*
* 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.field;
import java.util.Arrays;
import java.util.Locale;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.joda.time.DateTimeFieldType;
import org.joda.time.DurationField;
import org.joda.time.DurationFieldType;
import org.joda.time.TimeOfDay;
import org.joda.time.chrono.ISOChronology;
/**
* This class is a Junit unit test for PreciseDateTimeField.
*
* @author Stephen Colebourne
*/
public class TestOffsetDateTimeField extends TestCase {
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
public static TestSuite suite() {
return new TestSuite(TestOffsetDateTimeField.class);
}
public TestOffsetDateTimeField(String name) {
super(name);
}
protected void setUp() throws Exception {
}
protected void tearDown() throws Exception {
}
//-----------------------------------------------------------------------
public void test_constructor1() {
OffsetDateTimeField field = new OffsetDateTimeField(
ISOChronology.getInstance().secondOfMinute(), 3
);
assertEquals(DateTimeFieldType.secondOfMinute(), field.getType());
assertEquals(3, field.getOffset());
try {
field = new OffsetDateTimeField(null, 3);
fail();
} catch (IllegalArgumentException ex) {}
try {
field = new OffsetDateTimeField(ISOChronology.getInstance().secondOfMinute(), 0);
fail();
} catch (IllegalArgumentException ex) {}
try {
field = new OffsetDateTimeField(UnsupportedDateTimeField.getInstance(
DateTimeFieldType.secondOfMinute(), UnsupportedDurationField.getInstance(DurationFieldType.seconds())), 0);
fail();
} catch (IllegalArgumentException ex) {}
}
public void test_constructor2() {
OffsetDateTimeField field = new OffsetDateTimeField(
ISOChronology.getInstance().secondOfMinute(), DateTimeFieldType.secondOfDay(), 3
);
assertEquals(DateTimeFieldType.secondOfDay(), field.getType());
assertEquals(3, field.getOffset());
try {
field = new OffsetDateTimeField(null, DateTimeFieldType.secondOfDay(), 3);
fail();
} catch (IllegalArgumentException ex) {}
try {
field = new OffsetDateTimeField(ISOChronology.getInstance().secondOfMinute(), null, 3);
fail();
} catch (IllegalArgumentException ex) {}
try {
field = new OffsetDateTimeField(ISOChronology.getInstance().secondOfMinute(), DateTimeFieldType.secondOfDay(), 0);
fail();
} catch (IllegalArgumentException ex) {}
}
public void test_getType() {
OffsetDateTimeField field = new OffsetDateTimeField(
ISOChronology.getInstance().secondOfMinute(), 3
);
assertEquals(DateTimeFieldType.secondOfMinute(), field.getType());
}
public void test_getName() {
OffsetDateTimeField field = new OffsetDateTimeField(
ISOChronology.getInstance().secondOfMinute(), 3
);
assertEquals("secondOfMinute", field.getName());
}
public void test_toString() {
OffsetDateTimeField field = new OffsetDateTimeField(
ISOChronology.getInstance().secondOfMinute(), 3
);
assertEquals("DateTimeField[secondOfMinute]", field.toString());
}
public void test_isSupported() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(true, field.isSupported());
}
public void test_isLenient() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(false, field.isLenient());
}
public void test_getOffset() {
OffsetDateTimeField field = new OffsetDateTimeField(
ISOChronology.getInstance().secondOfMinute(), 5
);
assertEquals(5, field.getOffset());
}
public void test_get() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(0 + 3, field.get(0));
assertEquals(6 + 3, field.get(6000));
}
//-----------------------------------------------------------------------
public void test_getAsText_long_Locale() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals("32", field.getAsText(1000L * 29, Locale.ENGLISH));
assertEquals("32", field.getAsText(1000L * 29, null));
}
public void test_getAsText_long() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals("32", field.getAsText(1000L * 29));
}
public void test_getAsText_RP_int_Locale() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals("20", field.getAsText(new TimeOfDay(12, 30, 40, 50), 20, Locale.ENGLISH));
assertEquals("20", field.getAsText(new TimeOfDay(12, 30, 40, 50), 20, null));
}
public void test_getAsText_RP_Locale() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals("40", field.getAsText(new TimeOfDay(12, 30, 40, 50), Locale.ENGLISH));
assertEquals("40", field.getAsText(new TimeOfDay(12, 30, 40, 50), null));
}
public void test_getAsText_int_Locale() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals("80", field.getAsText(80, Locale.ENGLISH));
assertEquals("80", field.getAsText(80, null));
}
//-----------------------------------------------------------------------
public void test_getAsShortText_long_Locale() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals("32", field.getAsShortText(1000L * 29, Locale.ENGLISH));
assertEquals("32", field.getAsShortText(1000L * 29, null));
}
public void test_getAsShortText_long() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals("32", field.getAsShortText(1000L * 29));
}
public void test_getAsShortText_RP_int_Locale() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals("20", field.getAsShortText(new TimeOfDay(12, 30, 40, 50), 20, Locale.ENGLISH));
assertEquals("20", field.getAsShortText(new TimeOfDay(12, 30, 40, 50), 20, null));
}
public void test_getAsShortText_RP_Locale() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals("40", field.getAsShortText(new TimeOfDay(12, 30, 40, 50), Locale.ENGLISH));
assertEquals("40", field.getAsShortText(new TimeOfDay(12, 30, 40, 50), null));
}
public void test_getAsShortText_int_Locale() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals("80", field.getAsShortText(80, Locale.ENGLISH));
assertEquals("80", field.getAsShortText(80, null));
}
//-----------------------------------------------------------------------
public void test_add_long_int() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(1001, field.add(1L, 1));
}
public void test_add_long_long() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(1001, field.add(1L, 1L));
}
public void test_add_RP_int_intarray_int() {
int[] values = new int[] {10, 20, 30, 40};
int[] expected = new int[] {10, 20, 30, 40};
OffsetDateTimeField field = new MockStandardDateTimeField();
int[] result = field.add(new TimeOfDay(), 2, values, 0);
assertEquals(true, Arrays.equals(expected, result));
values = new int[] {10, 20, 30, 40};
expected = new int[] {10, 20, 31, 40};
result = field.add(new TimeOfDay(), 2, values, 1);
assertEquals(true, Arrays.equals(expected, result));
values = new int[] {10, 20, 30, 40};
expected = new int[] {10, 20, 62, 40};
result = field.add(new TimeOfDay(), 2, values, 32);
assertEquals(true, Arrays.equals(expected, result));
values = new int[] {10, 20, 30, 40};
expected = new int[] {10, 21, 3, 40};
result = field.add(new TimeOfDay(), 2, values, 33);
assertEquals(true, Arrays.equals(expected, result));
values = new int[] {23, 59, 30, 40};
try {
field.add(new TimeOfDay(), 2, values, 33);
fail();
} catch (IllegalArgumentException ex) {}
values = new int[] {10, 20, 30, 40};
expected = new int[] {10, 20, 29, 40};
result = field.add(new TimeOfDay(), 2, values, -1);
assertEquals(true, Arrays.equals(expected, result));
values = new int[] {10, 20, 30, 40};
expected = new int[] {10, 19, 59, 40};
result = field.add(new TimeOfDay(), 2, values, -31);
assertEquals(true, Arrays.equals(expected, result));
values = new int[] {0, 0, 30, 40};
try {
field.add(new TimeOfDay(), 2, values, -31);
fail();
} catch (IllegalArgumentException ex) {}
}
//-----------------------------------------------------------------------
public void test_addWrapField_long_int() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(29 * 1000L, field.addWrapField(1000L * 29, 0));
assertEquals(59 * 1000L, field.addWrapField(1000L * 29, 30));
assertEquals(0L, field.addWrapField(1000L * 29, 31));
}
public void test_addWrapField_RP_int_intarray_int() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
int[] values = new int[] {10, 20, 30, 40};
int[] expected = new int[] {10, 20, 30, 40};
int[] result = field.addWrapField(new TimeOfDay(), 2, values, 0);
assertEquals(true, Arrays.equals(result, expected));
values = new int[] {10, 20, 30, 40};
expected = new int[] {10, 20, 59, 40};
result = field.addWrapField(new TimeOfDay(), 2, values, 29);
assertEquals(true, Arrays.equals(result, expected));
values = new int[] {10, 20, 30, 40};
expected = new int[] {10, 20, 3, 40};
result = field.addWrapField(new TimeOfDay(), 2, values, 33);
assertEquals(true, Arrays.equals(result, expected));
}
//-----------------------------------------------------------------------
public void test_getDifference_long_long() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(-21, field.getDifference(20000L, 41000L));
}
public void test_getDifferenceAsLong_long_long() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(-21L, field.getDifferenceAsLong(20000L, 41000L));
}
//-----------------------------------------------------------------------
public void test_set_long_int() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(3120L, field.set(2120L, 6));
assertEquals(26120L, field.set(120L, 29));
assertEquals(57120L, field.set(2120L, 60));
}
public void test_set_RP_int_intarray_int() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
int[] values = new int[] {10, 20, 30, 40};
int[] expected = new int[] {10, 20, 30, 40};
int[] result = field.set(new TimeOfDay(), 2, values, 30);
assertEquals(true, Arrays.equals(result, expected));
values = new int[] {10, 20, 30, 40};
expected = new int[] {10, 20, 29, 40};
result = field.set(new TimeOfDay(), 2, values, 29);
assertEquals(true, Arrays.equals(result, expected));
values = new int[] {10, 20, 30, 40};
expected = new int[] {10, 20, 30, 40};
try {
field.set(new TimeOfDay(), 2, values, 63);
fail();
} catch (IllegalArgumentException ex) {}
assertEquals(true, Arrays.equals(values, expected));
values = new int[] {10, 20, 30, 40};
expected = new int[] {10, 20, 30, 40};
try {
field.set(new TimeOfDay(), 2, values, 2);
fail();
} catch (IllegalArgumentException ex) {}
assertEquals(true, Arrays.equals(values, expected));
}
public void test_set_long_String_Locale() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(3050L, field.set(50L, "6", null));
assertEquals(26050L, field.set(50L, "29", Locale.ENGLISH));
}
public void test_set_long_String() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(3050L, field.set(50L, "6"));
assertEquals(26050L, field.set(50L, "29"));
}
public void test_set_RP_int_intarray_String_Locale() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
int[] values = new int[] {10, 20, 30, 40};
int[] expected = new int[] {10, 20, 30, 40};
int[] result = field.set(new TimeOfDay(), 2, values, "30", null);
assertEquals(true, Arrays.equals(result, expected));
values = new int[] {10, 20, 30, 40};
expected = new int[] {10, 20, 29, 40};
result = field.set(new TimeOfDay(), 2, values, "29", Locale.ENGLISH);
assertEquals(true, Arrays.equals(result, expected));
values = new int[] {10, 20, 30, 40};
expected = new int[] {10, 20, 30, 40};
try {
field.set(new TimeOfDay(), 2, values, "63", null);
fail();
} catch (IllegalArgumentException ex) {}
assertEquals(true, Arrays.equals(values, expected));
values = new int[] {10, 20, 30, 40};
expected = new int[] {10, 20, 30, 40};
try {
field.set(new TimeOfDay(), 2, values, "2", null);
fail();
} catch (IllegalArgumentException ex) {}
assertEquals(true, Arrays.equals(values, expected));
}
public void test_convertText() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(0, field.convertText("0", null));
assertEquals(29, field.convertText("29", null));
try {
field.convertText("2A", null);
fail();
} catch (IllegalArgumentException ex) {}
try {
field.convertText(null, null);
fail();
} catch (IllegalArgumentException ex) {}
}
//------------------------------------------------------------------------
// public abstract DurationField getDurationField();
//
// public abstract DurationField getRangeDurationField();
public void test_isLeap_long() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(false, field.isLeap(0L));
}
public void test_getLeapAmount_long() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(0, field.getLeapAmount(0L));
}
public void test_getLeapDurationField() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(null, field.getLeapDurationField());
}
//-----------------------------------------------------------------------
public void test_getMinimumValue() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(3, field.getMinimumValue());
}
public void test_getMinimumValue_long() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(3, field.getMinimumValue(0L));
}
public void test_getMinimumValue_RP() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(3, field.getMinimumValue(new TimeOfDay()));
}
public void test_getMinimumValue_RP_intarray() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(3, field.getMinimumValue(new TimeOfDay(), new int[4]));
}
public void test_getMaximumValue() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(62, field.getMaximumValue());
}
public void test_getMaximumValue_long() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(62, field.getMaximumValue(0L));
}
public void test_getMaximumValue_RP() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(62, field.getMaximumValue(new TimeOfDay()));
}
public void test_getMaximumValue_RP_intarray() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(62, field.getMaximumValue(new TimeOfDay(), new int[4]));
}
//-----------------------------------------------------------------------
public void test_getMaximumTextLength_Locale() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(2, field.getMaximumTextLength(Locale.ENGLISH));
}
public void test_getMaximumShortTextLength_Locale() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(2, field.getMaximumShortTextLength(Locale.ENGLISH));
}
//------------------------------------------------------------------------
public void test_roundFloor_long() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(-2000L, field.roundFloor(-1001L));
assertEquals(-1000L, field.roundFloor(-1000L));
assertEquals(-1000L, field.roundFloor(-999L));
assertEquals(-1000L, field.roundFloor(-1L));
assertEquals(0L, field.roundFloor(0L));
assertEquals(0L, field.roundFloor(1L));
assertEquals(0L, field.roundFloor(499L));
assertEquals(0L, field.roundFloor(500L));
assertEquals(0L, field.roundFloor(501L));
assertEquals(1000L, field.roundFloor(1000L));
}
public void test_roundCeiling_long() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(-1000L, field.roundCeiling(-1001L));
assertEquals(-1000L, field.roundCeiling(-1000L));
assertEquals(0L, field.roundCeiling(-999L));
assertEquals(0L, field.roundCeiling(-1L));
assertEquals(0L, field.roundCeiling(0L));
assertEquals(1000L, field.roundCeiling(1L));
assertEquals(1000L, field.roundCeiling(499L));
assertEquals(1000L, field.roundCeiling(500L));
assertEquals(1000L, field.roundCeiling(501L));
assertEquals(1000L, field.roundCeiling(1000L));
}
public void test_roundHalfFloor_long() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(0L, field.roundHalfFloor(0L));
assertEquals(0L, field.roundHalfFloor(499L));
assertEquals(0L, field.roundHalfFloor(500L));
assertEquals(1000L, field.roundHalfFloor(501L));
assertEquals(1000L, field.roundHalfFloor(1000L));
}
public void test_roundHalfCeiling_long() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(0L, field.roundHalfCeiling(0L));
assertEquals(0L, field.roundHalfCeiling(499L));
assertEquals(1000L, field.roundHalfCeiling(500L));
assertEquals(1000L, field.roundHalfCeiling(501L));
assertEquals(1000L, field.roundHalfCeiling(1000L));
}
public void test_roundHalfEven_long() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(0L, field.roundHalfEven(0L));
assertEquals(0L, field.roundHalfEven(499L));
assertEquals(0L, field.roundHalfEven(500L));
assertEquals(1000L, field.roundHalfEven(501L));
assertEquals(1000L, field.roundHalfEven(1000L));
assertEquals(1000L, field.roundHalfEven(1499L));
assertEquals(2000L, field.roundHalfEven(1500L));
assertEquals(2000L, field.roundHalfEven(1501L));
}
public void test_remainder_long() {
OffsetDateTimeField field = new MockOffsetDateTimeField();
assertEquals(0L, field.remainder(0L));
assertEquals(499L, field.remainder(499L));
assertEquals(500L, field.remainder(500L));
assertEquals(501L, field.remainder(501L));
assertEquals(0L, field.remainder(1000L));
}
//-----------------------------------------------------------------------
static class MockOffsetDateTimeField extends OffsetDateTimeField {
protected MockOffsetDateTimeField() {
super(ISOChronology.getInstance().secondOfMinute(), 3);
}
}
static class MockStandardDateTimeField extends MockOffsetDateTimeField {
protected MockStandardDateTimeField() {
super();
}
public DurationField getDurationField() {
return ISOChronology.getInstanceUTC().seconds();
}
public DurationField getRangeDurationField() {
return ISOChronology.getInstanceUTC().minutes();
}
}
}