@@ -35,28 +35,36 @@ public function testGetType(array $schema, Type $type): void
35
35
public function typeProvider (): iterable
36
36
{
37
37
yield [['type ' => 'integer ' ], new Type (Type::BUILTIN_TYPE_INT )];
38
- yield [['type ' => [' integer ' , 'null ' ]], new Type (Type::BUILTIN_TYPE_INT , true )];
38
+ yield [['oneOf ' => [[ ' type ' => 'null ' ], [ ' type ' => ' integer ' ] ]], new Type (Type::BUILTIN_TYPE_INT , true )];
39
39
yield [['type ' => 'number ' ], new Type (Type::BUILTIN_TYPE_FLOAT )];
40
- yield [['type ' => [' number ' , 'null ' ]], new Type (Type::BUILTIN_TYPE_FLOAT , true )];
40
+ yield [['oneOf ' => [[ ' type ' => 'null ' ], [ ' type ' => ' number ' ] ]], new Type (Type::BUILTIN_TYPE_FLOAT , true )];
41
41
yield [['type ' => 'boolean ' ], new Type (Type::BUILTIN_TYPE_BOOL )];
42
- yield [['type ' => [' boolean ' , 'null ' ]], new Type (Type::BUILTIN_TYPE_BOOL , true )];
42
+ yield [['oneOf ' => [[ ' type ' => 'null ' ], [ ' type ' => ' boolean ' ] ]], new Type (Type::BUILTIN_TYPE_BOOL , true )];
43
43
yield [['type ' => 'string ' ], new Type (Type::BUILTIN_TYPE_STRING )];
44
- yield [['type ' => [' string ' , 'null ' ]], new Type (Type::BUILTIN_TYPE_STRING , true )];
44
+ yield [['oneOf ' => [[ ' type ' => 'null ' ], [ ' type ' => ' string ' ] ]], new Type (Type::BUILTIN_TYPE_STRING , true )];
45
45
yield [['type ' => 'object ' ], new Type (Type::BUILTIN_TYPE_OBJECT )];
46
- yield [['type ' => [' object ' , 'null ' ]], new Type (Type::BUILTIN_TYPE_OBJECT , true )];
46
+ yield [['oneOf ' => [[ ' type ' => 'null ' ], [ ' type ' => ' object ' ] ]], new Type (Type::BUILTIN_TYPE_OBJECT , true )];
47
47
yield [['type ' => 'string ' , 'format ' => 'date-time ' ], new Type (Type::BUILTIN_TYPE_OBJECT , false , \DateTimeImmutable::class)];
48
- yield [['type ' => [' string ' , 'null ' ], ' format ' => 'date-time ' ], new Type (Type::BUILTIN_TYPE_OBJECT , true , \DateTimeImmutable::class)];
48
+ yield [['oneOf ' => [[ ' type ' => 'null ' ], [ ' type ' => ' string ' , ' format ' => 'date-time ' ]] ], new Type (Type::BUILTIN_TYPE_OBJECT , true , \DateTimeImmutable::class)];
49
49
yield [['type ' => 'string ' , 'format ' => 'duration ' ], new Type (Type::BUILTIN_TYPE_OBJECT , false , \DateInterval::class)];
50
50
yield [['type ' => 'object ' ], new Type (Type::BUILTIN_TYPE_OBJECT , false , Dummy::class)];
51
- yield [['type ' => [' object ' , 'null ' ]], new Type (Type::BUILTIN_TYPE_OBJECT , true , Dummy::class)];
51
+ yield [['oneOf ' => [[ ' type ' => 'null ' ], [ ' type ' => ' object ' ] ]], new Type (Type::BUILTIN_TYPE_OBJECT , true , Dummy::class)];
52
52
yield [['type ' => 'array ' , 'items ' => ['type ' => 'string ' ]], new Type (Type::BUILTIN_TYPE_STRING , false , null , true )];
53
53
yield 'array can be itself nullable ' => [
54
- ['type ' => [' array ' , 'null ' ], ' items ' => ['type ' => 'string ' ]],
54
+ ['oneOf ' => [[ ' type ' => 'null ' ], [ ' type ' => ' array ' , ' items ' => ['type ' => 'string ' ]] ]],
55
55
new Type (Type::BUILTIN_TYPE_STRING , true , null , true ),
56
56
];
57
57
58
58
yield 'array can contain nullable values ' => [
59
- ['type ' => 'array ' , 'items ' => ['type ' => ['string ' , 'null ' ]]],
59
+ [
60
+ 'type ' => 'array ' ,
61
+ 'items ' => [
62
+ 'oneOf ' => [
63
+ ['type ' => 'null ' ],
64
+ ['type ' => 'string ' ],
65
+ ],
66
+ ],
67
+ ],
60
68
new Type (Type::BUILTIN_TYPE_STRING , false , null , true , null , new Type (Type::BUILTIN_TYPE_STRING , true , null , false )),
61
69
];
62
70
@@ -72,7 +80,12 @@ public function typeProvider(): iterable
72
80
];
73
81
74
82
yield 'nullable map with string keys becomes a nullable object ' => [
75
- ['type ' => ['object ' , 'null ' ], 'additionalProperties ' => ['type ' => 'string ' ]],
83
+ [
84
+ 'oneOf ' => [
85
+ ['type ' => 'null ' ],
86
+ ['type ' => 'object ' , 'additionalProperties ' => ['type ' => 'string ' ]],
87
+ ],
88
+ ],
76
89
new Type (
77
90
Type::BUILTIN_TYPE_STRING ,
78
91
true ,
@@ -96,7 +109,15 @@ public function typeProvider(): iterable
96
109
];
97
110
98
111
yield 'map value type nullability will be considered ' => [
99
- ['type ' => 'object ' , 'additionalProperties ' => ['type ' => ['integer ' , 'null ' ]]],
112
+ [
113
+ 'type ' => 'object ' ,
114
+ 'additionalProperties ' => [
115
+ 'oneOf ' => [
116
+ ['type ' => 'null ' ],
117
+ ['type ' => 'integer ' ],
118
+ ],
119
+ ],
120
+ ],
100
121
new Type (
101
122
Type::BUILTIN_TYPE_ARRAY ,
102
123
false ,
@@ -108,7 +129,20 @@ public function typeProvider(): iterable
108
129
];
109
130
110
131
yield 'nullable map can contain nullable values ' => [
111
- ['type ' => ['object ' , 'null ' ], 'additionalProperties ' => ['type ' => ['integer ' , 'null ' ]]],
132
+ [
133
+ 'oneOf ' => [
134
+ ['type ' => 'null ' ],
135
+ [
136
+ 'type ' => 'object ' ,
137
+ 'additionalProperties ' => [
138
+ 'oneOf ' => [
139
+ ['type ' => 'null ' ],
140
+ ['type ' => 'integer ' ],
141
+ ],
142
+ ],
143
+ ],
144
+ ],
145
+ ],
112
146
new Type (
113
147
Type::BUILTIN_TYPE_ARRAY ,
114
148
true ,
0 commit comments