/
AbstractComposerTestCase.php
74 lines (59 loc) 路 1.94 KB
/
AbstractComposerTestCase.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
declare(strict_types=1);
/**
* Copyright (c) 2018-2022 Andreas M枚ller
*
* For the full copyright and license information, please view
* the LICENSE.md file that was distributed with this source code.
*
* @see https://github.com/ergebnis/json-normalizer
*/
namespace Ergebnis\Json\Normalizer\Test\Unit\Vendor\Composer;
use Ergebnis\Json\Normalizer\Json;
use Ergebnis\Json\Normalizer\Normalizer;
use Ergebnis\Json\Normalizer\Test;
/**
* @internal
*/
abstract class AbstractComposerTestCase extends Test\Unit\AbstractNormalizerTestCase
{
/**
* @dataProvider provideJsonNotDecodingToObject
*/
final public function testNormalizeDoesNotModifyWhenJsonDecodedIsNotAnObject(string $encoded): void
{
$json = Json::fromEncoded($encoded);
/** @var class-string $className */
$className = static::className();
$reflection = new \ReflectionClass($className);
/** @var Normalizer $normalizer */
$normalizer = $reflection->newInstanceWithoutConstructor();
$normalized = $normalizer->normalize($json);
self::assertJsonStringEqualsJsonStringNormalized($json->encoded(), $normalized->encoded());
}
/**
* @return \Generator<array<string>>
*/
final public function provideJsonNotDecodingToObject(): \Generator
{
$faker = self::faker();
$values = [
'array' => $faker->words(),
'bool-false' => false,
'bool-true' => true,
'float' => $faker->randomFloat(),
'int' => $faker->randomNumber(),
'null' => null,
'string' => $faker->sentence(),
];
foreach ($values as $key => $value) {
$encoded = \json_encode($value);
if (!\is_string($encoded)) {
throw new \RuntimeException('Failed encoding a value to JSON.');
}
yield $key => [
$encoded,
];
}
}
}