SmartObject.undeclaredMethod.annotation.phpt 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. /**
  3. * Test: Nette\SmartObject undeclared method and annotation @method.
  4. */
  5. declare(strict_types=1);
  6. use Tester\Assert;
  7. require __DIR__ . '/../bootstrap.php';
  8. /**
  9. * @method traitA()
  10. */
  11. trait TraitA
  12. {
  13. }
  14. /**
  15. * @method traitB()
  16. */
  17. trait TraitB
  18. {
  19. }
  20. /**
  21. * @method traitC()
  22. */
  23. trait TraitC
  24. {
  25. use TraitB;
  26. }
  27. /**
  28. * @method classA()
  29. */
  30. class ParentClass
  31. {
  32. use Nette\SmartObject;
  33. use TraitA;
  34. }
  35. /**
  36. * @method classB()
  37. * @method int classC()
  38. * @method static classS1()
  39. * @method static int classS2()
  40. */
  41. class ChildClass extends ParentClass
  42. {
  43. use TraitC;
  44. }
  45. $obj = new ChildClass;
  46. Assert::exception(
  47. fn() => $obj->classBX(),
  48. Nette\MemberAccessException::class,
  49. 'Call to undefined method ChildClass::classBX(), did you mean classB()?',
  50. );
  51. Assert::exception(
  52. fn() => $obj->classCX(),
  53. Nette\MemberAccessException::class,
  54. 'Call to undefined method ChildClass::classCX(), did you mean classC()?',
  55. );
  56. Assert::exception(
  57. fn() => $obj->classS1X(),
  58. Nette\MemberAccessException::class,
  59. 'Call to undefined method ChildClass::classS1X(), did you mean classS1()?',
  60. );
  61. Assert::exception(
  62. fn() => $obj->classS2X(),
  63. Nette\MemberAccessException::class,
  64. 'Call to undefined method ChildClass::classS2X(), did you mean classS2()?',
  65. );
  66. Assert::exception(
  67. fn() => $obj->classAX(),
  68. Nette\MemberAccessException::class,
  69. 'Call to undefined method ChildClass::classAX(), did you mean classA()?',
  70. );
  71. Assert::exception(
  72. fn() => $obj->traitCX(),
  73. Nette\MemberAccessException::class,
  74. 'Call to undefined method ChildClass::traitCX(), did you mean traitC()?',
  75. );
  76. Assert::exception(
  77. fn() => $obj->traitBX(),
  78. Nette\MemberAccessException::class,
  79. 'Call to undefined method ChildClass::traitBX(), did you mean traitB()?',
  80. );
  81. Assert::exception(
  82. fn() => $obj->traitAX(),
  83. Nette\MemberAccessException::class,
  84. 'Call to undefined method ChildClass::traitAX(), did you mean traitA()?',
  85. );