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 junit.framework.TestCase;
019 import junit.framework.TestSuite;
020
021 import org.joda.time.base.AbstractPartial;
022 import org.joda.time.chrono.BuddhistChronology;
023 import org.joda.time.chrono.ISOChronology;
024 import org.joda.time.field.AbstractPartialFieldProperty;
025
026 /**
027 * This class is a Junit unit test for YearMonthDay.
028 *
029 * @author Stephen Colebourne
030 */
031 public class TestAbstractPartial extends TestCase {
032
033 private static final DateTimeZone PARIS = DateTimeZone.forID("Europe/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
050 public static void main(String[] args) {
051 junit.textui.TestRunner.run(suite());
052 }
053
054 public static TestSuite suite() {
055 return new TestSuite(TestAbstractPartial.class);
056 }
057
058 public TestAbstractPartial(String name) {
059 super(name);
060 }
061
062 protected void setUp() throws Exception {
063 DateTimeUtils.setCurrentMillisFixed(TEST_TIME_NOW);
064 zone = DateTimeZone.getDefault();
065 DateTimeZone.setDefault(DateTimeZone.UTC);
066 }
067
068 protected void tearDown() throws Exception {
069 DateTimeUtils.setCurrentMillisSystem();
070 DateTimeZone.setDefault(zone);
071 zone = null;
072 }
073
074 //-----------------------------------------------------------------------
075 public void testGetValue() throws Throwable {
076 MockPartial mock = new MockPartial();
077 assertEquals(1970, mock.getValue(0));
078 assertEquals(1, mock.getValue(1));
079
080 try {
081 mock.getValue(-1);
082 fail();
083 } catch (IndexOutOfBoundsException ex) {}
084 try {
085 mock.getValue(2);
086 fail();
087 } catch (IndexOutOfBoundsException ex) {}
088 }
089
090 public void testGetValues() throws Throwable {
091 MockPartial mock = new MockPartial();
092 int[] vals = mock.getValues();
093 assertEquals(2, vals.length);
094 assertEquals(1970, vals[0]);
095 assertEquals(1, vals[1]);
096 }
097
098 public void testGetField() throws Throwable {
099 MockPartial mock = new MockPartial();
100 assertEquals(BuddhistChronology.getInstanceUTC().year(), mock.getField(0));
101 assertEquals(BuddhistChronology.getInstanceUTC().monthOfYear(), mock.getField(1));
102
103 try {
104 mock.getField(-1);
105 fail();
106 } catch (IndexOutOfBoundsException ex) {}
107 try {
108 mock.getField(2);
109 fail();
110 } catch (IndexOutOfBoundsException ex) {}
111 }
112
113 public void testGetFieldType() throws Throwable {
114 MockPartial mock = new MockPartial();
115 assertEquals(DateTimeFieldType.year(), mock.getFieldType(0));
116 assertEquals(DateTimeFieldType.monthOfYear(), mock.getFieldType(1));
117
118 try {
119 mock.getFieldType(-1);
120 fail();
121 } catch (IndexOutOfBoundsException ex) {}
122 try {
123 mock.getFieldType(2);
124 fail();
125 } catch (IndexOutOfBoundsException ex) {}
126 }
127
128 public void testGetFieldTypes() throws Throwable {
129 MockPartial mock = new MockPartial();
130 DateTimeFieldType[] vals = mock.getFieldTypes();
131 assertEquals(2, vals.length);
132 assertEquals(DateTimeFieldType.year(), vals[0]);
133 assertEquals(DateTimeFieldType.monthOfYear(), vals[1]);
134 }
135
136 public void testGetPropertyEquals() throws Throwable {
137 MockProperty0 prop0 = new MockProperty0();
138 assertEquals(true, prop0.equals(prop0));
139 assertEquals(true, prop0.equals(new MockProperty0()));
140 assertEquals(false, prop0.equals(new MockProperty1()));
141 assertEquals(false, prop0.equals(new MockProperty0Val()));
142 assertEquals(false, prop0.equals(new MockProperty0Field()));
143 assertEquals(false, prop0.equals(new MockProperty0Chrono()));
144 assertEquals(false, prop0.equals(""));
145 assertEquals(false, prop0.equals(null));
146 }
147
148 //-----------------------------------------------------------------------
149 static class MockPartial extends AbstractPartial {
150
151 int[] val = new int[] {1970, 1};
152
153 MockPartial() {
154 super();
155 }
156
157 protected DateTimeField getField(int index, Chronology chrono) {
158 switch (index) {
159 case 0:
160 return chrono.year();
161 case 1:
162 return chrono.monthOfYear();
163 default:
164 throw new IndexOutOfBoundsException();
165 }
166 }
167
168 public int size() {
169 return 2;
170 }
171
172 public int getValue(int index) {
173 return val[index];
174 }
175
176 public void setValue(int index, int value) {
177 val[index] = value;
178 }
179
180 public Chronology getChronology() {
181 return BuddhistChronology.getInstanceUTC();
182 }
183 }
184
185 static class MockProperty0 extends AbstractPartialFieldProperty {
186 MockPartial partial = new MockPartial();
187 public DateTimeField getField() {
188 return partial.getField(0);
189 }
190 public ReadablePartial getReadablePartial() {
191 return partial;
192 }
193 public int get() {
194 return partial.getValue(0);
195 }
196 }
197 static class MockProperty1 extends AbstractPartialFieldProperty {
198 MockPartial partial = new MockPartial();
199 public DateTimeField getField() {
200 return partial.getField(1);
201 }
202 public ReadablePartial getReadablePartial() {
203 return partial;
204 }
205 public int get() {
206 return partial.getValue(1);
207 }
208 }
209 static class MockProperty0Field extends MockProperty0 {
210 public DateTimeField getField() {
211 return BuddhistChronology.getInstanceUTC().hourOfDay();
212 }
213 }
214 static class MockProperty0Val extends MockProperty0 {
215 public int get() {
216 return 99;
217 }
218 }
219 static class MockProperty0Chrono extends MockProperty0 {
220 public ReadablePartial getReadablePartial() {
221 return new MockPartial() {
222 public Chronology getChronology() {
223 return ISOChronology.getInstanceUTC();
224 }
225 };
226 }
227 }
228 }