| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- <?php
- /**
- * Test: Nette\Utils\Json::decode()
- */
- declare(strict_types=1);
- use Nette\Utils\Json;
- use Tester\Assert;
- require __DIR__ . '/../bootstrap.php';
- Assert::same('ok', Json::decode('"ok"'));
- Assert::null(Json::decode('null'));
- Assert::null(Json::decode(' null'));
- Assert::equal((object) ['a' => 1], Json::decode('{"a":1}'));
- Assert::same(['a' => 1], Json::decode('{"a":1}', Json::FORCE_ARRAY));
- Assert::same(['a' => 1], Json::decode('{"a":1}', forceArrays: true));
- Assert::exception(
- fn() => Json::decode(''),
- Nette\Utils\JsonException::class,
- 'Syntax error',
- );
- Assert::exception(
- fn() => Json::decode('NULL'),
- Nette\Utils\JsonException::class,
- 'Syntax error',
- );
- Assert::exception(
- fn() => Json::decode('{'),
- Nette\Utils\JsonException::class,
- 'Syntax error',
- );
- Assert::exception(
- fn() => Json::decode('{}}'),
- Nette\Utils\JsonException::class,
- 'Syntax error',
- );
- Assert::exception(
- fn() => Json::decode("\x00"),
- Nette\Utils\JsonException::class,
- defined('JSON_C_VERSION') ? 'Syntax error' : 'Control character error, possibly incorrectly encoded',
- );
- Assert::exception(
- fn() => Json::decode('{"\u0000": 1}'),
- Nette\Utils\JsonException::class,
- 'The decoded property name is invalid',
- );
- Assert::same(["\x00" => 1], Json::decode('{"\u0000": 1}', Json::FORCE_ARRAY));
- Assert::equal((object) ['a' => "\x00"], Json::decode('{"a": "\u0000"}'));
- Assert::equal((object) ["\"\x00" => 1], Json::decode('{"\"\u0000": 1}'));
- Assert::exception(
- fn() => Json::decode("\"\xC1\xBF\""),
- Nette\Utils\JsonException::class,
- 'Malformed UTF-8 characters, possibly incorrectly encoded',
- );
- // default JSON_BIGINT_AS_STRING
- if (defined('JSON_C_VERSION')) {
- if (PHP_INT_SIZE > 4) {
- // 64-bit
- Assert::same([9_223_372_036_854_775_807], Json::decode('[12345678901234567890]')); // trimmed to max 64-bit integer
- } else {
- // 32-bit
- Assert::same(['9223372036854775807'], Json::decode('[12345678901234567890]')); // trimmed to max 64-bit integer
- }
- } else {
- Assert::same(['12345678901234567890'], Json::decode('[12345678901234567890]'));
- }
- // JSON_* constants support
- Assert::same('ab', Json::decode("\"a\x80b\"", JSON_INVALID_UTF8_IGNORE));
|