@@ -133,13 +133,67 @@ public function testHtmlable()
133
133
{
134
134
$ data = new class implements Htmlable
135
135
{
136
- public function toHtml (): string
136
+ public function toHtml ()
137
137
{
138
138
return '<p>Hello, World!</p> ' ;
139
139
}
140
140
};
141
141
142
142
$ this ->assertEquals ("' \u 003Cp \u 003EHello, World! \u 003C\/p \u 003E' " , (string ) Js::from ($ data ));
143
+
144
+ $ data = new class implements Htmlable, Arrayable
145
+ {
146
+ public function toHtml ()
147
+ {
148
+ return '<p>Hello, World!</p> ' ;
149
+ }
150
+
151
+ public function toArray ()
152
+ {
153
+ return ['foo ' => 'hello ' , 'bar ' => 'world ' ];
154
+ }
155
+ };
156
+
157
+ $ this ->assertEquals (
158
+ "JSON.parse('{ \\u0022foo \\u0022: \\u0022hello \\u0022, \\u0022bar \\u0022: \\u0022world \\u0022}') " ,
159
+ (string ) Js::from ($ data )
160
+ );
161
+
162
+ $ data = new class implements Htmlable, Jsonable
163
+ {
164
+ public function toHtml ()
165
+ {
166
+ return '<p>Hello, World!</p> ' ;
167
+ }
168
+
169
+ public function toJson ($ options = 0 )
170
+ {
171
+ return json_encode (['foo ' => 'hello ' , 'bar ' => 'world ' ], $ options );
172
+ }
173
+ };
174
+
175
+ $ this ->assertEquals (
176
+ "JSON.parse('{ \\u0022foo \\u0022: \\u0022hello \\u0022, \\u0022bar \\u0022: \\u0022world \\u0022}') " ,
177
+ (string ) Js::from ($ data )
178
+ );
179
+
180
+ $ data = new class implements Htmlable, JsonSerializable
181
+ {
182
+ public function toHtml ()
183
+ {
184
+ return '<p>Hello, World!</p> ' ;
185
+ }
186
+
187
+ public function jsonSerialize (): mixed
188
+ {
189
+ return ['foo ' => 'hello ' , 'bar ' => 'world ' ];
190
+ }
191
+ };
192
+
193
+ $ this ->assertEquals (
194
+ "JSON.parse('{ \\u0022foo \\u0022: \\u0022hello \\u0022, \\u0022bar \\u0022: \\u0022world \\u0022}') " ,
195
+ (string ) Js::from ($ data )
196
+ );
143
197
}
144
198
145
199
public function testBackedEnums ()
0 commit comments