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.field; 017 018 import java.util.Arrays; 019 import java.util.Locale; 020 021 import junit.framework.TestCase; 022 import junit.framework.TestSuite; 023 024 import org.joda.time.DateTimeFieldType; 025 import org.joda.time.DurationField; 026 import org.joda.time.DurationFieldType; 027 import org.joda.time.TimeOfDay; 028 import org.joda.time.chrono.ISOChronology; 029 030 /** 031 * This class is a Junit unit test for PreciseDurationDateTimeField. 032 * 033 * @author Stephen Colebourne 034 */ 035 public class TestPreciseDurationDateTimeField extends TestCase { 036 037 public static void main(String[] args) { 038 junit.textui.TestRunner.run(suite()); 039 } 040 041 public static TestSuite suite() { 042 return new TestSuite(TestPreciseDurationDateTimeField.class); 043 } 044 045 public TestPreciseDurationDateTimeField(String name) { 046 super(name); 047 } 048 049 protected void setUp() throws Exception { 050 } 051 052 protected void tearDown() throws Exception { 053 } 054 055 //----------------------------------------------------------------------- 056 public void test_constructor() { 057 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 058 assertEquals(DateTimeFieldType.secondOfMinute(), field.getType()); 059 try { 060 field = new MockPreciseDurationDateTimeField(null, null); 061 fail(); 062 } catch (IllegalArgumentException ex) {} 063 try { 064 field = new MockPreciseDurationDateTimeField( 065 DateTimeFieldType.minuteOfHour(), 066 new MockImpreciseDurationField(DurationFieldType.minutes())); 067 fail(); 068 } catch (IllegalArgumentException ex) {} 069 try { 070 field = new MockPreciseDurationDateTimeField( 071 DateTimeFieldType.minuteOfHour(), 072 new MockZeroDurationField(DurationFieldType.minutes())); 073 fail(); 074 } catch (IllegalArgumentException ex) {} 075 } 076 077 public void test_getType() { 078 BaseDateTimeField field = new MockPreciseDurationDateTimeField( 079 DateTimeFieldType.secondOfDay(), new MockCountingDurationField(DurationFieldType.minutes())); 080 assertEquals(DateTimeFieldType.secondOfDay(), field.getType()); 081 } 082 083 public void test_getName() { 084 BaseDateTimeField field = new MockPreciseDurationDateTimeField( 085 DateTimeFieldType.secondOfDay(), new MockCountingDurationField(DurationFieldType.minutes())); 086 assertEquals("secondOfDay", field.getName()); 087 } 088 089 public void test_toString() { 090 BaseDateTimeField field = new MockPreciseDurationDateTimeField( 091 DateTimeFieldType.secondOfDay(), new MockCountingDurationField(DurationFieldType.minutes())); 092 assertEquals("DateTimeField[secondOfDay]", field.toString()); 093 } 094 095 public void test_isSupported() { 096 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 097 assertEquals(true, field.isSupported()); 098 } 099 100 public void test_isLenient() { 101 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 102 assertEquals(false, field.isLenient()); 103 } 104 105 public void test_get() { 106 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 107 assertEquals(0, field.get(0)); 108 assertEquals(1, field.get(60)); 109 assertEquals(2, field.get(123)); 110 } 111 112 //----------------------------------------------------------------------- 113 public void test_getAsText_long_Locale() { 114 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 115 assertEquals("29", field.getAsText(60L * 29, Locale.ENGLISH)); 116 assertEquals("29", field.getAsText(60L * 29, null)); 117 } 118 119 public void test_getAsText_long() { 120 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 121 assertEquals("29", field.getAsText(60L * 29)); 122 } 123 124 public void test_getAsText_RP_int_Locale() { 125 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 126 assertEquals("20", field.getAsText(new TimeOfDay(12, 30, 40, 50), 20, Locale.ENGLISH)); 127 assertEquals("20", field.getAsText(new TimeOfDay(12, 30, 40, 50), 20, null)); 128 } 129 130 public void test_getAsText_RP_Locale() { 131 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 132 assertEquals("40", field.getAsText(new TimeOfDay(12, 30, 40, 50), Locale.ENGLISH)); 133 assertEquals("40", field.getAsText(new TimeOfDay(12, 30, 40, 50), null)); 134 } 135 136 public void test_getAsText_int_Locale() { 137 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 138 assertEquals("80", field.getAsText(80, Locale.ENGLISH)); 139 assertEquals("80", field.getAsText(80, null)); 140 } 141 142 //----------------------------------------------------------------------- 143 public void test_getAsShortText_long_Locale() { 144 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 145 assertEquals("29", field.getAsShortText(60L * 29, Locale.ENGLISH)); 146 assertEquals("29", field.getAsShortText(60L * 29, null)); 147 } 148 149 public void test_getAsShortText_long() { 150 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 151 assertEquals("29", field.getAsShortText(60L * 29)); 152 } 153 154 public void test_getAsShortText_RP_int_Locale() { 155 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 156 assertEquals("20", field.getAsShortText(new TimeOfDay(12, 30, 40, 50), 20, Locale.ENGLISH)); 157 assertEquals("20", field.getAsShortText(new TimeOfDay(12, 30, 40, 50), 20, null)); 158 } 159 160 public void test_getAsShortText_RP_Locale() { 161 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 162 assertEquals("40", field.getAsShortText(new TimeOfDay(12, 30, 40, 50), Locale.ENGLISH)); 163 assertEquals("40", field.getAsShortText(new TimeOfDay(12, 30, 40, 50), null)); 164 } 165 166 public void test_getAsShortText_int_Locale() { 167 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 168 assertEquals("80", field.getAsShortText(80, Locale.ENGLISH)); 169 assertEquals("80", field.getAsShortText(80, null)); 170 } 171 172 //----------------------------------------------------------------------- 173 public void test_add_long_int() { 174 MockCountingDurationField.add_int = 0; 175 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 176 assertEquals(61, field.add(1L, 1)); 177 assertEquals(1, MockCountingDurationField.add_int); 178 } 179 180 public void test_add_long_long() { 181 MockCountingDurationField.add_long = 0; 182 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 183 assertEquals(61, field.add(1L, 1L)); 184 assertEquals(1, MockCountingDurationField.add_long); 185 } 186 187 public void test_add_RP_int_intarray_int() { 188 int[] values = new int[] {10, 20, 30, 40}; 189 int[] expected = new int[] {10, 20, 30, 40}; 190 BaseDateTimeField field = new MockStandardBaseDateTimeField(); 191 int[] result = field.add(new TimeOfDay(), 2, values, 0); 192 assertEquals(true, Arrays.equals(expected, result)); 193 194 values = new int[] {10, 20, 30, 40}; 195 expected = new int[] {10, 20, 31, 40}; 196 result = field.add(new TimeOfDay(), 2, values, 1); 197 assertEquals(true, Arrays.equals(expected, result)); 198 199 values = new int[] {10, 20, 30, 40}; 200 expected = new int[] {10, 21, 0, 40}; 201 result = field.add(new TimeOfDay(), 2, values, 30); 202 assertEquals(true, Arrays.equals(expected, result)); 203 204 values = new int[] {23, 59, 30, 40}; 205 try { 206 field.add(new TimeOfDay(), 2, values, 30); 207 fail(); 208 } catch (IllegalArgumentException ex) {} 209 210 values = new int[] {10, 20, 30, 40}; 211 expected = new int[] {10, 20, 29, 40}; 212 result = field.add(new TimeOfDay(), 2, values, -1); 213 assertEquals(true, Arrays.equals(expected, result)); 214 215 values = new int[] {10, 20, 30, 40}; 216 expected = new int[] {10, 19, 59, 40}; 217 result = field.add(new TimeOfDay(), 2, values, -31); 218 assertEquals(true, Arrays.equals(expected, result)); 219 220 values = new int[] {0, 0, 30, 40}; 221 try { 222 field.add(new TimeOfDay(), 2, values, -31); 223 fail(); 224 } catch (IllegalArgumentException ex) {} 225 } 226 227 //----------------------------------------------------------------------- 228 public void test_addWrapField_long_int() { 229 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 230 assertEquals(29 * 60L, field.addWrapField(60L * 29, 0)); 231 assertEquals(59 * 60L, field.addWrapField(60L * 29, 30)); 232 assertEquals(0 * 60L, field.addWrapField(60L * 29, 31)); 233 } 234 235 public void test_addWrapField_RP_int_intarray_int() { 236 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 237 int[] values = new int[] {10, 20, 30, 40}; 238 int[] expected = new int[] {10, 20, 30, 40}; 239 int[] result = field.addWrapField(new TimeOfDay(), 2, values, 0); 240 assertEquals(true, Arrays.equals(result, expected)); 241 242 values = new int[] {10, 20, 30, 40}; 243 expected = new int[] {10, 20, 59, 40}; 244 result = field.addWrapField(new TimeOfDay(), 2, values, 29); 245 assertEquals(true, Arrays.equals(result, expected)); 246 247 values = new int[] {10, 20, 30, 40}; 248 expected = new int[] {10, 20, 0, 40}; 249 result = field.addWrapField(new TimeOfDay(), 2, values, 30); 250 assertEquals(true, Arrays.equals(result, expected)); 251 252 values = new int[] {10, 20, 30, 40}; 253 expected = new int[] {10, 20, 1, 40}; 254 result = field.addWrapField(new TimeOfDay(), 2, values, 31); 255 assertEquals(true, Arrays.equals(result, expected)); 256 } 257 258 //----------------------------------------------------------------------- 259 public void test_getDifference_long_long() { 260 MockCountingDurationField.difference_long = 0; 261 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 262 assertEquals(30, field.getDifference(0L, 0L)); 263 assertEquals(1, MockCountingDurationField.difference_long); 264 } 265 266 public void test_getDifferenceAsLong_long_long() { 267 MockCountingDurationField.difference_long = 0; 268 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 269 assertEquals(30, field.getDifferenceAsLong(0L, 0L)); 270 assertEquals(1, MockCountingDurationField.difference_long); 271 } 272 273 //----------------------------------------------------------------------- 274 public void test_set_long_int() { 275 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 276 assertEquals(0, field.set(120L, 0)); 277 assertEquals(29 * 60, field.set(120L, 29)); 278 } 279 280 public void test_set_RP_int_intarray_int() { 281 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 282 int[] values = new int[] {10, 20, 30, 40}; 283 int[] expected = new int[] {10, 20, 30, 40}; 284 int[] result = field.set(new TimeOfDay(), 2, values, 30); 285 assertEquals(true, Arrays.equals(result, expected)); 286 287 values = new int[] {10, 20, 30, 40}; 288 expected = new int[] {10, 20, 29, 40}; 289 result = field.set(new TimeOfDay(), 2, values, 29); 290 assertEquals(true, Arrays.equals(result, expected)); 291 292 values = new int[] {10, 20, 30, 40}; 293 expected = new int[] {10, 20, 30, 40}; 294 try { 295 field.set(new TimeOfDay(), 2, values, 60); 296 fail(); 297 } catch (IllegalArgumentException ex) {} 298 assertEquals(true, Arrays.equals(values, expected)); 299 300 values = new int[] {10, 20, 30, 40}; 301 expected = new int[] {10, 20, 30, 40}; 302 try { 303 field.set(new TimeOfDay(), 2, values, -1); 304 fail(); 305 } catch (IllegalArgumentException ex) {} 306 assertEquals(true, Arrays.equals(values, expected)); 307 } 308 309 public void test_set_long_String_Locale() { 310 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 311 assertEquals(0, field.set(0L, "0", null)); 312 assertEquals(29 * 60, field.set(0L, "29", Locale.ENGLISH)); 313 } 314 315 public void test_set_long_String() { 316 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 317 assertEquals(0, field.set(0L, "0")); 318 assertEquals(29 * 60, field.set(0L, "29")); 319 } 320 321 public void test_set_RP_int_intarray_String_Locale() { 322 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 323 int[] values = new int[] {10, 20, 30, 40}; 324 int[] expected = new int[] {10, 20, 30, 40}; 325 int[] result = field.set(new TimeOfDay(), 2, values, "30", null); 326 assertEquals(true, Arrays.equals(result, expected)); 327 328 values = new int[] {10, 20, 30, 40}; 329 expected = new int[] {10, 20, 29, 40}; 330 result = field.set(new TimeOfDay(), 2, values, "29", Locale.ENGLISH); 331 assertEquals(true, Arrays.equals(result, expected)); 332 333 values = new int[] {10, 20, 30, 40}; 334 expected = new int[] {10, 20, 30, 40}; 335 try { 336 field.set(new TimeOfDay(), 2, values, "60", null); 337 fail(); 338 } catch (IllegalArgumentException ex) {} 339 assertEquals(true, Arrays.equals(values, expected)); 340 341 values = new int[] {10, 20, 30, 40}; 342 expected = new int[] {10, 20, 30, 40}; 343 try { 344 field.set(new TimeOfDay(), 2, values, "-1", null); 345 fail(); 346 } catch (IllegalArgumentException ex) {} 347 assertEquals(true, Arrays.equals(values, expected)); 348 } 349 350 public void test_convertText() { 351 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 352 assertEquals(0, field.convertText("0", null)); 353 assertEquals(29, field.convertText("29", null)); 354 try { 355 field.convertText("2A", null); 356 fail(); 357 } catch (IllegalArgumentException ex) {} 358 try { 359 field.convertText(null, null); 360 fail(); 361 } catch (IllegalArgumentException ex) {} 362 } 363 364 //------------------------------------------------------------------------ 365 // public abstract DurationField getDurationField(); 366 // 367 // public abstract DurationField getRangeDurationField(); 368 369 public void test_isLeap_long() { 370 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 371 assertEquals(false, field.isLeap(0L)); 372 } 373 374 public void test_getLeapAmount_long() { 375 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 376 assertEquals(0, field.getLeapAmount(0L)); 377 } 378 379 public void test_getLeapDurationField() { 380 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 381 assertEquals(null, field.getLeapDurationField()); 382 } 383 384 //----------------------------------------------------------------------- 385 public void test_getMinimumValue() { 386 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 387 assertEquals(0, field.getMinimumValue()); 388 } 389 390 public void test_getMinimumValue_long() { 391 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 392 assertEquals(0, field.getMinimumValue(0L)); 393 } 394 395 public void test_getMinimumValue_RP() { 396 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 397 assertEquals(0, field.getMinimumValue(new TimeOfDay())); 398 } 399 400 public void test_getMinimumValue_RP_intarray() { 401 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 402 assertEquals(0, field.getMinimumValue(new TimeOfDay(), new int[4])); 403 } 404 405 public void test_getMaximumValue() { 406 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 407 assertEquals(59, field.getMaximumValue()); 408 } 409 410 public void test_getMaximumValue_long() { 411 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 412 assertEquals(59, field.getMaximumValue(0L)); 413 } 414 415 public void test_getMaximumValue_RP() { 416 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 417 assertEquals(59, field.getMaximumValue(new TimeOfDay())); 418 } 419 420 public void test_getMaximumValue_RP_intarray() { 421 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 422 assertEquals(59, field.getMaximumValue(new TimeOfDay(), new int[4])); 423 } 424 425 //----------------------------------------------------------------------- 426 public void test_getMaximumTextLength_Locale() { 427 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 428 assertEquals(2, field.getMaximumTextLength(Locale.ENGLISH)); 429 430 field = new MockPreciseDurationDateTimeField() { 431 public int getMaximumValue() { 432 return 5; 433 } 434 }; 435 assertEquals(1, field.getMaximumTextLength(Locale.ENGLISH)); 436 437 field = new MockPreciseDurationDateTimeField() { 438 public int getMaximumValue() { 439 return 555; 440 } 441 }; 442 assertEquals(3, field.getMaximumTextLength(Locale.ENGLISH)); 443 444 field = new MockPreciseDurationDateTimeField() { 445 public int getMaximumValue() { 446 return 5555; 447 } 448 }; 449 assertEquals(4, field.getMaximumTextLength(Locale.ENGLISH)); 450 451 field = new MockPreciseDurationDateTimeField() { 452 public int getMaximumValue() { 453 return -1; 454 } 455 }; 456 assertEquals(2, field.getMaximumTextLength(Locale.ENGLISH)); 457 } 458 459 public void test_getMaximumShortTextLength_Locale() { 460 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 461 assertEquals(2, field.getMaximumShortTextLength(Locale.ENGLISH)); 462 } 463 464 //------------------------------------------------------------------------ 465 public void test_roundFloor_long() { 466 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 467 assertEquals(-120L, field.roundFloor(-61L)); 468 assertEquals(-60L, field.roundFloor(-60L)); 469 assertEquals(-60L, field.roundFloor(-59L)); 470 assertEquals(-60L, field.roundFloor(-1L)); 471 assertEquals(0L, field.roundFloor(0L)); 472 assertEquals(0L, field.roundFloor(1L)); 473 assertEquals(0L, field.roundFloor(29L)); 474 assertEquals(0L, field.roundFloor(30L)); 475 assertEquals(0L, field.roundFloor(31L)); 476 assertEquals(60L, field.roundFloor(60L)); 477 } 478 479 public void test_roundCeiling_long() { 480 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 481 assertEquals(-60L, field.roundCeiling(-61L)); 482 assertEquals(-60L, field.roundCeiling(-60L)); 483 assertEquals(0L, field.roundCeiling(-59L)); 484 assertEquals(0L, field.roundCeiling(-1L)); 485 assertEquals(0L, field.roundCeiling(0L)); 486 assertEquals(60L, field.roundCeiling(1L)); 487 assertEquals(60L, field.roundCeiling(29L)); 488 assertEquals(60L, field.roundCeiling(30L)); 489 assertEquals(60L, field.roundCeiling(31L)); 490 assertEquals(60L, field.roundCeiling(60L)); 491 } 492 493 public void test_roundHalfFloor_long() { 494 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 495 assertEquals(0L, field.roundHalfFloor(0L)); 496 assertEquals(0L, field.roundHalfFloor(29L)); 497 assertEquals(0L, field.roundHalfFloor(30L)); 498 assertEquals(60L, field.roundHalfFloor(31L)); 499 assertEquals(60L, field.roundHalfFloor(60L)); 500 } 501 502 public void test_roundHalfCeiling_long() { 503 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 504 assertEquals(0L, field.roundHalfCeiling(0L)); 505 assertEquals(0L, field.roundHalfCeiling(29L)); 506 assertEquals(60L, field.roundHalfCeiling(30L)); 507 assertEquals(60L, field.roundHalfCeiling(31L)); 508 assertEquals(60L, field.roundHalfCeiling(60L)); 509 } 510 511 public void test_roundHalfEven_long() { 512 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 513 assertEquals(0L, field.roundHalfEven(0L)); 514 assertEquals(0L, field.roundHalfEven(29L)); 515 assertEquals(0L, field.roundHalfEven(30L)); 516 assertEquals(60L, field.roundHalfEven(31L)); 517 assertEquals(60L, field.roundHalfEven(60L)); 518 assertEquals(60L, field.roundHalfEven(89L)); 519 assertEquals(120L, field.roundHalfEven(90L)); 520 assertEquals(120L, field.roundHalfEven(91L)); 521 } 522 523 public void test_remainder_long() { 524 BaseDateTimeField field = new MockPreciseDurationDateTimeField(); 525 assertEquals(0L, field.remainder(0L)); 526 assertEquals(29L, field.remainder(29L)); 527 assertEquals(30L, field.remainder(30L)); 528 assertEquals(31L, field.remainder(31L)); 529 assertEquals(0L, field.remainder(60L)); 530 } 531 532 //----------------------------------------------------------------------- 533 static class MockPreciseDurationDateTimeField extends PreciseDurationDateTimeField { 534 protected MockPreciseDurationDateTimeField() { 535 super(DateTimeFieldType.secondOfMinute(), 536 new MockCountingDurationField(DurationFieldType.seconds())); 537 } 538 protected MockPreciseDurationDateTimeField(DateTimeFieldType type, DurationField dur) { 539 super(type, dur); 540 } 541 public int get(long instant) { 542 return (int) (instant / 60L); 543 } 544 public DurationField getRangeDurationField() { 545 return new MockCountingDurationField(DurationFieldType.minutes()); 546 } 547 public int getMaximumValue() { 548 return 59; 549 } 550 } 551 552 static class MockStandardBaseDateTimeField extends MockPreciseDurationDateTimeField { 553 protected MockStandardBaseDateTimeField() { 554 super(); 555 } 556 public DurationField getDurationField() { 557 return ISOChronology.getInstanceUTC().seconds(); 558 } 559 public DurationField getRangeDurationField() { 560 return ISOChronology.getInstanceUTC().minutes(); 561 } 562 } 563 564 //----------------------------------------------------------------------- 565 static class MockCountingDurationField extends BaseDurationField { 566 static int add_int = 0; 567 static int add_long = 0; 568 static int difference_long = 0; 569 570 protected MockCountingDurationField(DurationFieldType type) { 571 super(type); 572 } 573 public boolean isPrecise() { 574 return true; 575 } 576 public long getUnitMillis() { 577 return 60; 578 } 579 public long getValueAsLong(long duration, long instant) { 580 return 0; 581 } 582 public long getMillis(int value, long instant) { 583 return 0; 584 } 585 public long getMillis(long value, long instant) { 586 return 0; 587 } 588 public long add(long instant, int value) { 589 add_int++; 590 return instant + (value * 60L); 591 } 592 public long add(long instant, long value) { 593 add_long++; 594 return instant + (value * 60L); 595 } 596 public long getDifferenceAsLong(long minuendInstant, long subtrahendInstant) { 597 difference_long++; 598 return 30; 599 } 600 } 601 602 //----------------------------------------------------------------------- 603 static class MockZeroDurationField extends BaseDurationField { 604 protected MockZeroDurationField(DurationFieldType type) { 605 super(type); 606 } 607 public boolean isPrecise() { 608 return true; 609 } 610 public long getUnitMillis() { 611 return 0; // this is zero 612 } 613 public long getValueAsLong(long duration, long instant) { 614 return 0; 615 } 616 public long getMillis(int value, long instant) { 617 return 0; 618 } 619 public long getMillis(long value, long instant) { 620 return 0; 621 } 622 public long add(long instant, int value) { 623 return 0; 624 } 625 public long add(long instant, long value) { 626 return 0; 627 } 628 public long getDifferenceAsLong(long minuendInstant, long subtrahendInstant) { 629 return 0; 630 } 631 } 632 633 //----------------------------------------------------------------------- 634 static class MockImpreciseDurationField extends BaseDurationField { 635 protected MockImpreciseDurationField(DurationFieldType type) { 636 super(type); 637 } 638 public boolean isPrecise() { 639 return false; // this is false 640 } 641 public long getUnitMillis() { 642 return 0; 643 } 644 public long getValueAsLong(long duration, long instant) { 645 return 0; 646 } 647 public long getMillis(int value, long instant) { 648 return 0; 649 } 650 public long getMillis(long value, long instant) { 651 return 0; 652 } 653 public long add(long instant, int value) { 654 return 0; 655 } 656 public long add(long instant, long value) { 657 return 0; 658 } 659 public long getDifferenceAsLong(long minuendInstant, long subtrahendInstant) { 660 return 0; 661 } 662 } 663 664 }