1 /* 2 * Copyright 2001-2009 OFFIS, Tammo Freese 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package org.easymock; 17 18 import java.lang.reflect.Proxy; 19 import java.util.Comparator; 20 21 import org.easymock.internal.*; 22 import org.easymock.internal.matchers.*; 23 24 public class EasyMock { 25 26 /** 27 * Since EasyMock 2.4, by default, a mock wasn't allowed to be called in 28 * multiple threads unless it was made thread-safe (See 29 * {@link #makeThreadSafe(Object, boolean)} method). Since EasyMock 2.5, 30 * this isn't the default anymore. For backward compatibility, this property 31 * can bring EasyMock 2.4 behavior back. 32 */ 33 public static final String ENABLE_THREAD_SAFETY_CHECK_BY_DEFAULT = "easymock.enableThreadSafetyCheckByDefault"; 34 35 /** 36 * Since EasyMock 2.5, by default a mock is thread-safe. For backward 37 * compatibility, this property can change the default. A given mock still 38 * can be made thread-safe by calling 39 * {@link #makeThreadSafe(Object, boolean)}. 40 */ 41 public static final String NOT_THREAD_SAFE_BY_DEFAULT = "easymock.notThreadSafeByDefault"; 42 43 /** 44 * Creates a mock object that implements the given interface, order checking 45 * is enabled by default. 46 * 47 * @param <T> 48 * the interface that the mock object should implement. 49 * @param toMock 50 * the class of the interface that the mock object should 51 * implement. 52 * @return the mock object. 53 */ createStrictMock(Class<T> toMock)54 public static <T> T createStrictMock(Class<T> toMock) { 55 return createStrictControl().createMock(toMock); 56 } 57 58 /** 59 * Creates a mock object that implements the given interface, order checking 60 * is enabled by default. 61 * @param name the name of the mock object. 62 * @param toMock 63 * the class of the interface that the mock object should 64 * implement. 65 * @param <T> 66 * the interface that the mock object should implement. 67 * @return the mock object. 68 * @throws IllegalArgumentException if the name is not a valid Java identifier. 69 */ createStrictMock(String name, Class<T> toMock)70 public static <T> T createStrictMock(String name, Class<T> toMock) { 71 return createStrictControl().createMock(name, toMock); 72 } 73 74 /** 75 * Creates a mock object that implements the given interface, order checking 76 * is disabled by default. 77 * 78 * @param <T> 79 * the interface that the mock object should implement. 80 * @param toMock 81 * the class of the interface that the mock object should 82 * implement. 83 * @return the mock object. 84 */ createMock(Class<T> toMock)85 public static <T> T createMock(Class<T> toMock) { 86 return createControl().createMock(toMock); 87 } 88 89 /** 90 * Creates a mock object that implements the given interface, order checking 91 * is disabled by default. 92 * @param name the name of the mock object. 93 * @param toMock 94 * the class of the interface that the mock object should 95 * implement. 96 * 97 * @param <T> 98 * the interface that the mock object should implement. 99 * @return the mock object. 100 * @throws IllegalArgumentException if the name is not a valid Java identifier. 101 */ createMock(String name, Class<T> toMock)102 public static <T> T createMock(String name, Class<T> toMock) { 103 return createControl().createMock(name, toMock); 104 } 105 106 /** 107 * Creates a mock object that implements the given interface, order checking 108 * is disabled by default, and the mock object will return <code>0</code>, 109 * <code>null</code> or <code>false</code> for unexpected invocations. 110 * 111 * @param <T> 112 * the interface that the mock object should implement. 113 * @param toMock 114 * the class of the interface that the mock object should 115 * implement. 116 * @return the mock object. 117 */ createNiceMock(Class<T> toMock)118 public static <T> T createNiceMock(Class<T> toMock) { 119 return createNiceControl().createMock(toMock); 120 } 121 122 /** 123 * Creates a mock object that implements the given interface, order checking 124 * is disabled by default, and the mock object will return <code>0</code>, 125 * <code>null</code> or <code>false</code> for unexpected invocations. 126 * @param name the name of the mock object. 127 * @param toMock 128 * the class of the interface that the mock object should 129 * implement. 130 * 131 * @param <T> 132 * the interface that the mock object should implement. 133 * @return the mock object. 134 * @throws IllegalArgumentException if the name is not a valid Java identifier. 135 */ createNiceMock(String name, Class<T> toMock)136 public static <T> T createNiceMock(String name, Class<T> toMock) { 137 return createNiceControl().createMock(name, toMock); 138 } 139 140 /** 141 * Creates a control, order checking is enabled by default. 142 * 143 * @return the control. 144 */ createStrictControl()145 public static IMocksControl createStrictControl() { 146 return new MocksControl(MocksControl.MockType.STRICT); 147 } 148 149 /** 150 * Creates a control, order checking is disabled by default. 151 * 152 * @return the control. 153 */ createControl()154 public static IMocksControl createControl() { 155 return new MocksControl(MocksControl.MockType.DEFAULT); 156 } 157 158 /** 159 * Creates a control, order checking is disabled by default, and the mock 160 * objects created by this control will return <code>0</code>, 161 * <code>null</code> or <code>false</code> for unexpected invocations. 162 * 163 * @return the control. 164 */ createNiceControl()165 public static IMocksControl createNiceControl() { 166 return new MocksControl(MocksControl.MockType.NICE); 167 } 168 169 /** 170 * Returns the expectation setter for the last expected invocation in the 171 * current thread. 172 * 173 * @param <T> type returned by the expected method 174 * @param value 175 * the parameter is used to transport the type to the 176 * ExpectationSetter. It allows writing the expected call as 177 * argument, i.e. 178 * <code>expect(mock.getName()).andReturn("John Doe")<code>. 179 * 180 * @return the expectation setter. 181 */ expect(T value)182 public static <T> IExpectationSetters<T> expect(T value) { 183 return EasyMock.getControlForLastCall(); 184 } 185 186 /** 187 * Returns the expectation setter for the last expected invocation in the 188 * current thread. This method is used for expected invocations on void 189 * methods. 190 * 191 * @param <T> type returned by the expected method 192 * @return the expectation setter. 193 */ expectLastCall()194 public static <T> IExpectationSetters<T> expectLastCall() { 195 return getControlForLastCall(); 196 } 197 198 @SuppressWarnings("unchecked") getControlForLastCall()199 private static <T> IExpectationSetters<T> getControlForLastCall() { 200 MocksControl lastControl = LastControl.lastControl(); 201 if (lastControl == null) { 202 throw new IllegalStateException("no last call on a mock available"); 203 } 204 return (IExpectationSetters<T>) lastControl; 205 } 206 207 /** 208 * Expects any boolean argument. For details, see the EasyMock 209 * documentation. 210 * 211 * @return <code>false</code>. 212 */ anyBoolean()213 public static boolean anyBoolean() { 214 reportMatcher(Any.ANY); 215 return false; 216 } 217 218 /** 219 * Expects any byte argument. For details, see the EasyMock documentation. 220 * 221 * @return <code>0</code>. 222 */ anyByte()223 public static byte anyByte() { 224 reportMatcher(Any.ANY); 225 return 0; 226 } 227 228 /** 229 * Expects any char argument. For details, see the EasyMock documentation. 230 * 231 * @return <code>0</code>. 232 */ anyChar()233 public static char anyChar() { 234 reportMatcher(Any.ANY); 235 return 0; 236 } 237 238 /** 239 * Expects any int argument. For details, see the EasyMock documentation. 240 * 241 * @return <code>0</code>. 242 */ anyInt()243 public static int anyInt() { 244 reportMatcher(Any.ANY); 245 return 0; 246 } 247 248 /** 249 * Expects any long argument. For details, see the EasyMock documentation. 250 * 251 * @return <code>0</code>. 252 */ anyLong()253 public static long anyLong() { 254 reportMatcher(Any.ANY); 255 return 0; 256 } 257 258 /** 259 * Expects any float argument. For details, see the EasyMock documentation. 260 * 261 * @return <code>0</code>. 262 */ anyFloat()263 public static float anyFloat() { 264 reportMatcher(Any.ANY); 265 return 0; 266 } 267 268 /** 269 * Expects any double argument. For details, see the EasyMock documentation. 270 * 271 * @return <code>0</code>. 272 */ anyDouble()273 public static double anyDouble() { 274 reportMatcher(Any.ANY); 275 return 0; 276 } 277 278 /** 279 * Expects any short argument. For details, see the EasyMock documentation. 280 * 281 * @return <code>0</code>. 282 */ anyShort()283 public static short anyShort() { 284 reportMatcher(Any.ANY); 285 return 0; 286 } 287 288 /** 289 * Expects any Object argument. For details, see the EasyMock documentation. 290 * 291 * @param <T> type of the method argument to match 292 * @return <code>null</code>. 293 */ anyObject()294 public static <T> T anyObject() { 295 reportMatcher(Any.ANY); 296 return null; 297 } 298 299 /** 300 * Expects a comparable argument greater than or equal the given value. For details, see 301 * the EasyMock documentation. 302 * 303 * @param <T> type of the method argument to match 304 * @param value 305 * the given value. 306 * @return <code>null</code>. 307 */ geq(Comparable<T> value)308 public static <T extends Comparable<T>> T geq(Comparable<T> value) { 309 reportMatcher(new GreaterOrEqual<T>(value)); 310 return null; 311 } 312 313 /** 314 * Expects a byte argument greater than or equal to the given value. For 315 * details, see the EasyMock documentation. 316 * 317 * @param value 318 * the given value. 319 * @return <code>0</code>. 320 */ geq(byte value)321 public static byte geq(byte value) { 322 reportMatcher(new GreaterOrEqual<Byte>(value)); 323 return 0; 324 } 325 326 /** 327 * Expects a double argument greater than or equal to the given value. For 328 * details, see the EasyMock documentation. 329 * 330 * @param value 331 * the given value. 332 * @return <code>0</code>. 333 */ geq(double value)334 public static double geq(double value) { 335 reportMatcher(new GreaterOrEqual<Double>(value)); 336 return 0; 337 } 338 339 /** 340 * Expects a float argument greater than or equal to the given value. For 341 * details, see the EasyMock documentation. 342 * 343 * @param value 344 * the given value. 345 * @return <code>0</code>. 346 */ geq(float value)347 public static float geq(float value) { 348 reportMatcher(new GreaterOrEqual<Float>(value)); 349 return 0; 350 } 351 352 /** 353 * Expects an int argument greater than or equal to the given value. For 354 * details, see the EasyMock documentation. 355 * 356 * @param value 357 * the given value. 358 * @return <code>0</code>. 359 */ geq(int value)360 public static int geq(int value) { 361 reportMatcher(new GreaterOrEqual<Integer>(value)); 362 return 0; 363 } 364 365 /** 366 * Expects a long argument greater than or equal to the given value. For 367 * details, see the EasyMock documentation. 368 * 369 * @param value 370 * the given value. 371 * @return <code>0</code>. 372 */ geq(long value)373 public static long geq(long value) { 374 reportMatcher(new GreaterOrEqual<Long>(value)); 375 return 0; 376 } 377 378 /** 379 * Expects a short argument greater than or equal to the given value. For 380 * details, see the EasyMock documentation. 381 * 382 * @param value 383 * the given value. 384 * @return <code>0</code>. 385 */ geq(short value)386 public static short geq(short value) { 387 reportMatcher(new GreaterOrEqual<Short>(value)); 388 return 0; 389 } 390 391 /** 392 * Expects a comparable argument less than or equal the given value. For details, see 393 * the EasyMock documentation. 394 * 395 * @param <T> type of the method argument to match 396 * @param value 397 * the given value. 398 * @return <code>null</code>. 399 */ leq(Comparable<T> value)400 public static <T extends Comparable<T>> T leq(Comparable<T> value) { 401 reportMatcher(new LessOrEqual<T>(value)); 402 return null; 403 } 404 405 /** 406 * Expects a byte argument less than or equal to the given value. For 407 * details, see the EasyMock documentation. 408 * 409 * @param value 410 * the given value. 411 * @return <code>0</code>. 412 */ leq(byte value)413 public static byte leq(byte value) { 414 reportMatcher(new LessOrEqual<Byte>(value)); 415 return 0; 416 } 417 418 /** 419 * Expects a double argument less than or equal to the given value. For 420 * details, see the EasyMock documentation. 421 * 422 * @param value 423 * the given value. 424 * @return <code>0</code>. 425 */ leq(double value)426 public static double leq(double value) { 427 reportMatcher(new LessOrEqual<Double>(value)); 428 return 0; 429 } 430 431 /** 432 * Expects a float argument less than or equal to the given value. For 433 * details, see the EasyMock documentation. 434 * 435 * @param value 436 * the given value. 437 * @return <code>0</code>. 438 */ leq(float value)439 public static float leq(float value) { 440 reportMatcher(new LessOrEqual<Float>(value)); 441 return 0; 442 } 443 444 /** 445 * Expects an int argument less than or equal to the given value. For 446 * details, see the EasyMock documentation. 447 * 448 * @param value 449 * the given value. 450 * @return <code>0</code>. 451 */ leq(int value)452 public static int leq(int value) { 453 reportMatcher(new LessOrEqual<Integer>(value)); 454 return 0; 455 } 456 457 /** 458 * Expects a long argument less than or equal to the given value. For 459 * details, see the EasyMock documentation. 460 * 461 * @param value 462 * the given value. 463 * @return <code>0</code>. 464 */ leq(long value)465 public static long leq(long value) { 466 reportMatcher(new LessOrEqual<Long>(value)); 467 return 0; 468 } 469 470 /** 471 * Expects a short argument less than or equal to the given value. For 472 * details, see the EasyMock documentation. 473 * 474 * @param value 475 * the given value. 476 * @return <code>0</code>. 477 */ leq(short value)478 public static short leq(short value) { 479 reportMatcher(new LessOrEqual<Short>(value)); 480 return 0; 481 } 482 483 /** 484 * Expects a comparable argument greater than the given value. For details, see 485 * the EasyMock documentation. 486 * 487 * @param <T> type of the method argument to match 488 * @param value 489 * the given value. 490 * @return <code>null</code>. 491 */ gt(Comparable<T> value)492 public static <T extends Comparable<T>> T gt(Comparable<T> value) { 493 reportMatcher(new GreaterThan<T>(value)); 494 return null; 495 } 496 497 /** 498 * Expects a byte argument greater than the given value. For details, see 499 * the EasyMock documentation. 500 * 501 * @param value 502 * the given value. 503 * @return <code>0</code>. 504 */ gt(byte value)505 public static byte gt(byte value) { 506 reportMatcher(new GreaterThan<Byte>(value)); 507 return 0; 508 } 509 510 /** 511 * Expects a double argument greater than the given value. For details, see 512 * the EasyMock documentation. 513 * 514 * @param value 515 * the given value. 516 * @return <code>0</code>. 517 */ gt(double value)518 public static double gt(double value) { 519 reportMatcher(new GreaterThan<Double>(value)); 520 return 0; 521 } 522 523 /** 524 * Expects a float argument greater than the given value. For details, see 525 * the EasyMock documentation. 526 * 527 * @param value 528 * the given value. 529 * @return <code>0</code>. 530 */ gt(float value)531 public static float gt(float value) { 532 reportMatcher(new GreaterThan<Float>(value)); 533 return 0; 534 } 535 536 /** 537 * Expects an int argument greater than the given value. For details, see 538 * the EasyMock documentation. 539 * 540 * @param value 541 * the given value. 542 * @return <code>0</code>. 543 */ gt(int value)544 public static int gt(int value) { 545 reportMatcher(new GreaterThan<Integer>(value)); 546 return 0; 547 } 548 549 /** 550 * Expects a long argument greater than the given value. For details, see 551 * the EasyMock documentation. 552 * 553 * @param value 554 * the given value. 555 * @return <code>0</code>. 556 */ gt(long value)557 public static long gt(long value) { 558 reportMatcher(new GreaterThan<Long>(value)); 559 return 0; 560 } 561 562 /** 563 * Expects a short argument greater than the given value. For details, see 564 * the EasyMock documentation. 565 * 566 * @param value 567 * the given value. 568 * @return <code>0</code>. 569 */ gt(short value)570 public static short gt(short value) { 571 reportMatcher(new GreaterThan<Short>(value)); 572 return 0; 573 } 574 575 /** 576 * Expects a comparable argument less than the given value. For details, see 577 * the EasyMock documentation. 578 * 579 * @param <T> type of the method argument to match 580 * @param value 581 * the given value. 582 * @return <code>null</code>. 583 */ lt(Comparable<T> value)584 public static <T extends Comparable<T>> T lt(Comparable<T> value) { 585 reportMatcher(new LessThan<T>(value)); 586 return null; 587 } 588 589 /** 590 * Expects a byte argument less than the given value. For details, see the 591 * EasyMock documentation. 592 * 593 * @param value 594 * the given value. 595 * @return <code>0</code>. 596 */ lt(byte value)597 public static byte lt(byte value) { 598 reportMatcher(new LessThan<Byte>(value)); 599 return 0; 600 } 601 602 /** 603 * Expects a double argument less than the given value. For details, see the 604 * EasyMock documentation. 605 * 606 * @param value 607 * the given value. 608 * @return <code>0</code>. 609 */ lt(double value)610 public static double lt(double value) { 611 reportMatcher(new LessThan<Double>(value)); 612 return 0; 613 } 614 615 /** 616 * Expects a float argument less than the given value. For details, see the 617 * EasyMock documentation. 618 * 619 * @param value 620 * the given value. 621 * @return <code>0</code>. 622 */ lt(float value)623 public static float lt(float value) { 624 reportMatcher(new LessThan<Float>(value)); 625 return 0; 626 } 627 628 /** 629 * Expects an int argument less than the given value. For details, see the 630 * EasyMock documentation. 631 * 632 * @param value 633 * the given value. 634 * @return <code>0</code>. 635 */ lt(int value)636 public static int lt(int value) { 637 reportMatcher(new LessThan<Integer>(value)); 638 return 0; 639 } 640 641 /** 642 * Expects a long argument less than the given value. For details, see the 643 * EasyMock documentation. 644 * 645 * @param value 646 * the given value. 647 * @return <code>0</code>. 648 */ lt(long value)649 public static long lt(long value) { 650 reportMatcher(new LessThan<Long>(value)); 651 return 0; 652 } 653 654 /** 655 * Expects a short argument less than the given value. For details, see the 656 * EasyMock documentation. 657 * 658 * @param value 659 * the given value. 660 * @return <code>0</code>. 661 */ lt(short value)662 public static short lt(short value) { 663 reportMatcher(new LessThan<Short>(value)); 664 return 0; 665 } 666 667 /** 668 * Expects an object implementing the given class. For details, see the 669 * EasyMock documentation. 670 * 671 * @param <T> 672 * the accepted type. 673 * @param clazz 674 * the class of the accepted type. 675 * @return <code>null</code>. 676 */ isA(Class<T> clazz)677 public static <T> T isA(Class<T> clazz) { 678 reportMatcher(new InstanceOf(clazz)); 679 return null; 680 } 681 682 /** 683 * Expects a string that contains the given substring. For details, see the 684 * EasyMock documentation. 685 * 686 * @param substring 687 * the substring. 688 * @return <code>null</code>. 689 */ contains(String substring)690 public static String contains(String substring) { 691 reportMatcher(new Contains(substring)); 692 return null; 693 } 694 695 /** 696 * Expects a boolean that matches both given expectations. 697 * 698 * @param first 699 * placeholder for the first expectation. 700 * @param second 701 * placeholder for the second expectation. 702 * @return <code>false</code>. 703 */ and(boolean first, boolean second)704 public static boolean and(boolean first, boolean second) { 705 LastControl.reportAnd(2); 706 return false; 707 } 708 709 /** 710 * Expects a byte that matches both given expectations. 711 * 712 * @param first 713 * placeholder for the first expectation. 714 * @param second 715 * placeholder for the second expectation. 716 * @return <code>0</code>. 717 */ and(byte first, byte second)718 public static byte and(byte first, byte second) { 719 LastControl.reportAnd(2); 720 return 0; 721 } 722 723 /** 724 * Expects a char that matches both given expectations. 725 * 726 * @param first 727 * placeholder for the first expectation. 728 * @param second 729 * placeholder for the second expectation. 730 * @return <code>0</code>. 731 */ and(char first, char second)732 public static char and(char first, char second) { 733 LastControl.reportAnd(2); 734 return 0; 735 } 736 737 /** 738 * Expects a double that matches both given expectations. 739 * 740 * @param first 741 * placeholder for the first expectation. 742 * @param second 743 * placeholder for the second expectation. 744 * @return <code>0</code>. 745 */ and(double first, double second)746 public static double and(double first, double second) { 747 LastControl.reportAnd(2); 748 return 0; 749 } 750 751 /** 752 * Expects a float that matches both given expectations. 753 * 754 * @param first 755 * placeholder for the first expectation. 756 * @param second 757 * placeholder for the second expectation. 758 * @return <code>0</code>. 759 */ and(float first, float second)760 public static float and(float first, float second) { 761 LastControl.reportAnd(2); 762 return 0; 763 } 764 765 /** 766 * Expects an int that matches both given expectations. 767 * 768 * @param first 769 * placeholder for the first expectation. 770 * @param second 771 * placeholder for the second expectation. 772 * @return <code>0</code>. 773 */ and(int first, int second)774 public static int and(int first, int second) { 775 LastControl.reportAnd(2); 776 return 0; 777 } 778 779 /** 780 * Expects a long that matches both given expectations. 781 * 782 * @param first 783 * placeholder for the first expectation. 784 * @param second 785 * placeholder for the second expectation. 786 * @return <code>0</code>. 787 */ and(long first, long second)788 public static long and(long first, long second) { 789 LastControl.reportAnd(2); 790 return 0; 791 } 792 793 /** 794 * Expects a short that matches both given expectations. 795 * 796 * @param first 797 * placeholder for the first expectation. 798 * @param second 799 * placeholder for the second expectation. 800 * @return <code>0</code>. 801 */ and(short first, short second)802 public static short and(short first, short second) { 803 LastControl.reportAnd(2); 804 return 0; 805 } 806 807 /** 808 * Expects an Object that matches both given expectations. 809 * 810 * @param <T> 811 * the type of the object, it is passed through to prevent casts. 812 * @param first 813 * placeholder for the first expectation. 814 * @param second 815 * placeholder for the second expectation. 816 * @return <code>null</code>. 817 */ and(T first, T second)818 public static <T> T and(T first, T second) { 819 LastControl.reportAnd(2); 820 return null; 821 } 822 823 /** 824 * Expects a boolean that matches one of the given expectations. 825 * 826 * @param first 827 * placeholder for the first expectation. 828 * @param second 829 * placeholder for the second expectation. 830 * @return <code>false</code>. 831 */ or(boolean first, boolean second)832 public static boolean or(boolean first, boolean second) { 833 LastControl.reportOr(2); 834 return false; 835 } 836 837 /** 838 * Expects a byte that matches one of the given expectations. 839 * 840 * @param first 841 * placeholder for the first expectation. 842 * @param second 843 * placeholder for the second expectation. 844 * @return <code>0</code>. 845 */ or(byte first, byte second)846 public static byte or(byte first, byte second) { 847 LastControl.reportOr(2); 848 return 0; 849 } 850 851 /** 852 * Expects a char that matches one of the given expectations. 853 * 854 * @param first 855 * placeholder for the first expectation. 856 * @param second 857 * placeholder for the second expectation. 858 * @return <code>0</code>. 859 */ or(char first, char second)860 public static char or(char first, char second) { 861 LastControl.reportOr(2); 862 return 0; 863 } 864 865 /** 866 * Expects a double that matches one of the given expectations. 867 * 868 * @param first 869 * placeholder for the first expectation. 870 * @param second 871 * placeholder for the second expectation. 872 * @return <code>0</code>. 873 */ or(double first, double second)874 public static double or(double first, double second) { 875 LastControl.reportOr(2); 876 return 0; 877 } 878 879 /** 880 * Expects a float that matches one of the given expectations. 881 * 882 * @param first 883 * placeholder for the first expectation. 884 * @param second 885 * placeholder for the second expectation. 886 * @return <code>0</code>. 887 */ or(float first, float second)888 public static float or(float first, float second) { 889 LastControl.reportOr(2); 890 return 0; 891 } 892 893 /** 894 * Expects an int that matches one of the given expectations. 895 * 896 * @param first 897 * placeholder for the first expectation. 898 * @param second 899 * placeholder for the second expectation. 900 * @return <code>0</code>. 901 */ or(int first, int second)902 public static int or(int first, int second) { 903 LastControl.reportOr(2); 904 return first; 905 } 906 907 /** 908 * Expects a long that matches one of the given expectations. 909 * 910 * @param first 911 * placeholder for the first expectation. 912 * @param second 913 * placeholder for the second expectation. 914 * @return <code>0</code>. 915 */ or(long first, long second)916 public static long or(long first, long second) { 917 LastControl.reportOr(2); 918 return 0; 919 } 920 921 /** 922 * Expects a short that matches one of the given expectations. 923 * 924 * @param first 925 * placeholder for the first expectation. 926 * @param second 927 * placeholder for the second expectation. 928 * @return <code>0</code>. 929 */ or(short first, short second)930 public static short or(short first, short second) { 931 LastControl.reportOr(2); 932 return 0; 933 } 934 935 /** 936 * Expects an Object that matches one of the given expectations. 937 * 938 * @param <T> 939 * the type of the object, it is passed through to prevent casts. 940 * @param first 941 * placeholder for the first expectation. 942 * @param second 943 * placeholder for the second expectation. 944 * @return <code>null</code>. 945 */ or(T first, T second)946 public static <T> T or(T first, T second) { 947 LastControl.reportOr(2); 948 return null; 949 } 950 951 /** 952 * Expects a boolean that does not match the given expectation. 953 * 954 * @param first 955 * placeholder for the expectation. 956 * @return <code>false</code>. 957 */ not(boolean first)958 public static boolean not(boolean first) { 959 LastControl.reportNot(); 960 return false; 961 } 962 963 /** 964 * Expects a byte that does not match the given expectation. 965 * 966 * @param first 967 * placeholder for the expectation. 968 * @return <code>0</code>. 969 */ not(byte first)970 public static byte not(byte first) { 971 LastControl.reportNot(); 972 return 0; 973 } 974 975 /** 976 * Expects a char that does not match the given expectation. 977 * 978 * @param first 979 * placeholder for the expectation. 980 * @return <code>0</code>. 981 */ not(char first)982 public static char not(char first) { 983 LastControl.reportNot(); 984 return 0; 985 } 986 987 /** 988 * Expects a double that does not match the given expectation. 989 * 990 * @param first 991 * placeholder for the expectation. 992 * @return <code>0</code>. 993 */ not(double first)994 public static double not(double first) { 995 LastControl.reportNot(); 996 return 0; 997 } 998 999 /** 1000 * Expects a float that does not match the given expectation. 1001 * 1002 * @param first 1003 * placeholder for the expectation. 1004 * @return <code>0</code>. 1005 */ not(float first)1006 public static float not(float first) { 1007 LastControl.reportNot(); 1008 return first; 1009 } 1010 1011 /** 1012 * Expects an int that does not match the given expectation. 1013 * 1014 * @param first 1015 * placeholder for the expectation. 1016 * @return <code>0</code>. 1017 */ not(int first)1018 public static int not(int first) { 1019 LastControl.reportNot(); 1020 return 0; 1021 } 1022 1023 /** 1024 * Expects a long that does not match the given expectation. 1025 * 1026 * @param first 1027 * placeholder for the expectation. 1028 * @return <code>0</code>. 1029 */ not(long first)1030 public static long not(long first) { 1031 LastControl.reportNot(); 1032 return 0; 1033 } 1034 1035 /** 1036 * Expects a short that does not match the given expectation. 1037 * 1038 * @param first 1039 * placeholder for the expectation. 1040 * @return <code>0</code>. 1041 */ not(short first)1042 public static short not(short first) { 1043 LastControl.reportNot(); 1044 return 0; 1045 } 1046 1047 /** 1048 * Expects an Object that does not match the given expectation. 1049 * 1050 * @param <T> 1051 * the type of the object, it is passed through to prevent casts. 1052 * @param first 1053 * placeholder for the expectation. 1054 * @return <code>null</code>. 1055 */ not(T first)1056 public static <T> T not(T first) { 1057 LastControl.reportNot(); 1058 return null; 1059 } 1060 1061 /** 1062 * Expects a boolean that is equal to the given value. 1063 * 1064 * @param value 1065 * the given value. 1066 * @return <code>0</code>. 1067 */ eq(boolean value)1068 public static boolean eq(boolean value) { 1069 reportMatcher(new Equals(value)); 1070 return false; 1071 } 1072 1073 /** 1074 * Expects a byte that is equal to the given value. 1075 * 1076 * @param value 1077 * the given value. 1078 * @return <code>0</code>. 1079 */ eq(byte value)1080 public static byte eq(byte value) { 1081 reportMatcher(new Equals(value)); 1082 return 0; 1083 } 1084 1085 /** 1086 * Expects a char that is equal to the given value. 1087 * 1088 * @param value 1089 * the given value. 1090 * @return <code>0</code>. 1091 */ eq(char value)1092 public static char eq(char value) { 1093 reportMatcher(new Equals(value)); 1094 return 0; 1095 } 1096 1097 /** 1098 * Expects a double that is equal to the given value. 1099 * 1100 * @param value 1101 * the given value. 1102 * @return <code>0</code>. 1103 */ eq(double value)1104 public static double eq(double value) { 1105 reportMatcher(new Equals(value)); 1106 return 0; 1107 } 1108 1109 /** 1110 * Expects a float that is equal to the given value. 1111 * 1112 * @param value 1113 * the given value. 1114 * @return <code>0</code>. 1115 */ eq(float value)1116 public static float eq(float value) { 1117 reportMatcher(new Equals(value)); 1118 return 0; 1119 } 1120 1121 /** 1122 * Expects an int that is equal to the given value. 1123 * 1124 * @param value 1125 * the given value. 1126 * @return <code>0</code>. 1127 */ eq(int value)1128 public static int eq(int value) { 1129 reportMatcher(new Equals(value)); 1130 return 0; 1131 } 1132 1133 /** 1134 * Expects a long that is equal to the given value. 1135 * 1136 * @param value 1137 * the given value. 1138 * @return <code>0</code>. 1139 */ eq(long value)1140 public static long eq(long value) { 1141 reportMatcher(new Equals(value)); 1142 return 0; 1143 } 1144 1145 /** 1146 * Expects a short that is equal to the given value. 1147 * 1148 * @param value 1149 * the given value. 1150 * @return <code>0</code>. 1151 */ eq(short value)1152 public static short eq(short value) { 1153 reportMatcher(new Equals(value)); 1154 return 0; 1155 } 1156 1157 /** 1158 * Expects an Object that is equal to the given value. 1159 * 1160 * @param <T> type of the method argument to match 1161 * @param value 1162 * the given value. 1163 * @return <code>null</code>. 1164 */ eq(T value)1165 public static <T> T eq(T value) { 1166 reportMatcher(new Equals(value)); 1167 return null; 1168 } 1169 1170 /** 1171 * Expects a boolean array that is equal to the given array, i.e. it has to 1172 * have the same length, and each element has to be equal. 1173 * 1174 * @param value 1175 * the given arry. 1176 * @return <code>null</code>. 1177 */ aryEq(boolean[] value)1178 public static boolean[] aryEq(boolean[] value) { 1179 reportMatcher(new ArrayEquals(value)); 1180 return null; 1181 } 1182 1183 /** 1184 * Expects a byte array that is equal to the given array, i.e. it has to 1185 * have the same length, and each element has to be equal. 1186 * 1187 * @param value 1188 * the given arry. 1189 * @return <code>null</code>. 1190 */ aryEq(byte[] value)1191 public static byte[] aryEq(byte[] value) { 1192 reportMatcher(new ArrayEquals(value)); 1193 return null; 1194 } 1195 1196 /** 1197 * Expects a char array that is equal to the given array, i.e. it has to 1198 * have the same length, and each element has to be equal. 1199 * 1200 * @param value 1201 * the given arry. 1202 * @return <code>null</code>. 1203 */ aryEq(char[] value)1204 public static char[] aryEq(char[] value) { 1205 reportMatcher(new ArrayEquals(value)); 1206 return null; 1207 } 1208 1209 /** 1210 * Expects a double array that is equal to the given array, i.e. it has to 1211 * have the same length, and each element has to be equal. 1212 * 1213 * @param value 1214 * the given arry. 1215 * @return <code>null</code>. 1216 */ aryEq(double[] value)1217 public static double[] aryEq(double[] value) { 1218 reportMatcher(new ArrayEquals(value)); 1219 return null; 1220 } 1221 1222 /** 1223 * Expects a float array that is equal to the given array, i.e. it has to 1224 * have the same length, and each element has to be equal. 1225 * 1226 * @param value 1227 * the given arry. 1228 * @return <code>null</code>. 1229 */ aryEq(float[] value)1230 public static float[] aryEq(float[] value) { 1231 reportMatcher(new ArrayEquals(value)); 1232 return null; 1233 } 1234 1235 /** 1236 * Expects an int array that is equal to the given array, i.e. it has to 1237 * have the same length, and each element has to be equal. 1238 * 1239 * @param value 1240 * the given arry. 1241 * @return <code>null</code>. 1242 */ aryEq(int[] value)1243 public static int[] aryEq(int[] value) { 1244 reportMatcher(new ArrayEquals(value)); 1245 return null; 1246 } 1247 1248 /** 1249 * Expects a long array that is equal to the given array, i.e. it has to 1250 * have the same length, and each element has to be equal. 1251 * 1252 * @param value 1253 * the given arry. 1254 * @return <code>null</code>. 1255 */ aryEq(long[] value)1256 public static long[] aryEq(long[] value) { 1257 reportMatcher(new ArrayEquals(value)); 1258 return null; 1259 } 1260 1261 /** 1262 * Expects a short array that is equal to the given array, i.e. it has to 1263 * have the same length, and each element has to be equal. 1264 * 1265 * @param value 1266 * the given arry. 1267 * @return <code>null</code>. 1268 */ aryEq(short[] value)1269 public static short[] aryEq(short[] value) { 1270 reportMatcher(new ArrayEquals(value)); 1271 return null; 1272 } 1273 1274 /** 1275 * Expects an Object array that is equal to the given array, i.e. it has to 1276 * have the same type, length, and each element has to be equal. 1277 * 1278 * @param <T> 1279 * the type of the array, it is passed through to prevent casts. 1280 * @param value 1281 * the given arry. 1282 * @return <code>null</code>. 1283 */ aryEq(T[] value)1284 public static <T> T[] aryEq(T[] value) { 1285 reportMatcher(new ArrayEquals(value)); 1286 return null; 1287 } 1288 1289 /** 1290 * Expects null. 1291 * 1292 * @param <T> type of the method argument to match 1293 * @return <code>null</code>. 1294 */ isNull()1295 public static <T> T isNull() { 1296 reportMatcher(Null.NULL); 1297 return null; 1298 } 1299 1300 /** 1301 * Expects not null. 1302 * 1303 * @param <T> type of the method argument to match 1304 * @return <code>null</code>. 1305 */ notNull()1306 public static <T> T notNull() { 1307 reportMatcher(NotNull.NOT_NULL); 1308 return null; 1309 } 1310 1311 /** 1312 * Expects a string that contains a substring that matches the given regular 1313 * expression. For details, see the EasyMock documentation. 1314 * 1315 * @param regex 1316 * the regular expression. 1317 * @return <code>null</code>. 1318 */ find(String regex)1319 public static String find(String regex) { 1320 reportMatcher(new Find(regex)); 1321 return null; 1322 } 1323 1324 /** 1325 * Expects a string that matches the given regular expression. For details, 1326 * see the EasyMock documentation. 1327 * 1328 * @param regex 1329 * the regular expression. 1330 * @return <code>null</code>. 1331 */ matches(String regex)1332 public static String matches(String regex) { 1333 reportMatcher(new Matches(regex)); 1334 return null; 1335 } 1336 1337 /** 1338 * Expects a string that starts with the given prefix. For details, see the 1339 * EasyMock documentation. 1340 * 1341 * @param prefix 1342 * the prefix. 1343 * @return <code>null</code>. 1344 */ startsWith(String prefix)1345 public static String startsWith(String prefix) { 1346 reportMatcher(new StartsWith(prefix)); 1347 return null; 1348 } 1349 1350 /** 1351 * Expects a string that ends with the given suffix. For details, see the 1352 * EasyMock documentation. 1353 * 1354 * @param suffix 1355 * the suffix. 1356 * @return <code>null</code>. 1357 */ endsWith(String suffix)1358 public static String endsWith(String suffix) { 1359 reportMatcher(new EndsWith(suffix)); 1360 return null; 1361 } 1362 1363 /** 1364 * Expects a double that has an absolute difference to the given value that 1365 * is less than the given delta. For details, see the EasyMock 1366 * documentation. 1367 * 1368 * @param value 1369 * the given value. 1370 * @param delta 1371 * the given delta. 1372 * @return <code>0</code>. 1373 */ eq(double value, double delta)1374 public static double eq(double value, double delta) { 1375 reportMatcher(new EqualsWithDelta(value, delta)); 1376 return 0; 1377 } 1378 1379 /** 1380 * Expects a float that has an absolute difference to the given value that 1381 * is less than the given delta. For details, see the EasyMock 1382 * documentation. 1383 * 1384 * @param value 1385 * the given value. 1386 * @param delta 1387 * the given delta. 1388 * @return <code>0</code>. 1389 */ eq(float value, float delta)1390 public static float eq(float value, float delta) { 1391 reportMatcher(new EqualsWithDelta(value, delta)); 1392 return 0; 1393 } 1394 1395 /** 1396 * Expects an Object that is the same as the given value. For details, see 1397 * the EasyMock documentation. 1398 * 1399 * @param <T> 1400 * the type of the object, it is passed through to prevent casts. 1401 * @param value 1402 * the given value. 1403 * @return <code>null</code>. 1404 */ same(T value)1405 public static <T> T same(T value) { 1406 reportMatcher(new Same(value)); 1407 return null; 1408 } 1409 1410 /** 1411 * Expects a comparable argument equals to the given value according to their 1412 * compareTo method. For details, see the EasMock documentation. 1413 * 1414 * @param <T> type of the method argument to match 1415 * @param value 1416 * the given value. 1417 * @return <code>null</code>. 1418 */ cmpEq(Comparable<T> value)1419 public static <T extends Comparable<T>> T cmpEq(Comparable<T> value) { 1420 reportMatcher(new CompareEqual<T>(value)); 1421 return null; 1422 } 1423 1424 /** 1425 * Expects an argument that will be compared using the provided comparator. 1426 * The following comparison will take place: 1427 * <p> 1428 * <code>comparator.compare(actual, expected) operator 0</code> 1429 * </p> 1430 * For details, see the EasyMock documentation. 1431 * 1432 * @param <T> type of the method argument to match 1433 * @param value the given value. 1434 * @param comparator Comparator used to compare the actual with expected value. 1435 * @param operator The comparison operator. 1436 * @return <code>null</code> 1437 */ cmp(T value, Comparator<? super T> comparator, LogicalOperator operator)1438 public static <T> T cmp(T value, Comparator<? super T> comparator, LogicalOperator operator) { 1439 reportMatcher(new Compare<T>(value, comparator, operator)); 1440 return null; 1441 } 1442 1443 1444 /** 1445 * Expects a byte that is equal to the given value. 1446 * 1447 * @param value 1448 * the given value. 1449 * @return <code>0</code>. 1450 */ 1451 1452 1453 /** 1454 * Expect any object but captures it for later use. 1455 * 1456 * @param <T> Type of the captured object 1457 * @param captured Where the parameter is captured 1458 * @return <code>null</code> 1459 */ capture(Capture<T> captured)1460 public static <T> T capture(Capture<T> captured) { 1461 reportMatcher(new Captures<T>(captured)); 1462 return null; 1463 } 1464 1465 /****************************************************** 1466 * ANDROID CHANGE - comment out to fix compile error 1467 * name clash: capture(org.easymock.Capture<java.lang.Long>) and 1468 * <T>capture(org.easymock.Capture<T>) have the same erasure 1469 */ 1470 /** 1471 * Expect any int but captures it for later use. 1472 * 1473 * @param captured Where the parameter is captured 1474 * @return <code>0</code> 1475 */ 1476 // public static int capture(Capture<Integer> captured) { 1477 // reportMatcher(new Captures<Integer>(captured)); 1478 // return 0; 1479 // } 1480 1481 /** 1482 * Expect any long but captures it for later use. 1483 * 1484 * @param captured Where the parameter is captured 1485 * @return <code>0</code> 1486 */ 1487 // public static long capture(Capture<Long> captured) { 1488 // reportMatcher(new Captures<Long>(captured)); 1489 // return 0; 1490 // } 1491 1492 /** 1493 * Expect any float but captures it for later use. 1494 * 1495 * @param captured Where the parameter is captured 1496 * @return <code>0</code> 1497 */ 1498 // public static float capture(Capture<Float> captured) { 1499 // reportMatcher(new Captures<Float>(captured)); 1500 // return 0; 1501 // } 1502 1503 /** 1504 * Expect any double but captures it for later use. 1505 * 1506 * @param captured Where the parameter is captured 1507 * @return <code>0</code> 1508 */ 1509 // public static double capture(Capture<Double> captured) { 1510 // reportMatcher(new Captures<Double>(captured)); 1511 // return 0; 1512 // } 1513 1514 /** 1515 * Expect any byte but captures it for later use. 1516 * 1517 * @param captured Where the parameter is captured 1518 * @return <code>0</code> 1519 */ 1520 // public static byte capture(Capture<Byte> captured) { 1521 // reportMatcher(new Captures<Byte>(captured)); 1522 // return 0; 1523 // } 1524 1525 /** 1526 * Expect any char but captures it for later use. 1527 * 1528 * @param captured Where the parameter is captured 1529 * @return <code>0</code> 1530 */ 1531 // public static char capture(Capture<Character> captured) { 1532 // reportMatcher(new Captures<Character>(captured)); 1533 // return 0; 1534 // } 1535 1536 /********** END ANDROID CHANGE **********/ 1537 1538 /** 1539 * Switches the given mock objects (more exactly: the controls of the mock 1540 * objects) to replay mode. For details, see the EasyMock documentation. 1541 * 1542 * @param mocks 1543 * the mock objects. 1544 */ replay(Object... mocks)1545 public static void replay(Object... mocks) { 1546 for (Object mock : mocks) { 1547 getControl(mock).replay(); 1548 } 1549 } 1550 1551 /** 1552 * Resets the given mock objects (more exactly: the controls of the mock 1553 * objects). For details, see the EasyMock documentation. 1554 * 1555 * @param mocks 1556 * the mock objects. 1557 */ reset(Object... mocks)1558 public static void reset(Object... mocks) { 1559 for (Object mock : mocks) { 1560 getControl(mock).reset(); 1561 } 1562 } 1563 1564 /** 1565 * Resets the given mock objects (more exactly: the controls of the mock 1566 * objects) and turn them to a mock with nice behavior. For details, see 1567 * the EasyMock documentation. 1568 * 1569 * @param mocks 1570 * the mock objects 1571 */ resetToNice(Object... mocks)1572 public static void resetToNice(Object... mocks) { 1573 for (Object mock : mocks) { 1574 getControl(mock).resetToNice(); 1575 } 1576 } 1577 1578 /** 1579 * Resets the given mock objects (more exactly: the controls of the mock 1580 * objects) and turn them to a mock with default behavior. For details, see 1581 * the EasyMock documentation. 1582 * 1583 * @param mocks 1584 * the mock objects 1585 */ resetToDefault(Object... mocks)1586 public static void resetToDefault(Object... mocks) { 1587 for (Object mock : mocks) { 1588 getControl(mock).resetToDefault(); 1589 } 1590 } 1591 1592 /** 1593 * Resets the given mock objects (more exactly: the controls of the mock 1594 * objects) and turn them to a mock with strict behavior. For details, see 1595 * the EasyMock documentation. 1596 * 1597 * @param mocks 1598 * the mock objects 1599 */ resetToStrict(Object... mocks)1600 public static void resetToStrict(Object... mocks) { 1601 for (Object mock : mocks) { 1602 getControl(mock).resetToStrict(); 1603 } 1604 } 1605 1606 /** 1607 * Verifies the given mock objects (more exactly: the controls of the mock 1608 * objects). 1609 * 1610 * @param mocks 1611 * the mock objects. 1612 */ verify(Object... mocks)1613 public static void verify(Object... mocks) { 1614 for (Object mock : mocks) { 1615 getControl(mock).verify(); 1616 } 1617 } 1618 1619 /** 1620 * Switches order checking of the given mock object (more exactly: the 1621 * control of the mock object) the on and off. For details, see the EasyMock 1622 * documentation. 1623 * 1624 * @param mock 1625 * the mock object. 1626 * @param state 1627 * <code>true</code> switches order checking on, 1628 * <code>false</code> switches it off. 1629 */ checkOrder(Object mock, boolean state)1630 public static void checkOrder(Object mock, boolean state) { 1631 getControl(mock).checkOrder(state); 1632 } 1633 1634 /** 1635 * Reports an argument matcher. This method is needed to define own argument 1636 * matchers. For details, see the EasyMock documentation. 1637 * 1638 * @param matcher 1639 */ reportMatcher(IArgumentMatcher matcher)1640 public static void reportMatcher(IArgumentMatcher matcher) { 1641 LastControl.reportMatcher(matcher); 1642 } 1643 getControl(Object mock)1644 private static MocksControl getControl(Object mock) { 1645 return ((ObjectMethodsFilter) Proxy 1646 .getInvocationHandler(mock)).getDelegate().getControl(); 1647 } 1648 1649 /** 1650 * Returns the arguments of the current mock method call, if inside an 1651 * <code>IAnswer</code> callback - be careful here, reordering parameters of 1652 * method changes the semantics of your tests. 1653 * 1654 * @return the arguments of the current mock method call. 1655 * @throws IllegalStateException 1656 * if called outside of <code>IAnswer</code> callbacks. 1657 */ getCurrentArguments()1658 public static Object[] getCurrentArguments() { 1659 Invocation result = LastControl.getCurrentInvocation(); 1660 if (result == null) { 1661 throw new IllegalStateException( 1662 "current arguments are only available when executing callback methods"); 1663 } 1664 return result.getArguments(); 1665 } 1666 1667 /** 1668 * By default, a mock is thread safe (unless 1669 * {@link #NOT_THREAD_SAFE_BY_DEFAULT} is set). This method can change this 1670 * behavior. Two reasons are known for someone to do that: Performance or 1671 * dead-locking issues. 1672 * 1673 * @param mock 1674 * the mock to make thread safe 1675 * @param threadSafe 1676 * If the mock should be thread safe or not 1677 */ makeThreadSafe(Object mock, boolean threadSafe)1678 public static void makeThreadSafe(Object mock, boolean threadSafe) { 1679 getControl(mock).makeThreadSafe(threadSafe); 1680 } 1681 1682 /** 1683 * Tell that the mock should be used in only one thread. An exception will 1684 * be thrown if that's not the case. This can be useful when mocking an 1685 * object that isn't thread safe to make sure it is used correctly in a 1686 * multithreaded environment. By default, no check is done unless 1687 * {@link #ENABLE_THREAD_SAFETY_CHECK_BY_DEFAULT} was set to true. 1688 * 1689 * @param mock 1690 * the mock 1691 * @param shouldBeUsedInOneThread 1692 * If the mock should be used in only one thread 1693 */ checkIsUsedInOneThread(Object mock, boolean shouldBeUsedInOneThread)1694 public static void checkIsUsedInOneThread(Object mock, 1695 boolean shouldBeUsedInOneThread) { 1696 getControl(mock).checkIsUsedInOneThread(shouldBeUsedInOneThread); 1697 } 1698 1699 /** 1700 * Get the current value for an EasyMock property 1701 * 1702 * @param key 1703 * key for the property 1704 * @return the property value 1705 */ getEasyMockProperty(String key)1706 public static String getEasyMockProperty(String key) { 1707 return EasyMockProperties.getInstance().getProperty(key); 1708 } 1709 1710 /** 1711 * Set a property to modify the default EasyMock behavior. These properties 1712 * can also be set as System properties or in easymock.properties. This 1713 * method can then be called to overload them. For details and a list of 1714 * available properties see the EasyMock documentation. 1715 * <p> 1716 * <b>Note:</b> This method is static. Setting a property will change the 1717 * entire EasyMock behavior. 1718 * 1719 * @param key 1720 * property key 1721 * @param value 1722 * property value. A null value will remove the property 1723 * @return the previous property value 1724 */ setEasyMockProperty(String key, String value)1725 public static String setEasyMockProperty(String key, String value) { 1726 return EasyMockProperties.getInstance().setProperty(key, value); 1727 } 1728 1729 // ///CLOVER:OFF 1730 /** Prevent instantiation but allow inheritance */ EasyMock()1731 protected EasyMock() { 1732 } 1733 // ///CLOVER:ON 1734 } 1735