19
19
use phpDocumentor \Reflection \Types \Iterable_ ;
20
20
use phpDocumentor \Reflection \Types \Nullable ;
21
21
use phpDocumentor \Reflection \Types \Object_ ;
22
+ use phpDocumentor \Reflection \Types \Boolean ;
22
23
use Mockery \MockInterface ;
23
24
use phpDocumentor \Reflection \Types \String_ ;
24
25
@@ -251,7 +252,7 @@ public function testResolvingCompoundTypedArrayTypes()
251
252
$ this ->assertInstanceOf (Compound::class, $ resolvedType );
252
253
$ this ->assertSame ('\stdClass[]|\phpDocumentor\Reflection\DocBlock[] ' , (string )$ resolvedType );
253
254
254
- /** @var Array_ $secondType */
255
+ /** @var Array_ $firstType */
255
256
$ firstType = $ resolvedType ->get (0 );
256
257
257
258
/** @var Array_ $secondType */
@@ -263,6 +264,174 @@ public function testResolvingCompoundTypedArrayTypes()
263
264
$ this ->assertInstanceOf (Object_::class, $ secondType ->getValueType ());
264
265
}
265
266
267
+
268
+ /**
269
+ * @covers ::__construct
270
+ * @covers ::resolve
271
+ * @covers ::<private>
272
+ *
273
+ * @uses \phpDocumentor\Reflection\Types\Context
274
+ * @uses \phpDocumentor\Reflection\Types\Compound
275
+ * @uses \phpDocumentor\Reflection\Types\Array_
276
+ * @uses \phpDocumentor\Reflection\Types\Object_
277
+ * @uses \phpDocumentor\Reflection\Fqsen
278
+ * @uses \phpDocumentor\Reflection\FqsenResolver
279
+ */
280
+ public function testResolvingArrayExpressionObjectsTypes ()
281
+ {
282
+ $ fixture = new TypeResolver ();
283
+
284
+ /** @var Array_ $resolvedType */
285
+ $ resolvedType = $ fixture ->resolve ('(\stdClass|Reflection\DocBlock)[] ' , new Context ('phpDocumentor ' ));
286
+
287
+ $ this ->assertInstanceOf (Array_::class, $ resolvedType );
288
+ $ this ->assertSame ('(\stdClass|\phpDocumentor\Reflection\DocBlock)[] ' , (string )$ resolvedType );
289
+
290
+ /** @var Compound $valueType */
291
+ $ valueType = $ resolvedType ->getValueType ();
292
+
293
+ $ this ->assertInstanceOf (Compound::class, $ valueType );
294
+
295
+ /** @var Object_ $firstType */
296
+ $ firstType = $ valueType ->get (0 );
297
+
298
+ /** @var Object_ $secondType */
299
+ $ secondType = $ valueType ->get (1 );
300
+
301
+ $ this ->assertInstanceOf (Object_::class, $ firstType );
302
+ $ this ->assertInstanceOf (Object_::class, $ secondType );
303
+ }
304
+
305
+ /**
306
+ * @covers ::__construct
307
+ * @covers ::resolve
308
+ * @covers ::<private>
309
+ *
310
+ * @uses \phpDocumentor\Reflection\Types\Context
311
+ * @uses \phpDocumentor\Reflection\Types\Compound
312
+ * @uses \phpDocumentor\Reflection\Types\Array_
313
+ * @uses \phpDocumentor\Reflection\Types\Object_
314
+ * @uses \phpDocumentor\Reflection\Fqsen
315
+ * @uses \phpDocumentor\Reflection\FqsenResolver
316
+ */
317
+ public function testResolvingArrayExpressionSimpleTypes ()
318
+ {
319
+ $ fixture = new TypeResolver ();
320
+
321
+ /** @var Array_ $resolvedType */
322
+ $ resolvedType = $ fixture ->resolve ('(string|\stdClass|boolean)[] ' , new Context ('' ));
323
+
324
+ $ this ->assertInstanceOf (Array_::class, $ resolvedType );
325
+ $ this ->assertSame ('(string|\stdClass|bool)[] ' , (string )$ resolvedType );
326
+
327
+ /** @var Compound $valueType */
328
+ $ valueType = $ resolvedType ->getValueType ();
329
+
330
+ $ this ->assertInstanceOf (Compound::class, $ valueType );
331
+
332
+ /** @var String_ $firstType */
333
+ $ firstType = $ valueType ->get (0 );
334
+
335
+ /** @var Object_ $secondType */
336
+ $ secondType = $ valueType ->get (1 );
337
+
338
+ /** @var Boolean $thirdType */
339
+ $ thirdType = $ valueType ->get (2 );
340
+
341
+ $ this ->assertInstanceOf (String_::class, $ firstType );
342
+ $ this ->assertInstanceOf (Object_::class, $ secondType );
343
+ $ this ->assertInstanceOf (Boolean::class, $ thirdType );
344
+ }
345
+
346
+ /**
347
+ * @covers ::__construct
348
+ * @covers ::resolve
349
+ * @covers ::<private>
350
+ *
351
+ * @uses \phpDocumentor\Reflection\Types\Context
352
+ * @uses \phpDocumentor\Reflection\Types\Compound
353
+ * @uses \phpDocumentor\Reflection\Types\Array_
354
+ * @uses \phpDocumentor\Reflection\Types\Object_
355
+ * @uses \phpDocumentor\Reflection\Fqsen
356
+ * @uses \phpDocumentor\Reflection\FqsenResolver
357
+ */
358
+ public function testResolvingArrayOfArrayExpressionTypes ()
359
+ {
360
+ $ fixture = new TypeResolver ();
361
+
362
+ /** @var Array_ $resolvedType */
363
+ $ resolvedType = $ fixture ->resolve ('(string|\stdClass)[][] ' , new Context ('' ));
364
+
365
+ $ this ->assertInstanceOf (Array_::class, $ resolvedType );
366
+ $ this ->assertSame ('(string|\stdClass)[][] ' , (string )$ resolvedType );
367
+
368
+ /** @var Array_ $parentArrayType */
369
+ $ parentArrayType = $ resolvedType ->getValueType ();
370
+ $ this ->assertInstanceOf (Array_::class, $ parentArrayType );
371
+
372
+ /** @var Compound $valueType */
373
+ $ valueType = $ parentArrayType ->getValueType ();
374
+ $ this ->assertInstanceOf (Compound::class, $ valueType );
375
+
376
+ /** @var String_ $firstType */
377
+ $ firstType = $ valueType ->get (0 );
378
+
379
+ /** @var Object_ $secondType */
380
+ $ secondType = $ valueType ->get (1 );
381
+
382
+ $ this ->assertInstanceOf (String_::class, $ firstType );
383
+ $ this ->assertInstanceOf (Object_::class, $ secondType );
384
+ }
385
+
386
+
387
+ /**
388
+ * @covers ::__construct
389
+ * @covers ::resolve
390
+ * @covers ::<private>
391
+ *
392
+ * @uses \phpDocumentor\Reflection\Types\Context
393
+ * @uses \phpDocumentor\Reflection\Types\Compound
394
+ * @uses \phpDocumentor\Reflection\Types\Array_
395
+ * @uses \phpDocumentor\Reflection\Types\Object_
396
+ * @uses \phpDocumentor\Reflection\Fqsen
397
+ * @uses \phpDocumentor\Reflection\FqsenResolver
398
+ */
399
+ public function testResolvingArrayExpressionOrCompoundTypes ()
400
+ {
401
+ $ fixture = new TypeResolver ();
402
+
403
+ /** @var Compound $resolvedType */
404
+ $ resolvedType = $ fixture ->resolve ('\stdClass|(string|\stdClass)[]|bool ' , new Context ('' ));
405
+
406
+ $ this ->assertInstanceOf (Compound::class, $ resolvedType );
407
+ $ this ->assertSame ('\stdClass|(string|\stdClass)[]|bool ' , (string )$ resolvedType );
408
+
409
+ /** @var Object_ $firstType */
410
+ $ firstType = $ resolvedType ->get (0 );
411
+ $ this ->assertInstanceOf (Object_::class, $ firstType );
412
+
413
+ /** @var Array_ $secondType */
414
+ $ secondType = $ resolvedType ->get (1 );
415
+ $ this ->assertInstanceOf (Array_::class, $ secondType );
416
+
417
+ /** @var Array_ $thirdType */
418
+ $ thirdType = $ resolvedType ->get (2 );
419
+ $ this ->assertInstanceOf (Boolean::class, $ thirdType );
420
+
421
+ /** @var Compound $valueType */
422
+ $ valueType = $ secondType ->getValueType ();
423
+ $ this ->assertInstanceOf (Compound::class, $ valueType );
424
+
425
+ /** @var String_ $firstArrayType */
426
+ $ firstArrayType = $ valueType ->get (0 );
427
+
428
+ /** @var Object_ $secondArrayType */
429
+ $ secondArrayType = $ valueType ->get (1 );
430
+
431
+ $ this ->assertInstanceOf (String_::class, $ firstArrayType );
432
+ $ this ->assertInstanceOf (Object_::class, $ secondArrayType );
433
+ }
434
+
266
435
/**
267
436
* This test asserts that the parameter order is correct.
268
437
*
0 commit comments