Expect.dynamic.phpt 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. declare(strict_types=1);
  3. use Nette\Schema\Context;
  4. use Nette\Schema\Expect;
  5. use Tester\Assert;
  6. require __DIR__ . '/../bootstrap.php';
  7. class DynamicParameter implements Nette\Schema\DynamicParameter
  8. {
  9. /** @var string */
  10. private $value;
  11. public function __construct(string $value)
  12. {
  13. $this->value = $value;
  14. }
  15. }
  16. test('', function () {
  17. $schema = Expect::structure([
  18. 'a' => Expect::string()->dynamic(),
  19. 'b' => Expect::string('def')->dynamic(),
  20. 'c' => Expect::int()->dynamic(),
  21. 'd' => Expect::int()->min(10)->max(20)->dynamic(),
  22. 'arr' => Expect::arrayOf(Expect::int()->dynamic()),
  23. 'anyOf' => Expect::anyOf(Expect::int(), Expect::string())->dynamic(),
  24. ]);
  25. $context = new Context;
  26. Assert::equal(
  27. (object) [
  28. 'a' => new DynamicParameter("\$this->parameters['foo']"),
  29. 'b' => new DynamicParameter("\$this->parameters['bar']"),
  30. 'c' => 123,
  31. 'd' => new DynamicParameter("\$this->parameters['int']"),
  32. 'arr' => ['x' => new DynamicParameter("\$this->parameters['baz']")],
  33. 'anyOf' => new DynamicParameter("\$this->parameters['anyOf']"),
  34. ],
  35. $schema->complete([
  36. 'a' => new DynamicParameter("\$this->parameters['foo']"),
  37. 'b' => new DynamicParameter("\$this->parameters['bar']"),
  38. 'c' => 123,
  39. 'd' => new DynamicParameter("\$this->parameters['int']"),
  40. 'arr' => ['x' => new DynamicParameter("\$this->parameters['baz']")],
  41. 'anyOf' => new DynamicParameter("\$this->parameters['anyOf']"),
  42. ], $context)
  43. );
  44. Assert::equal(
  45. [
  46. [
  47. new DynamicParameter("\$this->parameters['foo']"),
  48. 'string',
  49. ['a'],
  50. ],
  51. [
  52. new DynamicParameter("\$this->parameters['bar']"),
  53. 'string',
  54. ['b'],
  55. ],
  56. [
  57. new DynamicParameter("\$this->parameters['int']"),
  58. 'int:10..20',
  59. ['d'],
  60. ],
  61. [
  62. new DynamicParameter("\$this->parameters['baz']"),
  63. 'int',
  64. ['arr', 'x'],
  65. ],
  66. ],
  67. $context->dynamics
  68. );
  69. });