55use function PHPStan \Testing \assertType ;
66
77function doFoo (array $ post ): void {
8- assertType ("non-empty-array&hasOffset('a')&hasOffset('b') " , array_merge (['a ' => 1 , 'b ' => false ], $ post ));
8+ assertType ("non-empty-array&hasOffset('a')&hasOffset('b') " , array_merge (['a ' => 1 , 'b ' => false , 10 => 99 ], $ post ));
99}
1010
1111function doBar (array $ array ): void {
12- assertType ("non-empty-array&hasOffset ('a')&hasOffset ('b') " , array_merge ($ array , ['a ' => 1 , 'b ' => false ]));
12+ assertType ("non-empty-array&hasOffsetValue ('a', 1)&hasOffsetValue ('b', false ) " , array_merge ($ array , ['a ' => 1 , 'b ' => false , 10 => 99 ]));
1313}
1414
1515function doFooBar (array $ array ): void {
16- assertType ("non-empty-array&hasOffset('a')&hasOffset ('b')&hasOffset ('c') " , array_merge (['c ' => 'd ' ], $ array , ['a ' => 1 , 'b ' => false , 'c ' => 'e ' ]));
16+ assertType ("non-empty-array&hasOffset('x')&hasOffsetValue('a', 1)&hasOffsetValue ('b', false)&hasOffsetValue ('c', 'e' ) " , array_merge (['c ' => 'd ' , ' x ' => ' y ' ], $ array , ['a ' => 1 , 'b ' => false , 'c ' => 'e ' ]));
1717}
1818
1919function doFooInts (array $ array ): void {
20- assertType ("non-empty-array&hasOffset ('a')&hasOffset ('c')&hasOffset(1)&hasOffset(3 ) " , array_merge ([1 => 'd ' ], $ array , ['a ' => 1 , 3 => false , 'c ' => 'e ' ]));
20+ assertType ("non-empty-array&hasOffsetValue ('a', 1)&hasOffsetValue ('c', 'e' ) " , array_merge ([1 => 'd ' ], $ array , ['a ' => 1 , 3 => false , 'c ' => 'e ' ]));
2121}
2222
2323/**
2424 * @param array<string> $array
2525 */
2626function floatKey (array $ array ): void {
27- assertType ("non-empty-array<string>&hasOffset ('a')&hasOffset ('c')&hasOffset(3)&hasOffset(4 ) " , array_merge ([4.23 => 'd ' ], $ array , ['a ' => '1 ' , 3 => 'false ' , 'c ' => 'e ' ]));
27+ assertType ("non-empty-array<string>&hasOffsetValue ('a', '1')&hasOffsetValue ('c', 'e' ) " , array_merge ([4.23 => 'd ' ], $ array , ['a ' => '1 ' , 3 => 'false ' , 'c ' => 'e ' ]));
2828}
2929
3030function doOptKeys (array $ array , array $ arr2 ): void {
@@ -38,17 +38,25 @@ function doOptKeys(array $array, array $arr2): void {
3838 * @param array{a?: 1, b: 2} $array
3939 */
4040function doOptShapeKeys (array $ array , array $ arr2 ): void {
41- assertType ("non-empty-array&hasOffset ('b') " , array_merge ($ arr2 , $ array ));
41+ assertType ("non-empty-array&hasOffsetValue ('b', 2 ) " , array_merge ($ arr2 , $ array ));
4242}
4343
4444function hasOffsetKeys (array $ array , array $ arr2 ): void {
4545 if (array_key_exists ('b ' , $ array )) {
46- assertType ("non-empty-array&hasOffset ('b') " , array_merge ($ arr2 , $ array ));
46+ assertType ("non-empty-array&hasOffsetValue ('b', mixed ) " , array_merge ($ arr2 , $ array ));
4747 }
4848}
4949
5050function hasOffsetValueKeys (array $ array , array $ arr2 ): void {
5151 $ array ['b ' ] = 123 ;
5252
53- assertType ("non-empty-array&hasOffset('b') " , array_merge ($ arr2 , $ array ));
53+ assertType ("non-empty-array&hasOffsetValue('b', 123) " , array_merge ($ arr2 , $ array ));
54+ }
55+
56+ /**
57+ * @param array{a?: 1, b?: 2} $allOptional
58+ */
59+ function doAllOptional (array $ allOptional , array $ arr2 ): void {
60+ assertType ("array " , array_merge ($ arr2 , $ allOptional ));
61+ assertType ("array " , array_merge ($ allOptional , $ arr2 ));
5462}
0 commit comments