Mercurial > hg > rc1
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/sabre/vobject/tests/VObject/Parser/JsonTest.php Sat Jan 13 09:06:10 2018 -0500 @@ -0,0 +1,395 @@ +<?php + +namespace Sabre\VObject\Parser; + +use + Sabre\VObject; + +class JsonTest extends \PHPUnit_Framework_TestCase { + + function testRoundTripJCard() { + + $input = array( + "vcard", + array( + array( + "version", + new \StdClass(), + "text", + "4.0" + ), + array( + "prodid", + new \StdClass(), + "text", + "-//Sabre//Sabre VObject " . VObject\Version::VERSION . "//EN", + ), + array( + "uid", + new \StdClass(), + "text", + "foo", + ), + array( + "bday", + new \StdClass(), + "date-and-or-time", + "1985-04-07", + ), + array( + "rev", + new \StdClass(), + "timestamp", + "1995-10-31T22:27:10Z", + ), + array( + "lang", + new \StdClass(), + "language-tag", + "nl", + ), + array( + "n", + new \StdClass(), + "text", + array("Last", "First", "Middle", "", ""), + ), + array( + "tel", + (object)array( + "group" => "item1", + ), + "text", + "+1 555 123456", + ), + array( + "x-ab-label", + (object)array( + "group" => "item1", + ), + "unknown", + "Walkie Talkie", + ), + array( + "adr", + new \StdClass(), + "text", + array( + "", + "", + array("My Street", "Left Side", "Second Shack"), + "Hometown", + "PA", + "18252", + "U.S.A", + ), + ), + array( + "bday", + (object)array( + 'x-param' => array(1,2), + ), + "date", + "1979-12-25", + ), + array( + "bday", + new \StdClass(), + "date-time", + "1979-12-25T02:00:00", + ), + array( + "x-truncated", + new \StdClass(), + "date", + "--12-25", + ), + array( + "x-time-local", + new \StdClass(), + "time", + "12:30:00" + ), + array( + "x-time-utc", + new \StdClass(), + "time", + "12:30:00Z" + ), + array( + "x-time-offset", + new \StdClass(), + "time", + "12:30:00-08:00" + ), + array( + "x-time-reduced", + new \StdClass(), + "time", + "23" + ), + array( + "x-time-truncated", + new \StdClass(), + "time", + "--30" + ), + array( + "x-karma-points", + new \StdClass(), + "integer", + 42 + ), + array( + "x-grade", + new \StdClass(), + "float", + 1.3 + ), + array( + "tz", + new \StdClass(), + "utc-offset", + "-05:00", + ), + ), + ); + + $parser = new Json(json_encode($input)); + $vobj = $parser->parse(); + + $version = VObject\Version::VERSION; + + + $result = $vobj->serialize(); + $expected = <<<VCF +BEGIN:VCARD +VERSION:4.0 +PRODID:-//Sabre//Sabre VObject $version//EN +UID:foo +BDAY:1985-04-07 +REV:1995-10-31T22:27:10Z +LANG:nl +N:Last;First;Middle;; +item1.TEL:+1 555 123456 +item1.X-AB-LABEL:Walkie Talkie +ADR:;;My Street,Left Side,Second Shack;Hometown;PA;18252;U.S.A +BDAY;X-PARAM=1,2;VALUE=DATE:1979-12-25 +BDAY;VALUE=DATE-TIME:1979-12-25T02:00:00 +X-TRUNCATED;VALUE=DATE:--12-25 +X-TIME-LOCAL;VALUE=TIME:12:30:00 +X-TIME-UTC;VALUE=TIME:12:30:00Z +X-TIME-OFFSET;VALUE=TIME:12:30:00-08:00 +X-TIME-REDUCED;VALUE=TIME:23 +X-TIME-TRUNCATED;VALUE=TIME:--30 +X-KARMA-POINTS;VALUE=INTEGER:42 +X-GRADE;VALUE=FLOAT:1.3 +TZ;VALUE=UTC-OFFSET:-05:00 +END:VCARD + +VCF; + $this->assertEquals($expected, str_replace("\r", "", $result)); + + $this->assertEquals( + $input, + $vobj->jsonSerialize() + ); + + } + + function testRoundTripJCal() { + + $input = array( + "vcalendar", + array( + array( + "version", + new \StdClass(), + "text", + "2.0" + ), + array( + "prodid", + new \StdClass(), + "text", + "-//Sabre//Sabre VObject " . VObject\Version::VERSION . "//EN", + ), + array( + "calscale", + new \StdClass(), + "text", + "GREGORIAN" + ), + ), + array( + array("vevent", + array( + array( + "uid", new \StdClass(), "text", "foo", + ), + array( + "dtstart", new \StdClass(), "date", "2013-05-26", + ), + array( + "duration", new \StdClass(), "duration", "P1D", + ), + array( + "categories", new \StdClass(), "text", "home", "testing", + ), + array( + "created", new \StdClass(), "date-time", "2013-05-26T18:10:00Z", + ), + array( + "attach", new \StdClass(), "binary", base64_encode('attachment') + ), + array( + "attendee", new \StdClass(), "cal-address", "mailto:armin@example.org", + ), + array( + "geo", new \StdClass(), "float", array(51.96668, 7.61876), + ), + array( + "sequence", new \StdClass(), "integer", 5 + ), + array( + "freebusy", new \StdClass(), "period", array("2013-05-26T21:02:13", "PT1H"), array("2013-06-26T12:00:00", "2013-06-26T13:00:00"), + ), + array( + "url", new \StdClass(), "uri", "http://example.org/", + ), + array( + "tzoffsetfrom", new \StdClass(), "utc-offset", "+05:00", + ), + array( + "rrule", new \StdClass(), "recur", array( + 'freq' => 'WEEKLY', + 'byday' => array('MO', 'TU'), + ), + ), + array( + "x-bool", new \StdClass(), "boolean", true + ), + array( + "x-time", new \StdClass(), "time", "08:00:00", + ), + array( + "attendee", + (object)array( + "cn" => "Dominik", + "partstat" => "DECLINED", + ), + "cal-address", + "mailto:dominik@example.org" + ), + array( + "request-status", + new \StdClass(), + "text", + array("2.0", "Success"), + ), + array( + "request-status", + new \StdClass(), + "text", + array("3.7", "Invalid Calendar User", "ATTENDEE:mailto:jsmith@example.org"), + ), + ), + array( + array("valarm", + array( + array( + "action", new \StdClass(), "text", "DISPLAY", + ), + ), + array(), + ), + ), + ) + ), + ); + + $parser = new Json(json_encode($input)); + $vobj = $parser->parse(); + $result = $vobj->serialize(); + + $version = VObject\Version::VERSION; + + $expected = <<<VCF +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Sabre//Sabre VObject $version//EN +CALSCALE:GREGORIAN +BEGIN:VEVENT +UID:foo +DTSTART;VALUE=DATE:20130526 +DURATION:P1D +CATEGORIES:home,testing +CREATED:20130526T181000Z +ATTACH;VALUE=BINARY:YXR0YWNobWVudA== +ATTENDEE:mailto:armin@example.org +GEO:51.96668;7.61876 +SEQUENCE:5 +FREEBUSY:20130526T210213/PT1H,20130626T120000/20130626T130000 +URL:http://example.org/ +TZOFFSETFROM:+05:00 +RRULE:FREQ=WEEKLY;BYDAY=MO,TU +X-BOOL;VALUE=BOOLEAN:TRUE +X-TIME;VALUE=TIME:08:00:00 +ATTENDEE;CN=Dominik;PARTSTAT=DECLINED:mailto:dominik@example.org +REQUEST-STATUS:2.0;Success +REQUEST-STATUS:3.7;Invalid Calendar User;ATTENDEE:mailto:jsmith@example.org +BEGIN:VALARM +ACTION:DISPLAY +END:VALARM +END:VEVENT +END:VCALENDAR + +VCF; + $this->assertEquals($expected, str_replace("\r", "", $result)); + + $this->assertEquals( + $input, + $vobj->jsonSerialize() + ); + + } + + function testParseStreamArg() { + + $input = array( + "vcard", + array( + array( + "FN", new \StdClass(), 'text', "foo", + ), + ), + ); + + $stream = fopen('php://memory','r+'); + fwrite($stream, json_encode($input)); + rewind($stream); + + $result = VObject\Reader::readJson($stream,0); + $this->assertEquals('foo', $result->FN->getValue()); + + } + + /** + * @expectedException \Sabre\VObject\ParseException + */ + function testParseInvalidData() { + + $json = new Json(); + $input = array( + "vlist", + array( + array( + "FN", new \StdClass(), 'text', "foo", + ), + ), + ); + + $json->parse(json_encode($input), 0); + + } +}