diff vendor/sabre/vobject/tests/VObject/CliTest.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/CliTest.php	Sat Jan 13 09:06:10 2018 -0500
@@ -0,0 +1,650 @@
+<?php
+
+namespace Sabre\VObject;
+
+/**
+ * Tests the cli.
+ *
+ * Warning: these tests are very rudimentary.
+ */
+class CliTest extends \PHPUnit_Framework_TestCase {
+
+    public function setUp() {
+
+        $this->cli = new CliMock();
+        $this->cli->stderr = fopen('php://memory','r+');
+        $this->cli->stdout = fopen('php://memory','r+');
+
+    }
+
+    public function testInvalidArg() {
+
+        $this->assertEquals(
+            1,
+            $this->cli->main(array('vobject', '--hi'))
+        );
+        rewind($this->cli->stderr);
+        $this->assertTrue(strlen(stream_get_contents($this->cli->stderr)) > 100);
+
+    }
+
+    public function testQuiet() {
+
+        $this->assertEquals(
+            1,
+            $this->cli->main(array('vobject', '-q'))
+        );
+        $this->assertTrue($this->cli->quiet);
+
+        rewind($this->cli->stderr);
+        $this->assertEquals(0, strlen(stream_get_contents($this->cli->stderr)));
+
+    }
+
+    public function testHelp() {
+
+        $this->assertEquals(
+            0,
+            $this->cli->main(array('vobject', '-h'))
+        );
+        rewind($this->cli->stderr);
+        $this->assertTrue(strlen(stream_get_contents($this->cli->stderr)) > 100);
+
+    }
+
+    public function testFormat() {
+
+        $this->assertEquals(
+            1,
+            $this->cli->main(array('vobject', '--format=jcard'))
+        );
+
+        rewind($this->cli->stderr);
+        $this->assertTrue(strlen(stream_get_contents($this->cli->stderr)) > 100);
+
+        $this->assertEquals('jcard', $this->cli->format);
+
+    }
+
+    public function testFormatInvalid() {
+
+        $this->assertEquals(
+            1,
+            $this->cli->main(array('vobject', '--format=foo'))
+        );
+
+        rewind($this->cli->stderr);
+        $this->assertTrue(strlen(stream_get_contents($this->cli->stderr)) > 100);
+
+        $this->assertNull($this->cli->format);
+
+    }
+
+    public function testInputFormatInvalid() {
+
+        $this->assertEquals(
+            1,
+            $this->cli->main(array('vobject', '--inputformat=foo'))
+        );
+
+        rewind($this->cli->stderr);
+        $this->assertTrue(strlen(stream_get_contents($this->cli->stderr)) > 100);
+
+        $this->assertNull($this->cli->format);
+
+    }
+
+
+    public function testNoInputFile() {
+
+        $this->assertEquals(
+            1,
+            $this->cli->main(array('vobject', 'color'))
+        );
+
+        rewind($this->cli->stderr);
+        $this->assertTrue(strlen(stream_get_contents($this->cli->stderr)) > 100);
+
+    }
+
+    public function testTooManyArgs() {
+
+        $this->assertEquals(
+            1,
+            $this->cli->main(array('vobject', 'color', 'a', 'b', 'c'))
+        );
+
+    }
+
+    public function testUnknownCommand() {
+
+        $this->assertEquals(
+            1,
+            $this->cli->main(array('vobject', 'foo', '-'))
+        );
+
+    }
+
+    public function testConvertJson() {
+
+        $inputStream = fopen('php://memory','r+');
+
+        fwrite($inputStream, <<<ICS
+BEGIN:VCARD
+VERSION:3.0
+FN:Cowboy Henk
+END:VCARD
+ICS
+    );
+        rewind($inputStream);
+        $this->cli->stdin = $inputStream;
+
+        $this->assertEquals(
+            0,
+            $this->cli->main(array('vobject', 'convert','--format=json', '-'))
+        );
+
+        rewind($this->cli->stdout);
+        $version = Version::VERSION;
+        $this->assertEquals(
+            '["vcard",[["version",{},"text","4.0"],["prodid",{},"text","-\/\/Sabre\/\/Sabre VObject '. $version .'\/\/EN"],["fn",{},"text","Cowboy Henk"]]]',
+            stream_get_contents($this->cli->stdout)
+        );
+
+    }
+
+    public function testConvertJCardPretty() {
+
+        if (version_compare(PHP_VERSION, '5.4.0') < 0) {
+            $this->markTestSkipped('This test required PHP 5.4.0');
+        }
+
+        $inputStream = fopen('php://memory','r+');
+
+        fwrite($inputStream, <<<ICS
+BEGIN:VCARD
+VERSION:3.0
+FN:Cowboy Henk
+END:VCARD
+ICS
+    );
+        rewind($inputStream);
+        $this->cli->stdin = $inputStream;
+
+        $this->assertEquals(
+            0,
+            $this->cli->main(array('vobject', 'convert','--format=jcard', '--pretty', '-'))
+        );
+
+        rewind($this->cli->stdout);
+        $version = Version::VERSION;
+
+        // PHP 5.5.12 changed the output
+
+        $expected = <<<JCARD
+[
+    "vcard",
+    [
+        [
+            "versi
+JCARD;
+
+          $this->assertStringStartsWith(
+            $expected,
+            stream_get_contents($this->cli->stdout)
+        );
+
+    }
+
+    public function testConvertJCalFail() {
+
+        $inputStream = fopen('php://memory','r+');
+
+        fwrite($inputStream, <<<ICS
+BEGIN:VCARD
+VERSION:3.0
+FN:Cowboy Henk
+END:VCARD
+ICS
+    );
+        rewind($inputStream);
+        $this->cli->stdin = $inputStream;
+
+        $this->assertEquals(
+            2,
+            $this->cli->main(array('vobject', 'convert','--format=jcal', '--inputformat=mimedir', '-'))
+        );
+
+    }
+
+    public function testConvertMimeDir() {
+
+        $inputStream = fopen('php://memory','r+');
+
+        fwrite($inputStream, <<<JCARD
+[
+    "vcard",
+    [
+        [
+            "version",
+            {
+
+            },
+            "text",
+            "4.0"
+        ],
+        [
+            "prodid",
+            {
+
+            },
+            "text",
+            "-\/\/Sabre\/\/Sabre VObject 3.1.0\/\/EN"
+        ],
+        [
+            "fn",
+            {
+
+            },
+            "text",
+            "Cowboy Henk"
+        ]
+    ]
+]
+JCARD
+    );
+        rewind($inputStream);
+        $this->cli->stdin = $inputStream;
+
+        $this->assertEquals(
+            0,
+            $this->cli->main(array('vobject', 'convert','--format=mimedir', '--inputformat=json', '--pretty', '-'))
+        );
+
+        rewind($this->cli->stdout);
+        $expected = <<<VCF
+BEGIN:VCARD
+VERSION:4.0
+PRODID:-//Sabre//Sabre VObject 3.1.0//EN
+FN:Cowboy Henk
+END:VCARD
+
+VCF;
+
+          $this->assertEquals(
+            strtr($expected, array("\n"=>"\r\n")),
+            stream_get_contents($this->cli->stdout)
+        );
+
+    }
+
+    public function testConvertDefaultFormats() {
+
+        $inputStream = fopen('php://memory','r+');
+        $outputFile = SABRE_TEMPDIR . 'bar.json';
+
+        $this->assertEquals(
+            2,
+            $this->cli->main(array('vobject', 'convert','foo.json',$outputFile))
+        );
+
+        $this->assertEquals('json', $this->cli->inputFormat);
+        $this->assertEquals('json', $this->cli->format);
+
+    }
+
+    public function testConvertDefaultFormats2() {
+
+        $outputFile = SABRE_TEMPDIR . 'bar.ics';
+
+        $this->assertEquals(
+            2,
+            $this->cli->main(array('vobject', 'convert','foo.ics',$outputFile))
+        );
+
+        $this->assertEquals('mimedir', $this->cli->inputFormat);
+        $this->assertEquals('mimedir', $this->cli->format);
+
+    }
+
+    public function testVCard3040() {
+
+        $inputStream = fopen('php://memory','r+');
+
+        fwrite($inputStream, <<<VCARD
+BEGIN:VCARD
+VERSION:3.0
+PRODID:-//Sabre//Sabre VObject 3.1.0//EN
+FN:Cowboy Henk
+END:VCARD
+
+VCARD
+    );
+        rewind($inputStream);
+        $this->cli->stdin = $inputStream;
+
+        $this->assertEquals(
+            0,
+            $this->cli->main(array('vobject', 'convert','--format=vcard40', '--pretty', '-'))
+        );
+
+        rewind($this->cli->stdout);
+
+        $version = Version::VERSION;
+        $expected = <<<VCF
+BEGIN:VCARD
+VERSION:4.0
+PRODID:-//Sabre//Sabre VObject $version//EN
+FN:Cowboy Henk
+END:VCARD
+
+VCF;
+
+          $this->assertEquals(
+            strtr($expected, array("\n"=>"\r\n")),
+            stream_get_contents($this->cli->stdout)
+        );
+
+    }
+
+    public function testVCard4030() {
+
+        $inputStream = fopen('php://memory','r+');
+
+        fwrite($inputStream, <<<VCARD
+BEGIN:VCARD
+VERSION:4.0
+PRODID:-//Sabre//Sabre VObject 3.1.0//EN
+FN:Cowboy Henk
+END:VCARD
+
+VCARD
+    );
+        rewind($inputStream);
+        $this->cli->stdin = $inputStream;
+
+        $this->assertEquals(
+            0,
+            $this->cli->main(array('vobject', 'convert','--format=vcard30', '--pretty', '-'))
+        );
+
+        $version = Version::VERSION;
+
+        rewind($this->cli->stdout);
+        $expected = <<<VCF
+BEGIN:VCARD
+VERSION:3.0
+PRODID:-//Sabre//Sabre VObject $version//EN
+FN:Cowboy Henk
+END:VCARD
+
+VCF;
+
+          $this->assertEquals(
+            strtr($expected, array("\n"=>"\r\n")),
+            stream_get_contents($this->cli->stdout)
+        );
+
+    }
+
+    public function testVCard4021() {
+
+        $inputStream = fopen('php://memory','r+');
+
+        fwrite($inputStream, <<<VCARD
+BEGIN:VCARD
+VERSION:4.0
+PRODID:-//Sabre//Sabre VObject 3.1.0//EN
+FN:Cowboy Henk
+END:VCARD
+
+VCARD
+    );
+        rewind($inputStream);
+        $this->cli->stdin = $inputStream;
+
+        // vCard 2.1 is not supported yet, so this returns a failure.
+        $this->assertEquals(
+            2,
+            $this->cli->main(array('vobject', 'convert','--format=vcard21', '--pretty', '-'))
+        );
+
+    }
+
+    function testValidate() {
+
+        $inputStream = fopen('php://memory','r+');
+
+        fwrite($inputStream, <<<VCARD
+BEGIN:VCARD
+VERSION:4.0
+PRODID:-//Sabre//Sabre VObject 3.1.0//EN
+UID:foo
+FN:Cowboy Henk
+END:VCARD
+
+VCARD
+    );
+        rewind($inputStream);
+        $this->cli->stdin = $inputStream;
+        $result = $this->cli->main(array('vobject', 'validate', '-'));
+
+        $this->assertEquals(
+            0,
+            $result
+        );
+
+    }
+
+    function testValidateFail() {
+
+        $inputStream = fopen('php://memory','r+');
+
+        fwrite($inputStream, <<<VCARD
+BEGIN:VCALENDAR
+VERSION:2.0
+END:VCARD
+
+VCARD
+    );
+        rewind($inputStream);
+        $this->cli->stdin = $inputStream;
+        // vCard 2.1 is not supported yet, so this returns a failure.
+        $this->assertEquals(
+            2,
+            $this->cli->main(array('vobject', 'validate', '-'))
+        );
+
+    }
+
+    function testValidateFail2() {
+
+        $inputStream = fopen('php://memory','r+');
+
+        fwrite($inputStream, <<<VCARD
+BEGIN:VCALENDAR
+VERSION:5.0
+END:VCALENDAR
+
+VCARD
+    );
+        rewind($inputStream);
+        $this->cli->stdin = $inputStream;
+        // vCard 2.1 is not supported yet, so this returns a failure.
+        $this->assertEquals(
+            2,
+            $this->cli->main(array('vobject', 'validate', '-'))
+        );
+
+    }
+
+    function testRepair() {
+
+        $inputStream = fopen('php://memory','r+');
+
+        fwrite($inputStream, <<<VCARD
+BEGIN:VCARD
+VERSION:5.0
+END:VCARD
+
+VCARD
+    );
+        rewind($inputStream);
+        $this->cli->stdin = $inputStream;
+        // vCard 2.1 is not supported yet, so this returns a failure.
+        $this->assertEquals(
+            2,
+            $this->cli->main(array('vobject', 'repair', '-'))
+        );
+
+        rewind($this->cli->stdout);
+        $this->assertRegExp("/^BEGIN:VCARD\r\nVERSION:2.1\r\nUID:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\r\nEND:VCARD\r\n$/", stream_get_contents($this->cli->stdout));
+    }
+
+    function testRepairNothing() {
+
+        $inputStream = fopen('php://memory','r+');
+
+        fwrite($inputStream, <<<VCARD
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Sabre//Sabre VObject 3.1.0//EN
+BEGIN:VEVENT
+UID:foo
+DTSTAMP:20140122T233226Z
+DTSTART:20140101T120000Z
+END:VEVENT
+END:VCALENDAR
+
+VCARD
+    );
+        rewind($inputStream);
+        $this->cli->stdin = $inputStream;
+        // vCard 2.1 is not supported yet, so this returns a failure.
+
+        $result = $this->cli->main(array('vobject', 'repair', '-'));
+
+        rewind($this->cli->stderr);
+        $error = stream_get_contents($this->cli->stderr);
+
+        $this->assertEquals(
+            0,
+            $result,
+            "This should have been error free. stderr output:\n" . $error
+        );
+
+    }
+
+    /**
+     * Note: this is a very shallow test, doesn't dig into the actual output,
+     * but just makes sure there's no errors thrown.
+     *
+     * The colorizer is not a critical component, it's mostly a debugging tool.
+     */
+    function testColorCalendar() {
+
+        $inputStream = fopen('php://memory','r+');
+
+        $version = Version::VERSION;
+
+        /**
+         * This object is not valid, but it's designed to hit every part of the
+         * colorizer source.
+         */
+        fwrite($inputStream, <<<VCARD
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Sabre//Sabre VObject {$version}//EN
+BEGIN:VTIMEZONE
+END:VTIMEZONE
+BEGIN:VEVENT
+ATTENDEE;RSVP=TRUE:mailto:foo@example.org
+REQUEST-STATUS:5;foo
+ATTACH:blabla
+END:VEVENT
+END:VCALENDAR
+
+VCARD
+    );
+        rewind($inputStream);
+        $this->cli->stdin = $inputStream;
+        // vCard 2.1 is not supported yet, so this returns a failure.
+
+        $result = $this->cli->main(array('vobject', 'color', '-'));
+
+        rewind($this->cli->stderr);
+        $error = stream_get_contents($this->cli->stderr);
+
+        $this->assertEquals(
+            0,
+            $result,
+            "This should have been error free. stderr output:\n" . $error
+        );
+
+    }
+
+    /**
+     * Note: this is a very shallow test, doesn't dig into the actual output,
+     * but just makes sure there's no errors thrown.
+     *
+     * The colorizer is not a critical component, it's mostly a debugging tool.
+     */
+    function testColorVCard() {
+
+        $inputStream = fopen('php://memory','r+');
+
+        $version = Version::VERSION;
+
+        /**
+         * This object is not valid, but it's designed to hit every part of the
+         * colorizer source.
+         */
+        fwrite($inputStream, <<<VCARD
+BEGIN:VCARD
+VERSION:4.0
+PRODID:-//Sabre//Sabre VObject {$version}//EN
+ADR:1;2;3;4a,4b;5;6
+group.TEL:123454768
+END:VCARD
+
+VCARD
+    );
+        rewind($inputStream);
+        $this->cli->stdin = $inputStream;
+        // vCard 2.1 is not supported yet, so this returns a failure.
+
+        $result = $this->cli->main(array('vobject', 'color', '-'));
+
+        rewind($this->cli->stderr);
+        $error = stream_get_contents($this->cli->stderr);
+
+        $this->assertEquals(
+            0,
+            $result,
+            "This should have been error free. stderr output:\n" . $error
+        );
+
+    }
+}
+
+class CliMock extends Cli {
+
+    public $log = array();
+
+    public $quiet = false;
+
+    public $format;
+
+    public $pretty;
+
+    public $stdin;
+
+    public $stdout;
+
+    public $stderr;
+
+    public $inputFormat;
+
+    public $outputFormat;
+
+}