|
25 | 25 | use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithGenerics; |
26 | 26 | use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNameAttributes; |
27 | 27 | use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNestedArray; |
| 28 | +use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNestedDictDummies; |
| 29 | +use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNestedListDummies; |
28 | 30 | use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithNullableProperties; |
29 | 31 | use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithPhpDoc; |
30 | 32 | use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithSyntheticProperties; |
31 | 33 | use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithUnionProperties; |
32 | 34 | use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\DummyWithValueTransformerAttributes; |
33 | 35 | use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\SelfReferencingDummy; |
| 36 | +use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\SelfReferencingDummyDict; |
| 37 | +use Symfony\Component\JsonStreamer\Tests\Fixtures\Model\SelfReferencingDummyList; |
34 | 38 | use Symfony\Component\JsonStreamer\Tests\Fixtures\ValueTransformer\BooleanToStringValueTransformer; |
35 | 39 | use Symfony\Component\JsonStreamer\Tests\Fixtures\ValueTransformer\DoubleIntAndCastToStringValueTransformer; |
36 | 40 | use Symfony\Component\JsonStreamer\ValueTransformer\DateTimeToStringValueTransformer; |
@@ -283,6 +287,56 @@ public function testWriteObjectWithSyntheticProperty() |
283 | 287 | $this->assertSame('{"synthetic":true}', (string) $writer->write(new DummyWithSyntheticProperties(), Type::object(DummyWithSyntheticProperties::class))); |
284 | 288 | } |
285 | 289 |
|
| 290 | + public function testWriteNestedSelfList() |
| 291 | + { |
| 292 | + $dummy = new SelfReferencingDummyList(); |
| 293 | + $dummy->items = [new SelfReferencingDummyList(), new SelfReferencingDummyList(), new SelfReferencingDummyList()]; |
| 294 | + |
| 295 | + $this->assertWritten( |
| 296 | + '{"items":[{"items":[]},{"items":[]},{"items":[]}]}', |
| 297 | + $dummy, |
| 298 | + Type::object(SelfReferencingDummyList::class) |
| 299 | + ); |
| 300 | + |
| 301 | + $dummy = new DummyWithNestedListDummies(); |
| 302 | + $dummy->dummies = [new DummyWithNestedListDummies(), new DummyWithNestedListDummies(), new DummyWithNestedListDummies()]; |
| 303 | + |
| 304 | + $this->assertWritten( |
| 305 | + '{"dummies":[{"dummies":[]},{"dummies":[]},{"dummies":[]}]}', |
| 306 | + $dummy, |
| 307 | + Type::object(DummyWithNestedListDummies::class) |
| 308 | + ); |
| 309 | + } |
| 310 | + |
| 311 | + public function testWriteNestedSelfDict() |
| 312 | + { |
| 313 | + $dummy = new SelfReferencingDummyDict(); |
| 314 | + $dummy->items = [ |
| 315 | + 'first' => new SelfReferencingDummyDict(), |
| 316 | + 'second' => new SelfReferencingDummyDict(), |
| 317 | + 'third' => new SelfReferencingDummyDict(), |
| 318 | + ]; |
| 319 | + |
| 320 | + $this->assertWritten( |
| 321 | + '{"items":{"first":{"items":{}},"second":{"items":{}},"third":{"items":{}}}}', |
| 322 | + $dummy, |
| 323 | + Type::object(SelfReferencingDummyDict::class) |
| 324 | + ); |
| 325 | + |
| 326 | + $dummy = new DummyWithNestedDictDummies(); |
| 327 | + $dummy->dummies = [ |
| 328 | + 'first' => new DummyWithNestedDictDummies(), |
| 329 | + 'second' => new DummyWithNestedDictDummies(), |
| 330 | + 'third' => new DummyWithNestedDictDummies(), |
| 331 | + ]; |
| 332 | + |
| 333 | + $this->assertWritten( |
| 334 | + '{"dummies":{"first":{"dummies":{}},"second":{"dummies":{}},"third":{"dummies":{}}}}', |
| 335 | + $dummy, |
| 336 | + Type::object(DummyWithNestedDictDummies::class) |
| 337 | + ); |
| 338 | + } |
| 339 | + |
286 | 340 | #[DataProvider('throwWhenMaxDepthIsReachedDataProvider')] |
287 | 341 | public function testThrowWhenMaxDepthIsReached(Type $type, mixed $data) |
288 | 342 | { |
|
0 commit comments