1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.joda.time;
17
18 import java.io.ByteArrayInputStream;
19 import java.io.ByteArrayOutputStream;
20 import java.io.ObjectInputStream;
21 import java.io.ObjectOutputStream;
22 import java.lang.reflect.Modifier;
23 import java.util.Date;
24 import java.util.Locale;
25 import java.util.TimeZone;
26
27 import junit.framework.TestCase;
28 import junit.framework.TestSuite;
29
30 import org.joda.time.base.AbstractInstant;
31 import org.joda.time.chrono.GregorianChronology;
32 import org.joda.time.chrono.ISOChronology;
33
34
35
36
37
38
39 public class TestInstant_Basics extends TestCase {
40
41
42
43 private static final DateTimeZone PARIS = DateTimeZone.forID("Europe/Paris");
44 private static final DateTimeZone LONDON = DateTimeZone.forID("Europe/London");
45
46 long y2002days = 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 +
47 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 +
48 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 +
49 366 + 365;
50 long y2003days = 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 +
51 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 +
52 365 + 365 + 366 + 365 + 365 + 365 + 366 + 365 + 365 + 365 +
53 366 + 365 + 365;
54
55
56 private long TEST_TIME_NOW =
57 (y2002days + 31L + 28L + 31L + 30L + 31L + 9L -1L) * DateTimeConstants.MILLIS_PER_DAY;
58
59
60 private long TEST_TIME1 =
61 (y2002days + 31L + 28L + 31L + 5L -1L) * DateTimeConstants.MILLIS_PER_DAY
62 + 12L * DateTimeConstants.MILLIS_PER_HOUR
63 + 24L * DateTimeConstants.MILLIS_PER_MINUTE;
64
65
66 private long TEST_TIME2 =
67 (y2003days + 31L + 28L + 31L + 30L + 6L -1L) * DateTimeConstants.MILLIS_PER_DAY
68 + 14L * DateTimeConstants.MILLIS_PER_HOUR
69 + 28L * DateTimeConstants.MILLIS_PER_MINUTE;
70
71 private DateTimeZone originalDateTimeZone = null;
72 private TimeZone originalTimeZone = null;
73 private Locale originalLocale = null;
74
75 public static void main(String[] args) {
76 junit.textui.TestRunner.run(suite());
77 }
78
79 public static TestSuite suite() {
80 return new TestSuite(TestInstant_Basics.class);
81 }
82
83 public TestInstant_Basics(String name) {
84 super(name);
85 }
86
87 protected void setUp() throws Exception {
88 DateTimeUtils.setCurrentMillisFixed(TEST_TIME_NOW);
89 originalDateTimeZone = DateTimeZone.getDefault();
90 originalTimeZone = TimeZone.getDefault();
91 originalLocale = Locale.getDefault();
92 DateTimeZone.setDefault(LONDON);
93 TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
94 Locale.setDefault(Locale.UK);
95 }
96
97 protected void tearDown() throws Exception {
98 DateTimeUtils.setCurrentMillisSystem();
99 DateTimeZone.setDefault(originalDateTimeZone);
100 TimeZone.setDefault(originalTimeZone);
101 Locale.setDefault(originalLocale);
102 originalDateTimeZone = null;
103 originalTimeZone = null;
104 originalLocale = null;
105 }
106
107
108 public void testTest() {
109 assertEquals("2002-06-09T00:00:00.000Z", new Instant(TEST_TIME_NOW).toString());
110 assertEquals("2002-04-05T12:24:00.000Z", new Instant(TEST_TIME1).toString());
111 assertEquals("2003-05-06T14:28:00.000Z", new Instant(TEST_TIME2).toString());
112 }
113
114
115 public void testGet_DateTimeFieldType() {
116 Instant test = new Instant();
117 assertEquals(1, test.get(DateTimeFieldType.era()));
118 assertEquals(20, test.get(DateTimeFieldType.centuryOfEra()));
119 assertEquals(2, test.get(DateTimeFieldType.yearOfCentury()));
120 assertEquals(2002, test.get(DateTimeFieldType.yearOfEra()));
121 assertEquals(2002, test.get(DateTimeFieldType.year()));
122 assertEquals(6, test.get(DateTimeFieldType.monthOfYear()));
123 assertEquals(9, test.get(DateTimeFieldType.dayOfMonth()));
124 assertEquals(2002, test.get(DateTimeFieldType.weekyear()));
125 assertEquals(23, test.get(DateTimeFieldType.weekOfWeekyear()));
126 assertEquals(7, test.get(DateTimeFieldType.dayOfWeek()));
127 assertEquals(160, test.get(DateTimeFieldType.dayOfYear()));
128 assertEquals(0, test.get(DateTimeFieldType.halfdayOfDay()));
129 assertEquals(0, test.get(DateTimeFieldType.hourOfHalfday()));
130 assertEquals(24, test.get(DateTimeFieldType.clockhourOfDay()));
131 assertEquals(12, test.get(DateTimeFieldType.clockhourOfHalfday()));
132 assertEquals(0, test.get(DateTimeFieldType.hourOfDay()));
133 assertEquals(0, test.get(DateTimeFieldType.minuteOfHour()));
134 assertEquals(0, test.get(DateTimeFieldType.minuteOfDay()));
135 assertEquals(0, test.get(DateTimeFieldType.secondOfMinute()));
136 assertEquals(0, test.get(DateTimeFieldType.secondOfDay()));
137 assertEquals(0, test.get(DateTimeFieldType.millisOfSecond()));
138 assertEquals(0, test.get(DateTimeFieldType.millisOfDay()));
139 try {
140 test.get((DateTimeFieldType) null);
141 fail();
142 } catch (IllegalArgumentException ex) {}
143 }
144
145 public void testGet_DateTimeField() {
146 Instant test = new Instant();
147 assertEquals(1, test.get(ISOChronology.getInstance().era()));
148 assertEquals(20, test.get(ISOChronology.getInstance().centuryOfEra()));
149 assertEquals(2, test.get(ISOChronology.getInstance().yearOfCentury()));
150 assertEquals(2002, test.get(ISOChronology.getInstance().yearOfEra()));
151 assertEquals(2002, test.get(ISOChronology.getInstance().year()));
152 assertEquals(6, test.get(ISOChronology.getInstance().monthOfYear()));
153 assertEquals(9, test.get(ISOChronology.getInstance().dayOfMonth()));
154 assertEquals(2002, test.get(ISOChronology.getInstance().weekyear()));
155 assertEquals(23, test.get(ISOChronology.getInstance().weekOfWeekyear()));
156 assertEquals(7, test.get(ISOChronology.getInstance().dayOfWeek()));
157 assertEquals(160, test.get(ISOChronology.getInstance().dayOfYear()));
158 assertEquals(0, test.get(ISOChronology.getInstance().halfdayOfDay()));
159 assertEquals(1, test.get(ISOChronology.getInstance().hourOfHalfday()));
160 assertEquals(1, test.get(ISOChronology.getInstance().clockhourOfDay()));
161 assertEquals(1, test.get(ISOChronology.getInstance().clockhourOfHalfday()));
162 assertEquals(1, test.get(ISOChronology.getInstance().hourOfDay()));
163 assertEquals(0, test.get(ISOChronology.getInstance().minuteOfHour()));
164 assertEquals(60, test.get(ISOChronology.getInstance().minuteOfDay()));
165 assertEquals(0, test.get(ISOChronology.getInstance().secondOfMinute()));
166 assertEquals(60 * 60, test.get(ISOChronology.getInstance().secondOfDay()));
167 assertEquals(0, test.get(ISOChronology.getInstance().millisOfSecond()));
168 assertEquals(60 * 60 * 1000, test.get(ISOChronology.getInstance().millisOfDay()));
169 try {
170 test.get((DateTimeField) null);
171 fail();
172 } catch (IllegalArgumentException ex) {}
173 }
174
175 public void testGetMethods() {
176 Instant test = new Instant();
177
178 assertEquals(ISOChronology.getInstanceUTC(), test.getChronology());
179 assertEquals(DateTimeZone.UTC, test.getZone());
180 assertEquals(TEST_TIME_NOW, test.getMillis());
181 }
182
183 public void testEqualsHashCode() {
184 Instant test1 = new Instant(TEST_TIME1);
185 Instant test2 = new Instant(TEST_TIME1);
186 assertEquals(true, test1.equals(test2));
187 assertEquals(true, test2.equals(test1));
188 assertEquals(true, test1.equals(test1));
189 assertEquals(true, test2.equals(test2));
190 assertEquals(true, test1.hashCode() == test2.hashCode());
191 assertEquals(true, test1.hashCode() == test1.hashCode());
192 assertEquals(true, test2.hashCode() == test2.hashCode());
193
194 Instant test3 = new Instant(TEST_TIME2);
195 assertEquals(false, test1.equals(test3));
196 assertEquals(false, test2.equals(test3));
197 assertEquals(false, test3.equals(test1));
198 assertEquals(false, test3.equals(test2));
199 assertEquals(false, test1.hashCode() == test3.hashCode());
200 assertEquals(false, test2.hashCode() == test3.hashCode());
201
202 assertEquals(false, test1.equals("Hello"));
203 assertEquals(true, test1.equals(new MockInstant()));
204 assertEquals(false, test1.equals(new DateTime(TEST_TIME1)));
205 }
206
207 class MockInstant extends AbstractInstant {
208 public String toString() {
209 return null;
210 }
211 public long getMillis() {
212 return TEST_TIME1;
213 }
214 public Chronology getChronology() {
215 return ISOChronology.getInstanceUTC();
216 }
217 }
218
219 public void testCompareTo() {
220 Instant test1 = new Instant(TEST_TIME1);
221 Instant test1a = new Instant(TEST_TIME1);
222 assertEquals(0, test1.compareTo(test1a));
223 assertEquals(0, test1a.compareTo(test1));
224 assertEquals(0, test1.compareTo(test1));
225 assertEquals(0, test1a.compareTo(test1a));
226
227 Instant test2 = new Instant(TEST_TIME2);
228 assertEquals(-1, test1.compareTo(test2));
229 assertEquals(+1, test2.compareTo(test1));
230
231 DateTime test3 = new DateTime(TEST_TIME2, GregorianChronology.getInstance(PARIS));
232 assertEquals(-1, test1.compareTo(test3));
233 assertEquals(+1, test3.compareTo(test1));
234 assertEquals(0, test3.compareTo(test2));
235
236 assertEquals(+1, test2.compareTo(new MockInstant()));
237 assertEquals(0, test1.compareTo(new MockInstant()));
238
239 try {
240 test1.compareTo(null);
241 fail();
242 } catch (NullPointerException ex) {}
243
244
245
246
247 }
248
249
250 public void testIsEqual_long() {
251 assertEquals(false, new Instant(TEST_TIME1).isEqual(TEST_TIME2));
252 assertEquals(true, new Instant(TEST_TIME1).isEqual(TEST_TIME1));
253 assertEquals(false, new Instant(TEST_TIME2).isEqual(TEST_TIME1));
254 }
255
256 public void testIsEqualNow() {
257 assertEquals(false, new Instant(TEST_TIME_NOW - 1).isEqualNow());
258 assertEquals(true, new Instant(TEST_TIME_NOW).isEqualNow());
259 assertEquals(false, new Instant(TEST_TIME_NOW + 1).isEqualNow());
260 }
261
262 public void testIsEqual_RI() {
263 Instant test1 = new Instant(TEST_TIME1);
264 Instant test1a = new Instant(TEST_TIME1);
265 assertEquals(true, test1.isEqual(test1a));
266 assertEquals(true, test1a.isEqual(test1));
267 assertEquals(true, test1.isEqual(test1));
268 assertEquals(true, test1a.isEqual(test1a));
269
270 Instant test2 = new Instant(TEST_TIME2);
271 assertEquals(false, test1.isEqual(test2));
272 assertEquals(false, test2.isEqual(test1));
273
274 DateTime test3 = new DateTime(TEST_TIME2, GregorianChronology.getInstance(PARIS));
275 assertEquals(false, test1.isEqual(test3));
276 assertEquals(false, test3.isEqual(test1));
277 assertEquals(true, test3.isEqual(test2));
278
279 assertEquals(false, test2.isEqual(new MockInstant()));
280 assertEquals(true, test1.isEqual(new MockInstant()));
281
282 assertEquals(false, new Instant(TEST_TIME_NOW + 1).isEqual(null));
283 assertEquals(true, new Instant(TEST_TIME_NOW).isEqual(null));
284 assertEquals(false, new Instant(TEST_TIME_NOW - 1).isEqual(null));
285 }
286
287
288 public void testIsBefore_long() {
289 assertEquals(true, new Instant(TEST_TIME1).isBefore(TEST_TIME2));
290 assertEquals(false, new Instant(TEST_TIME1).isBefore(TEST_TIME1));
291 assertEquals(false, new Instant(TEST_TIME2).isBefore(TEST_TIME1));
292 }
293
294 public void testIsBeforeNow() {
295 assertEquals(true, new Instant(TEST_TIME_NOW - 1).isBeforeNow());
296 assertEquals(false, new Instant(TEST_TIME_NOW).isBeforeNow());
297 assertEquals(false, new Instant(TEST_TIME_NOW + 1).isBeforeNow());
298 }
299
300 public void testIsBefore_RI() {
301 Instant test1 = new Instant(TEST_TIME1);
302 Instant test1a = new Instant(TEST_TIME1);
303 assertEquals(false, test1.isBefore(test1a));
304 assertEquals(false, test1a.isBefore(test1));
305 assertEquals(false, test1.isBefore(test1));
306 assertEquals(false, test1a.isBefore(test1a));
307
308 Instant test2 = new Instant(TEST_TIME2);
309 assertEquals(true, test1.isBefore(test2));
310 assertEquals(false, test2.isBefore(test1));
311
312 DateTime test3 = new DateTime(TEST_TIME2, GregorianChronology.getInstance(PARIS));
313 assertEquals(true, test1.isBefore(test3));
314 assertEquals(false, test3.isBefore(test1));
315 assertEquals(false, test3.isBefore(test2));
316
317 assertEquals(false, test2.isBefore(new MockInstant()));
318 assertEquals(false, test1.isBefore(new MockInstant()));
319
320 assertEquals(false, new Instant(TEST_TIME_NOW + 1).isBefore(null));
321 assertEquals(false, new Instant(TEST_TIME_NOW).isBefore(null));
322 assertEquals(true, new Instant(TEST_TIME_NOW - 1).isBefore(null));
323 }
324
325
326 public void testIsAfter_long() {
327 assertEquals(false, new Instant(TEST_TIME1).isAfter(TEST_TIME2));
328 assertEquals(false, new Instant(TEST_TIME1).isAfter(TEST_TIME1));
329 assertEquals(true, new Instant(TEST_TIME2).isAfter(TEST_TIME1));
330 }
331
332 public void testIsAfterNow() {
333 assertEquals(false, new Instant(TEST_TIME_NOW - 1).isAfterNow());
334 assertEquals(false, new Instant(TEST_TIME_NOW).isAfterNow());
335 assertEquals(true, new Instant(TEST_TIME_NOW + 1).isAfterNow());
336 }
337
338 public void testIsAfter_RI() {
339 Instant test1 = new Instant(TEST_TIME1);
340 Instant test1a = new Instant(TEST_TIME1);
341 assertEquals(false, test1.isAfter(test1a));
342 assertEquals(false, test1a.isAfter(test1));
343 assertEquals(false, test1.isAfter(test1));
344 assertEquals(false, test1a.isAfter(test1a));
345
346 Instant test2 = new Instant(TEST_TIME2);
347 assertEquals(false, test1.isAfter(test2));
348 assertEquals(true, test2.isAfter(test1));
349
350 DateTime test3 = new DateTime(TEST_TIME2, GregorianChronology.getInstance(PARIS));
351 assertEquals(false, test1.isAfter(test3));
352 assertEquals(true, test3.isAfter(test1));
353 assertEquals(false, test3.isAfter(test2));
354
355 assertEquals(true, test2.isAfter(new MockInstant()));
356 assertEquals(false, test1.isAfter(new MockInstant()));
357
358 assertEquals(true, new Instant(TEST_TIME_NOW + 1).isAfter(null));
359 assertEquals(false, new Instant(TEST_TIME_NOW).isAfter(null));
360 assertEquals(false, new Instant(TEST_TIME_NOW - 1).isAfter(null));
361 }
362
363
364 public void testSerialization() throws Exception {
365 Instant test = new Instant(TEST_TIME_NOW);
366
367 ByteArrayOutputStream baos = new ByteArrayOutputStream();
368 ObjectOutputStream oos = new ObjectOutputStream(baos);
369 oos.writeObject(test);
370 byte[] bytes = baos.toByteArray();
371 oos.close();
372
373 ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
374 ObjectInputStream ois = new ObjectInputStream(bais);
375 Instant result = (Instant) ois.readObject();
376 ois.close();
377
378 assertEquals(test, result);
379 }
380
381
382 public void testToString() {
383 Instant test = new Instant(TEST_TIME_NOW);
384 assertEquals("2002-06-09T00:00:00.000Z", test.toString());
385 }
386
387
388 public void testToInstant() {
389 Instant test = new Instant(TEST_TIME1);
390 Instant result = test.toInstant();
391 assertSame(test, result);
392 }
393
394 public void testToDateTime() {
395 Instant test = new Instant(TEST_TIME1);
396 DateTime result = test.toDateTime();
397 assertEquals(TEST_TIME1, result.getMillis());
398 assertEquals(ISOChronology.getInstance(), result.getChronology());
399 }
400
401 public void testToDateTimeISO() {
402 Instant test = new Instant(TEST_TIME1);
403 DateTime result = test.toDateTimeISO();
404 assertSame(DateTime.class, result.getClass());
405 assertSame(ISOChronology.class, result.getChronology().getClass());
406 assertEquals(test.getMillis(), result.getMillis());
407 assertEquals(ISOChronology.getInstance(), result.getChronology());
408 }
409
410 public void testToDateTime_DateTimeZone() {
411 Instant test = new Instant(TEST_TIME1);
412 DateTime result = test.toDateTime(LONDON);
413 assertEquals(test.getMillis(), result.getMillis());
414 assertEquals(ISOChronology.getInstance(LONDON), result.getChronology());
415
416 test = new Instant(TEST_TIME1);
417 result = test.toDateTime(PARIS);
418 assertEquals(test.getMillis(), result.getMillis());
419 assertEquals(ISOChronology.getInstance(PARIS), result.getChronology());
420
421 test = new Instant(TEST_TIME1);
422 result = test.toDateTime((DateTimeZone) null);
423 assertEquals(test.getMillis(), result.getMillis());
424 assertEquals(ISOChronology.getInstance(), result.getChronology());
425 }
426
427 public void testToDateTime_Chronology() {
428 Instant test = new Instant(TEST_TIME1);
429 DateTime result = test.toDateTime(ISOChronology.getInstance());
430 assertEquals(test.getMillis(), result.getMillis());
431 assertEquals(ISOChronology.getInstance(), result.getChronology());
432
433 test = new Instant(TEST_TIME1);
434 result = test.toDateTime(GregorianChronology.getInstance(PARIS));
435 assertEquals(test.getMillis(), result.getMillis());
436 assertEquals(GregorianChronology.getInstance(PARIS), result.getChronology());
437
438 test = new Instant(TEST_TIME1);
439 result = test.toDateTime((Chronology) null);
440 assertEquals(ISOChronology.getInstance(), result.getChronology());
441 }
442
443 public void testToMutableDateTime() {
444 Instant test = new Instant(TEST_TIME1);
445 MutableDateTime result = test.toMutableDateTime();
446 assertEquals(test.getMillis(), result.getMillis());
447 assertEquals(ISOChronology.getInstance(), result.getChronology());
448 }
449
450 public void testToMutableDateTimeISO() {
451 Instant test = new Instant(TEST_TIME1);
452 MutableDateTime result = test.toMutableDateTimeISO();
453 assertSame(MutableDateTime.class, result.getClass());
454 assertSame(ISOChronology.class, result.getChronology().getClass());
455 assertEquals(test.getMillis(), result.getMillis());
456 assertEquals(ISOChronology.getInstance(), result.getChronology());
457 }
458
459 public void testToMutableDateTime_DateTimeZone() {
460 Instant test = new Instant(TEST_TIME1);
461 MutableDateTime result = test.toMutableDateTime(LONDON);
462 assertEquals(test.getMillis(), result.getMillis());
463 assertEquals(ISOChronology.getInstance(), result.getChronology());
464
465 test = new Instant(TEST_TIME1);
466 result = test.toMutableDateTime(PARIS);
467 assertEquals(test.getMillis(), result.getMillis());
468 assertEquals(ISOChronology.getInstance(PARIS), result.getChronology());
469
470 test = new Instant(TEST_TIME1);
471 result = test.toMutableDateTime((DateTimeZone) null);
472 assertEquals(test.getMillis(), result.getMillis());
473 assertEquals(ISOChronology.getInstance(), result.getChronology());
474 }
475
476 public void testToMutableDateTime_Chronology() {
477 Instant test = new Instant(TEST_TIME1);
478 MutableDateTime result = test.toMutableDateTime(ISOChronology.getInstance());
479 assertEquals(test.getMillis(), result.getMillis());
480 assertEquals(ISOChronology.getInstance(), result.getChronology());
481
482 test = new Instant(TEST_TIME1);
483 result = test.toMutableDateTime(GregorianChronology.getInstance(PARIS));
484 assertEquals(test.getMillis(), result.getMillis());
485 assertEquals(GregorianChronology.getInstance(PARIS), result.getChronology());
486
487 test = new Instant(TEST_TIME1);
488 result = test.toMutableDateTime((Chronology) null);
489 assertEquals(test.getMillis(), result.getMillis());
490 assertEquals(ISOChronology.getInstance(), result.getChronology());
491 }
492
493 public void testToDate() {
494 Instant test = new Instant(TEST_TIME1);
495 Date result = test.toDate();
496 assertEquals(test.getMillis(), result.getTime());
497 }
498
499
500 public void testWithMillis_long() {
501 Instant test = new Instant(TEST_TIME1);
502 Instant result = test.withMillis(TEST_TIME2);
503 assertEquals(TEST_TIME2, result.getMillis());
504 assertEquals(test.getChronology(), result.getChronology());
505
506 test = new Instant(TEST_TIME1);
507 result = test.withMillis(TEST_TIME1);
508 assertSame(test, result);
509 }
510
511
512 public void testWithDurationAdded_long_int() {
513 Instant test = new Instant(TEST_TIME1);
514 Instant result = test.withDurationAdded(123456789L, 1);
515 Instant expected = new Instant(TEST_TIME1 + 123456789L);
516 assertEquals(expected, result);
517
518 result = test.withDurationAdded(123456789L, 0);
519 assertSame(test, result);
520
521 result = test.withDurationAdded(123456789L, 2);
522 expected = new Instant(TEST_TIME1 + (2L * 123456789L));
523 assertEquals(expected, result);
524
525 result = test.withDurationAdded(123456789L, -3);
526 expected = new Instant(TEST_TIME1 - (3L * 123456789L));
527 assertEquals(expected, result);
528 }
529
530
531 public void testWithDurationAdded_RD_int() {
532 Instant test = new Instant(TEST_TIME1);
533 Instant result = test.withDurationAdded(new Duration(123456789L), 1);
534 Instant expected = new Instant(TEST_TIME1 + 123456789L);
535 assertEquals(expected, result);
536
537 result = test.withDurationAdded(null, 1);
538 assertSame(test, result);
539
540 result = test.withDurationAdded(new Duration(123456789L), 0);
541 assertSame(test, result);
542
543 result = test.withDurationAdded(new Duration(123456789L), 2);
544 expected = new Instant(TEST_TIME1 + (2L * 123456789L));
545 assertEquals(expected, result);
546
547 result = test.withDurationAdded(new Duration(123456789L), -3);
548 expected = new Instant(TEST_TIME1 - (3L * 123456789L));
549 assertEquals(expected, result);
550 }
551
552
553 public void testPlus_long() {
554 Instant test = new Instant(TEST_TIME1);
555 Instant result = test.plus(123456789L);
556 Instant expected = new Instant(TEST_TIME1 + 123456789L);
557 assertEquals(expected, result);
558 }
559
560 public void testPlus_RD() {
561 Instant test = new Instant(TEST_TIME1);
562 Instant result = test.plus(new Duration(123456789L));
563 Instant expected = new Instant(TEST_TIME1 + 123456789L);
564 assertEquals(expected, result);
565
566 result = test.plus((ReadableDuration) null);
567 assertSame(test, result);
568 }
569
570
571 public void testMinus_long() {
572 Instant test = new Instant(TEST_TIME1);
573 Instant result = test.minus(123456789L);
574 Instant expected = new Instant(TEST_TIME1 - 123456789L);
575 assertEquals(expected, result);
576 }
577
578 public void testMinus_RD() {
579 Instant test = new Instant(TEST_TIME1);
580 Instant result = test.minus(new Duration(123456789L));
581 Instant expected = new Instant(TEST_TIME1 - 123456789L);
582 assertEquals(expected, result);
583
584 result = test.minus((ReadableDuration) null);
585 assertSame(test, result);
586 }
587
588
589 public void testImmutable() {
590 assertTrue(Modifier.isFinal(Instant.class.getModifiers()));
591 }
592
593 }