ItemsOptionsTest.php 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. declare(strict_types=1);
  3. namespace JsonMachineTest;
  4. use JsonMachine\Exception\InvalidArgumentException;
  5. use JsonMachine\ItemsOptions;
  6. use JsonMachine\JsonDecoder\ExtJsonDecoder;
  7. use PHPUnit\Framework\TestCase;
  8. /**
  9. * @covers \JsonMachine\ItemsOptions
  10. */
  11. class ItemsOptionsTest extends TestCase
  12. {
  13. public function testReturnsAllOptionsWithDefaultValues()
  14. {
  15. $options = new ItemsOptions();
  16. $optionsArray = $options->toArray();
  17. $this->assertEquals($this->defaultOptions(), $optionsArray);
  18. }
  19. public function testHasArrayAccess()
  20. {
  21. $options = new ItemsOptions();
  22. $this->assertTrue(isset($options['debug']));
  23. $this->assertFalse($options['debug']);
  24. }
  25. /**
  26. * @dataProvider defaultOptionNames
  27. */
  28. public function testThrowsOnInvalidOptionType($optionName)
  29. {
  30. $this->expectException(InvalidArgumentException::class);
  31. new ItemsOptions([$optionName => new InvalidValue()]);
  32. }
  33. public function defaultOptionNames()
  34. {
  35. foreach ($this->defaultOptions() as $name => $ignore) {
  36. yield [$name];
  37. }
  38. }
  39. private function defaultOptions()
  40. {
  41. return [
  42. 'pointer' => '',
  43. 'decoder' => new ExtJsonDecoder(),
  44. 'debug' => false,
  45. ];
  46. }
  47. public function testThrowsOnUnknownOption()
  48. {
  49. $this->expectException(InvalidArgumentException::class);
  50. new ItemsOptions(['invalid_option_name' => 'value']);
  51. }
  52. }
  53. class InvalidValue
  54. {
  55. }