comparison vendor/sabre/vobject/tests/VObject/Parser/JsonTest.php @ 7:430dbd5346f7

vendor sabre as distributed
author Charlie Root
date Sat, 13 Jan 2018 09:06:10 -0500
parents
children
comparison
equal deleted inserted replaced
6:cec75ba50afc 7:430dbd5346f7
1 <?php
2
3 namespace Sabre\VObject\Parser;
4
5 use
6 Sabre\VObject;
7
8 class JsonTest extends \PHPUnit_Framework_TestCase {
9
10 function testRoundTripJCard() {
11
12 $input = array(
13 "vcard",
14 array(
15 array(
16 "version",
17 new \StdClass(),
18 "text",
19 "4.0"
20 ),
21 array(
22 "prodid",
23 new \StdClass(),
24 "text",
25 "-//Sabre//Sabre VObject " . VObject\Version::VERSION . "//EN",
26 ),
27 array(
28 "uid",
29 new \StdClass(),
30 "text",
31 "foo",
32 ),
33 array(
34 "bday",
35 new \StdClass(),
36 "date-and-or-time",
37 "1985-04-07",
38 ),
39 array(
40 "rev",
41 new \StdClass(),
42 "timestamp",
43 "1995-10-31T22:27:10Z",
44 ),
45 array(
46 "lang",
47 new \StdClass(),
48 "language-tag",
49 "nl",
50 ),
51 array(
52 "n",
53 new \StdClass(),
54 "text",
55 array("Last", "First", "Middle", "", ""),
56 ),
57 array(
58 "tel",
59 (object)array(
60 "group" => "item1",
61 ),
62 "text",
63 "+1 555 123456",
64 ),
65 array(
66 "x-ab-label",
67 (object)array(
68 "group" => "item1",
69 ),
70 "unknown",
71 "Walkie Talkie",
72 ),
73 array(
74 "adr",
75 new \StdClass(),
76 "text",
77 array(
78 "",
79 "",
80 array("My Street", "Left Side", "Second Shack"),
81 "Hometown",
82 "PA",
83 "18252",
84 "U.S.A",
85 ),
86 ),
87 array(
88 "bday",
89 (object)array(
90 'x-param' => array(1,2),
91 ),
92 "date",
93 "1979-12-25",
94 ),
95 array(
96 "bday",
97 new \StdClass(),
98 "date-time",
99 "1979-12-25T02:00:00",
100 ),
101 array(
102 "x-truncated",
103 new \StdClass(),
104 "date",
105 "--12-25",
106 ),
107 array(
108 "x-time-local",
109 new \StdClass(),
110 "time",
111 "12:30:00"
112 ),
113 array(
114 "x-time-utc",
115 new \StdClass(),
116 "time",
117 "12:30:00Z"
118 ),
119 array(
120 "x-time-offset",
121 new \StdClass(),
122 "time",
123 "12:30:00-08:00"
124 ),
125 array(
126 "x-time-reduced",
127 new \StdClass(),
128 "time",
129 "23"
130 ),
131 array(
132 "x-time-truncated",
133 new \StdClass(),
134 "time",
135 "--30"
136 ),
137 array(
138 "x-karma-points",
139 new \StdClass(),
140 "integer",
141 42
142 ),
143 array(
144 "x-grade",
145 new \StdClass(),
146 "float",
147 1.3
148 ),
149 array(
150 "tz",
151 new \StdClass(),
152 "utc-offset",
153 "-05:00",
154 ),
155 ),
156 );
157
158 $parser = new Json(json_encode($input));
159 $vobj = $parser->parse();
160
161 $version = VObject\Version::VERSION;
162
163
164 $result = $vobj->serialize();
165 $expected = <<<VCF
166 BEGIN:VCARD
167 VERSION:4.0
168 PRODID:-//Sabre//Sabre VObject $version//EN
169 UID:foo
170 BDAY:1985-04-07
171 REV:1995-10-31T22:27:10Z
172 LANG:nl
173 N:Last;First;Middle;;
174 item1.TEL:+1 555 123456
175 item1.X-AB-LABEL:Walkie Talkie
176 ADR:;;My Street,Left Side,Second Shack;Hometown;PA;18252;U.S.A
177 BDAY;X-PARAM=1,2;VALUE=DATE:1979-12-25
178 BDAY;VALUE=DATE-TIME:1979-12-25T02:00:00
179 X-TRUNCATED;VALUE=DATE:--12-25
180 X-TIME-LOCAL;VALUE=TIME:12:30:00
181 X-TIME-UTC;VALUE=TIME:12:30:00Z
182 X-TIME-OFFSET;VALUE=TIME:12:30:00-08:00
183 X-TIME-REDUCED;VALUE=TIME:23
184 X-TIME-TRUNCATED;VALUE=TIME:--30
185 X-KARMA-POINTS;VALUE=INTEGER:42
186 X-GRADE;VALUE=FLOAT:1.3
187 TZ;VALUE=UTC-OFFSET:-05:00
188 END:VCARD
189
190 VCF;
191 $this->assertEquals($expected, str_replace("\r", "", $result));
192
193 $this->assertEquals(
194 $input,
195 $vobj->jsonSerialize()
196 );
197
198 }
199
200 function testRoundTripJCal() {
201
202 $input = array(
203 "vcalendar",
204 array(
205 array(
206 "version",
207 new \StdClass(),
208 "text",
209 "2.0"
210 ),
211 array(
212 "prodid",
213 new \StdClass(),
214 "text",
215 "-//Sabre//Sabre VObject " . VObject\Version::VERSION . "//EN",
216 ),
217 array(
218 "calscale",
219 new \StdClass(),
220 "text",
221 "GREGORIAN"
222 ),
223 ),
224 array(
225 array("vevent",
226 array(
227 array(
228 "uid", new \StdClass(), "text", "foo",
229 ),
230 array(
231 "dtstart", new \StdClass(), "date", "2013-05-26",
232 ),
233 array(
234 "duration", new \StdClass(), "duration", "P1D",
235 ),
236 array(
237 "categories", new \StdClass(), "text", "home", "testing",
238 ),
239 array(
240 "created", new \StdClass(), "date-time", "2013-05-26T18:10:00Z",
241 ),
242 array(
243 "attach", new \StdClass(), "binary", base64_encode('attachment')
244 ),
245 array(
246 "attendee", new \StdClass(), "cal-address", "mailto:armin@example.org",
247 ),
248 array(
249 "geo", new \StdClass(), "float", array(51.96668, 7.61876),
250 ),
251 array(
252 "sequence", new \StdClass(), "integer", 5
253 ),
254 array(
255 "freebusy", new \StdClass(), "period", array("2013-05-26T21:02:13", "PT1H"), array("2013-06-26T12:00:00", "2013-06-26T13:00:00"),
256 ),
257 array(
258 "url", new \StdClass(), "uri", "http://example.org/",
259 ),
260 array(
261 "tzoffsetfrom", new \StdClass(), "utc-offset", "+05:00",
262 ),
263 array(
264 "rrule", new \StdClass(), "recur", array(
265 'freq' => 'WEEKLY',
266 'byday' => array('MO', 'TU'),
267 ),
268 ),
269 array(
270 "x-bool", new \StdClass(), "boolean", true
271 ),
272 array(
273 "x-time", new \StdClass(), "time", "08:00:00",
274 ),
275 array(
276 "attendee",
277 (object)array(
278 "cn" => "Dominik",
279 "partstat" => "DECLINED",
280 ),
281 "cal-address",
282 "mailto:dominik@example.org"
283 ),
284 array(
285 "request-status",
286 new \StdClass(),
287 "text",
288 array("2.0", "Success"),
289 ),
290 array(
291 "request-status",
292 new \StdClass(),
293 "text",
294 array("3.7", "Invalid Calendar User", "ATTENDEE:mailto:jsmith@example.org"),
295 ),
296 ),
297 array(
298 array("valarm",
299 array(
300 array(
301 "action", new \StdClass(), "text", "DISPLAY",
302 ),
303 ),
304 array(),
305 ),
306 ),
307 )
308 ),
309 );
310
311 $parser = new Json(json_encode($input));
312 $vobj = $parser->parse();
313 $result = $vobj->serialize();
314
315 $version = VObject\Version::VERSION;
316
317 $expected = <<<VCF
318 BEGIN:VCALENDAR
319 VERSION:2.0
320 PRODID:-//Sabre//Sabre VObject $version//EN
321 CALSCALE:GREGORIAN
322 BEGIN:VEVENT
323 UID:foo
324 DTSTART;VALUE=DATE:20130526
325 DURATION:P1D
326 CATEGORIES:home,testing
327 CREATED:20130526T181000Z
328 ATTACH;VALUE=BINARY:YXR0YWNobWVudA==
329 ATTENDEE:mailto:armin@example.org
330 GEO:51.96668;7.61876
331 SEQUENCE:5
332 FREEBUSY:20130526T210213/PT1H,20130626T120000/20130626T130000
333 URL:http://example.org/
334 TZOFFSETFROM:+05:00
335 RRULE:FREQ=WEEKLY;BYDAY=MO,TU
336 X-BOOL;VALUE=BOOLEAN:TRUE
337 X-TIME;VALUE=TIME:08:00:00
338 ATTENDEE;CN=Dominik;PARTSTAT=DECLINED:mailto:dominik@example.org
339 REQUEST-STATUS:2.0;Success
340 REQUEST-STATUS:3.7;Invalid Calendar User;ATTENDEE:mailto:jsmith@example.org
341 BEGIN:VALARM
342 ACTION:DISPLAY
343 END:VALARM
344 END:VEVENT
345 END:VCALENDAR
346
347 VCF;
348 $this->assertEquals($expected, str_replace("\r", "", $result));
349
350 $this->assertEquals(
351 $input,
352 $vobj->jsonSerialize()
353 );
354
355 }
356
357 function testParseStreamArg() {
358
359 $input = array(
360 "vcard",
361 array(
362 array(
363 "FN", new \StdClass(), 'text', "foo",
364 ),
365 ),
366 );
367
368 $stream = fopen('php://memory','r+');
369 fwrite($stream, json_encode($input));
370 rewind($stream);
371
372 $result = VObject\Reader::readJson($stream,0);
373 $this->assertEquals('foo', $result->FN->getValue());
374
375 }
376
377 /**
378 * @expectedException \Sabre\VObject\ParseException
379 */
380 function testParseInvalidData() {
381
382 $json = new Json();
383 $input = array(
384 "vlist",
385 array(
386 array(
387 "FN", new \StdClass(), 'text', "foo",
388 ),
389 ),
390 );
391
392 $json->parse(json_encode($input), 0);
393
394 }
395 }