Mercurial > hg > rc1
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 } |