Skip to content

Commit 95791ff

Browse files
Merge branch '7.3' into 7.4
* 7.3: [TypeInfo] Simple array should be array type Handle signals on text input [TwigBridge] Fix form constraint [Runtime] Reuse the already created Request object when the app needs it as argument returns a kernel Update validators.el.xlf Fix MoneyType: add missing step attribute when html5=true [Console] Preserve `--help` option when a command is not found [Messenger] Fix PHP 8.5 deprecation for pgsqlGetNotify() in PostgreSQL transport chore: PHP CS Fixer - do not use deprecated sets in config verify spanish translations with state needs-review-translation
2 parents 697da0b + 54e7235 commit 95791ff

File tree

7 files changed

+132
-5
lines changed

7 files changed

+132
-5
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace Symfony\Component\JsonStreamer\Tests\Fixtures\Model;
4+
5+
class DummyWithList
6+
{
7+
/** @var list<ClassicDummy> */
8+
public array $dummies;
9+
10+
public string $customProperty;
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace Symfony\Component\JsonStreamer\Tests\Fixtures\Model;
4+
5+
class DummyWithNestedList
6+
{
7+
/** @var list<DummyWithList> */
8+
public array $dummies;
9+
10+
public string $stringProperty;
11+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
return static function (mixed $data, \Psr\Container\ContainerInterface $valueTransformers, array $options): \Traversable {
4+
try {
5+
yield '[';
6+
$prefix = '';
7+
foreach ($data as $value1) {
8+
yield $prefix;
9+
yield '{"dummies":{';
10+
$prefix = '';
11+
foreach ($value1->dummies as $key2 => $value2) {
12+
$key2 = is_int($key2) ? $key2 : \substr(\json_encode($key2), 1, -1);
13+
yield "{$prefix}\"{$key2}\":";
14+
yield '{"dummies":{';
15+
$prefix = '';
16+
foreach ($value2->dummies as $key3 => $value3) {
17+
$key3 = is_int($key3) ? $key3 : \substr(\json_encode($key3), 1, -1);
18+
yield "{$prefix}\"{$key3}\":";
19+
yield '{"id":';
20+
yield \json_encode($value3->id, \JSON_THROW_ON_ERROR, 506);
21+
yield ',"name":';
22+
yield \json_encode($value3->name, \JSON_THROW_ON_ERROR, 506);
23+
yield '}';
24+
$prefix = ',';
25+
}
26+
yield '},"customProperty":';
27+
yield \json_encode($value2->customProperty, \JSON_THROW_ON_ERROR, 508);
28+
yield '}';
29+
$prefix = ',';
30+
}
31+
yield '},"stringProperty":';
32+
yield \json_encode($value1->stringProperty, \JSON_THROW_ON_ERROR, 510);
33+
yield '}';
34+
$prefix = ',';
35+
}
36+
yield ']';
37+
} catch (\JsonException $e) {
38+
throw new \Symfony\Component\JsonStreamer\Exception\NotEncodableValueException($e->getMessage(), 0, $e);
39+
}
40+
};
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
return static function (mixed $data, \Psr\Container\ContainerInterface $valueTransformers, array $options): \Traversable {
4+
try {
5+
yield '[';
6+
$prefix = '';
7+
foreach ($data as $value1) {
8+
yield $prefix;
9+
yield '{"dummies":{';
10+
$prefix = '';
11+
foreach ($value1->dummies as $key2 => $value2) {
12+
$key2 = is_int($key2) ? $key2 : \substr(\json_encode($key2), 1, -1);
13+
yield "{$prefix}\"{$key2}\":";
14+
yield '{"id":';
15+
yield \json_encode($value2->id, \JSON_THROW_ON_ERROR, 508);
16+
yield ',"name":';
17+
yield \json_encode($value2->name, \JSON_THROW_ON_ERROR, 508);
18+
yield '}';
19+
$prefix = ',';
20+
}
21+
yield '},"customProperty":';
22+
yield \json_encode($value1->customProperty, \JSON_THROW_ON_ERROR, 510);
23+
yield '}';
24+
$prefix = ',';
25+
}
26+
yield ']';
27+
} catch (\JsonException $e) {
28+
throw new \Symfony\Component\JsonStreamer\Exception\NotEncodableValueException($e->getMessage(), 0, $e);
29+
}
30+
};

Tests/JsonStreamWriterTest.php

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@
2323
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithDateTimes;
2424
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithDollarNamedProperties;
2525
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithGenerics;
26+
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithList;
2627
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNameAttributes;
2728
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNestedArray;
2829
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNestedDictDummies;
30+
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNestedList;
2931
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNestedListDummies;
3032
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNullableProperties;
3133
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithPhpDoc;
@@ -131,7 +133,7 @@ public function testWriteNestedCollection()
131133
$dummyWithArray2->customProperty = 'customProperty2';
132134

133135
$this->assertWritten(
134-
'[{"dummies":[{"id":1,"name":"dummy"}],"customProperty":"customProperty1"},{"dummies":[{"id":1,"name":"dummy"}],"customProperty":"customProperty2"}]',
136+
'[{"dummies":{"0":{"id":1,"name":"dummy"}},"customProperty":"customProperty1"},{"dummies":{"0":{"id":1,"name":"dummy"}},"customProperty":"customProperty2"}]',
135137
[$dummyWithArray1, $dummyWithArray2],
136138
Type::list(Type::object(DummyWithArray::class)),
137139
);
@@ -145,10 +147,38 @@ public function testWriteNestedCollection()
145147
$dummyWithNestedArray2->stringProperty = 'stringProperty2';
146148

147149
$this->assertWritten(
148-
'[{"dummies":[{"dummies":[{"id":1,"name":"dummy"}],"customProperty":"customProperty1"}],"stringProperty":"stringProperty1"},{"dummies":[{"dummies":[{"id":1,"name":"dummy"}],"customProperty":"customProperty2"}],"stringProperty":"stringProperty2"}]',
150+
'[{"dummies":{"0":{"dummies":{"0":{"id":1,"name":"dummy"}},"customProperty":"customProperty1"}},"stringProperty":"stringProperty1"},{"dummies":{"0":{"dummies":{"0":{"id":1,"name":"dummy"}},"customProperty":"customProperty2"}},"stringProperty":"stringProperty2"}]',
149151
[$dummyWithNestedArray1, $dummyWithNestedArray2],
150152
Type::list(Type::object(DummyWithNestedArray::class)),
151153
);
154+
155+
$dummyWithList1 = new DummyWithList();
156+
$dummyWithList1->dummies = [new ClassicDummy()];
157+
$dummyWithList1->customProperty = 'customProperty1';
158+
159+
$dummyWithList2 = new DummyWithList();
160+
$dummyWithList2->dummies = [new ClassicDummy()];
161+
$dummyWithList2->customProperty = 'customProperty2';
162+
163+
$this->assertWritten(
164+
'[{"dummies":[{"id":1,"name":"dummy"}],"customProperty":"customProperty1"},{"dummies":[{"id":1,"name":"dummy"}],"customProperty":"customProperty2"}]',
165+
[$dummyWithList1, $dummyWithList2],
166+
Type::list(Type::object(DummyWithList::class)),
167+
);
168+
169+
$dummyWithNestedList1 = new DummyWithNestedList();
170+
$dummyWithNestedList1->dummies = [$dummyWithList1];
171+
$dummyWithNestedList1->stringProperty = 'stringProperty1';
172+
173+
$dummyWithNestedList2 = new DummyWithNestedList();
174+
$dummyWithNestedList2->dummies = [$dummyWithList2];
175+
$dummyWithNestedList2->stringProperty = 'stringProperty2';
176+
177+
$this->assertWritten(
178+
'[{"dummies":[{"dummies":[{"id":1,"name":"dummy"}],"customProperty":"customProperty1"}],"stringProperty":"stringProperty1"},{"dummies":[{"dummies":[{"id":1,"name":"dummy"}],"customProperty":"customProperty2"}],"stringProperty":"stringProperty2"}]',
179+
[$dummyWithNestedList1, $dummyWithNestedList2],
180+
Type::list(Type::object(DummyWithNestedList::class)),
181+
);
152182
}
153183

154184
public function testWriteObject()

Tests/Write/StreamWriterGeneratorTest.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,12 @@
2424
use Symfony\Component\JsonStreamer\Tests\Fixtures\Mapping\SyntheticPropertyMetadataLoader;
2525
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\ClassicDummy;
2626
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithArray;
27+
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithList;
2728
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithDollarNamedProperties;
2829
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNameAttributes;
2930
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNestedArray;
3031
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNestedDictDummies;
32+
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNestedList;
3133
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNestedListDummies;
3234
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithOtherDummies;
3335
use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithSyntheticProperties;
@@ -101,11 +103,14 @@ public static function generatedStreamWriterDataProvider(): iterable
101103
yield ['null_list', Type::list(Type::null())];
102104
yield ['object_list', Type::list(Type::object(DummyWithNameAttributes::class))];
103105
yield ['nullable_object_list', Type::nullable(Type::list(Type::object(DummyWithNameAttributes::class)))];
104-
yield ['nested_list', Type::list(Type::object(DummyWithArray::class))];
105-
yield ['double_nested_list', Type::list(Type::object(DummyWithNestedArray::class))];
106+
yield ['nested_list', Type::list(Type::object(DummyWithList::class))];
107+
yield ['double_nested_list', Type::list(Type::object(DummyWithNestedList::class))];
106108
yield ['object_with_nested_list_self', Type::object(DummyWithNestedListDummies::class)];
107109
yield ['object_with_nested_dict_self', Type::object(DummyWithNestedDictDummies::class)];
108110

111+
yield ['nested_array', Type::list(Type::object(DummyWithArray::class))];
112+
yield ['double_nested_array', Type::list(Type::object(DummyWithNestedArray::class))];
113+
109114
yield ['dict', Type::dict()];
110115
yield ['object_dict', Type::dict(Type::object(DummyWithNameAttributes::class))];
111116
yield ['nullable_object_dict', Type::nullable(Type::dict(Type::object(DummyWithNameAttributes::class)))];

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"psr/log": "^1|^2|^3",
2222
"symfony/deprecation-contracts": "^2.5|^3",
2323
"symfony/filesystem": "^7.2|^8.0",
24-
"symfony/type-info": "^7.3.3|^8.0",
24+
"symfony/type-info": "~7.3.8|^7.4.1|^8.0.1",
2525
"symfony/var-exporter": "^7.2|^8.0"
2626
},
2727
"require-dev": {

0 commit comments

Comments
 (0)