1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\VObject; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehler/** 6*a1a3b679SAndreas Boehler * Tests the cli. 7*a1a3b679SAndreas Boehler * 8*a1a3b679SAndreas Boehler * Warning: these tests are very rudimentary. 9*a1a3b679SAndreas Boehler */ 10*a1a3b679SAndreas Boehlerclass CliTest extends \PHPUnit_Framework_TestCase { 11*a1a3b679SAndreas Boehler 12*a1a3b679SAndreas Boehler public function setUp() { 13*a1a3b679SAndreas Boehler 14*a1a3b679SAndreas Boehler $this->cli = new CliMock(); 15*a1a3b679SAndreas Boehler $this->cli->stderr = fopen('php://memory','r+'); 16*a1a3b679SAndreas Boehler $this->cli->stdout = fopen('php://memory','r+'); 17*a1a3b679SAndreas Boehler 18*a1a3b679SAndreas Boehler } 19*a1a3b679SAndreas Boehler 20*a1a3b679SAndreas Boehler public function testInvalidArg() { 21*a1a3b679SAndreas Boehler 22*a1a3b679SAndreas Boehler $this->assertEquals( 23*a1a3b679SAndreas Boehler 1, 24*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', '--hi')) 25*a1a3b679SAndreas Boehler ); 26*a1a3b679SAndreas Boehler rewind($this->cli->stderr); 27*a1a3b679SAndreas Boehler $this->assertTrue(strlen(stream_get_contents($this->cli->stderr)) > 100); 28*a1a3b679SAndreas Boehler 29*a1a3b679SAndreas Boehler } 30*a1a3b679SAndreas Boehler 31*a1a3b679SAndreas Boehler public function testQuiet() { 32*a1a3b679SAndreas Boehler 33*a1a3b679SAndreas Boehler $this->assertEquals( 34*a1a3b679SAndreas Boehler 1, 35*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', '-q')) 36*a1a3b679SAndreas Boehler ); 37*a1a3b679SAndreas Boehler $this->assertTrue($this->cli->quiet); 38*a1a3b679SAndreas Boehler 39*a1a3b679SAndreas Boehler rewind($this->cli->stderr); 40*a1a3b679SAndreas Boehler $this->assertEquals(0, strlen(stream_get_contents($this->cli->stderr))); 41*a1a3b679SAndreas Boehler 42*a1a3b679SAndreas Boehler } 43*a1a3b679SAndreas Boehler 44*a1a3b679SAndreas Boehler public function testHelp() { 45*a1a3b679SAndreas Boehler 46*a1a3b679SAndreas Boehler $this->assertEquals( 47*a1a3b679SAndreas Boehler 0, 48*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', '-h')) 49*a1a3b679SAndreas Boehler ); 50*a1a3b679SAndreas Boehler rewind($this->cli->stderr); 51*a1a3b679SAndreas Boehler $this->assertTrue(strlen(stream_get_contents($this->cli->stderr)) > 100); 52*a1a3b679SAndreas Boehler 53*a1a3b679SAndreas Boehler } 54*a1a3b679SAndreas Boehler 55*a1a3b679SAndreas Boehler public function testFormat() { 56*a1a3b679SAndreas Boehler 57*a1a3b679SAndreas Boehler $this->assertEquals( 58*a1a3b679SAndreas Boehler 1, 59*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', '--format=jcard')) 60*a1a3b679SAndreas Boehler ); 61*a1a3b679SAndreas Boehler 62*a1a3b679SAndreas Boehler rewind($this->cli->stderr); 63*a1a3b679SAndreas Boehler $this->assertTrue(strlen(stream_get_contents($this->cli->stderr)) > 100); 64*a1a3b679SAndreas Boehler 65*a1a3b679SAndreas Boehler $this->assertEquals('jcard', $this->cli->format); 66*a1a3b679SAndreas Boehler 67*a1a3b679SAndreas Boehler } 68*a1a3b679SAndreas Boehler 69*a1a3b679SAndreas Boehler public function testFormatInvalid() { 70*a1a3b679SAndreas Boehler 71*a1a3b679SAndreas Boehler $this->assertEquals( 72*a1a3b679SAndreas Boehler 1, 73*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', '--format=foo')) 74*a1a3b679SAndreas Boehler ); 75*a1a3b679SAndreas Boehler 76*a1a3b679SAndreas Boehler rewind($this->cli->stderr); 77*a1a3b679SAndreas Boehler $this->assertTrue(strlen(stream_get_contents($this->cli->stderr)) > 100); 78*a1a3b679SAndreas Boehler 79*a1a3b679SAndreas Boehler $this->assertNull($this->cli->format); 80*a1a3b679SAndreas Boehler 81*a1a3b679SAndreas Boehler } 82*a1a3b679SAndreas Boehler 83*a1a3b679SAndreas Boehler public function testInputFormatInvalid() { 84*a1a3b679SAndreas Boehler 85*a1a3b679SAndreas Boehler $this->assertEquals( 86*a1a3b679SAndreas Boehler 1, 87*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', '--inputformat=foo')) 88*a1a3b679SAndreas Boehler ); 89*a1a3b679SAndreas Boehler 90*a1a3b679SAndreas Boehler rewind($this->cli->stderr); 91*a1a3b679SAndreas Boehler $this->assertTrue(strlen(stream_get_contents($this->cli->stderr)) > 100); 92*a1a3b679SAndreas Boehler 93*a1a3b679SAndreas Boehler $this->assertNull($this->cli->format); 94*a1a3b679SAndreas Boehler 95*a1a3b679SAndreas Boehler } 96*a1a3b679SAndreas Boehler 97*a1a3b679SAndreas Boehler 98*a1a3b679SAndreas Boehler public function testNoInputFile() { 99*a1a3b679SAndreas Boehler 100*a1a3b679SAndreas Boehler $this->assertEquals( 101*a1a3b679SAndreas Boehler 1, 102*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', 'color')) 103*a1a3b679SAndreas Boehler ); 104*a1a3b679SAndreas Boehler 105*a1a3b679SAndreas Boehler rewind($this->cli->stderr); 106*a1a3b679SAndreas Boehler $this->assertTrue(strlen(stream_get_contents($this->cli->stderr)) > 100); 107*a1a3b679SAndreas Boehler 108*a1a3b679SAndreas Boehler } 109*a1a3b679SAndreas Boehler 110*a1a3b679SAndreas Boehler public function testTooManyArgs() { 111*a1a3b679SAndreas Boehler 112*a1a3b679SAndreas Boehler $this->assertEquals( 113*a1a3b679SAndreas Boehler 1, 114*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', 'color', 'a', 'b', 'c')) 115*a1a3b679SAndreas Boehler ); 116*a1a3b679SAndreas Boehler 117*a1a3b679SAndreas Boehler } 118*a1a3b679SAndreas Boehler 119*a1a3b679SAndreas Boehler public function testUnknownCommand() { 120*a1a3b679SAndreas Boehler 121*a1a3b679SAndreas Boehler $this->assertEquals( 122*a1a3b679SAndreas Boehler 1, 123*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', 'foo', '-')) 124*a1a3b679SAndreas Boehler ); 125*a1a3b679SAndreas Boehler 126*a1a3b679SAndreas Boehler } 127*a1a3b679SAndreas Boehler 128*a1a3b679SAndreas Boehler public function testConvertJson() { 129*a1a3b679SAndreas Boehler 130*a1a3b679SAndreas Boehler $inputStream = fopen('php://memory','r+'); 131*a1a3b679SAndreas Boehler 132*a1a3b679SAndreas Boehler fwrite($inputStream, <<<ICS 133*a1a3b679SAndreas BoehlerBEGIN:VCARD 134*a1a3b679SAndreas BoehlerVERSION:3.0 135*a1a3b679SAndreas BoehlerFN:Cowboy Henk 136*a1a3b679SAndreas BoehlerEND:VCARD 137*a1a3b679SAndreas BoehlerICS 138*a1a3b679SAndreas Boehler ); 139*a1a3b679SAndreas Boehler rewind($inputStream); 140*a1a3b679SAndreas Boehler $this->cli->stdin = $inputStream; 141*a1a3b679SAndreas Boehler 142*a1a3b679SAndreas Boehler $this->assertEquals( 143*a1a3b679SAndreas Boehler 0, 144*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', 'convert','--format=json', '-')) 145*a1a3b679SAndreas Boehler ); 146*a1a3b679SAndreas Boehler 147*a1a3b679SAndreas Boehler rewind($this->cli->stdout); 148*a1a3b679SAndreas Boehler $version = Version::VERSION; 149*a1a3b679SAndreas Boehler $this->assertEquals( 150*a1a3b679SAndreas Boehler '["vcard",[["version",{},"text","4.0"],["prodid",{},"text","-\/\/Sabre\/\/Sabre VObject '. $version .'\/\/EN"],["fn",{},"text","Cowboy Henk"]]]', 151*a1a3b679SAndreas Boehler stream_get_contents($this->cli->stdout) 152*a1a3b679SAndreas Boehler ); 153*a1a3b679SAndreas Boehler 154*a1a3b679SAndreas Boehler } 155*a1a3b679SAndreas Boehler 156*a1a3b679SAndreas Boehler public function testConvertJCardPretty() { 157*a1a3b679SAndreas Boehler 158*a1a3b679SAndreas Boehler if (version_compare(PHP_VERSION, '5.4.0') < 0) { 159*a1a3b679SAndreas Boehler $this->markTestSkipped('This test required PHP 5.4.0'); 160*a1a3b679SAndreas Boehler } 161*a1a3b679SAndreas Boehler 162*a1a3b679SAndreas Boehler $inputStream = fopen('php://memory','r+'); 163*a1a3b679SAndreas Boehler 164*a1a3b679SAndreas Boehler fwrite($inputStream, <<<ICS 165*a1a3b679SAndreas BoehlerBEGIN:VCARD 166*a1a3b679SAndreas BoehlerVERSION:3.0 167*a1a3b679SAndreas BoehlerFN:Cowboy Henk 168*a1a3b679SAndreas BoehlerEND:VCARD 169*a1a3b679SAndreas BoehlerICS 170*a1a3b679SAndreas Boehler ); 171*a1a3b679SAndreas Boehler rewind($inputStream); 172*a1a3b679SAndreas Boehler $this->cli->stdin = $inputStream; 173*a1a3b679SAndreas Boehler 174*a1a3b679SAndreas Boehler $this->assertEquals( 175*a1a3b679SAndreas Boehler 0, 176*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', 'convert','--format=jcard', '--pretty', '-')) 177*a1a3b679SAndreas Boehler ); 178*a1a3b679SAndreas Boehler 179*a1a3b679SAndreas Boehler rewind($this->cli->stdout); 180*a1a3b679SAndreas Boehler $version = Version::VERSION; 181*a1a3b679SAndreas Boehler 182*a1a3b679SAndreas Boehler // PHP 5.5.12 changed the output 183*a1a3b679SAndreas Boehler 184*a1a3b679SAndreas Boehler $expected = <<<JCARD 185*a1a3b679SAndreas Boehler[ 186*a1a3b679SAndreas Boehler "vcard", 187*a1a3b679SAndreas Boehler [ 188*a1a3b679SAndreas Boehler [ 189*a1a3b679SAndreas Boehler "versi 190*a1a3b679SAndreas BoehlerJCARD; 191*a1a3b679SAndreas Boehler 192*a1a3b679SAndreas Boehler $this->assertStringStartsWith( 193*a1a3b679SAndreas Boehler $expected, 194*a1a3b679SAndreas Boehler stream_get_contents($this->cli->stdout) 195*a1a3b679SAndreas Boehler ); 196*a1a3b679SAndreas Boehler 197*a1a3b679SAndreas Boehler } 198*a1a3b679SAndreas Boehler 199*a1a3b679SAndreas Boehler public function testConvertJCalFail() { 200*a1a3b679SAndreas Boehler 201*a1a3b679SAndreas Boehler $inputStream = fopen('php://memory','r+'); 202*a1a3b679SAndreas Boehler 203*a1a3b679SAndreas Boehler fwrite($inputStream, <<<ICS 204*a1a3b679SAndreas BoehlerBEGIN:VCARD 205*a1a3b679SAndreas BoehlerVERSION:3.0 206*a1a3b679SAndreas BoehlerFN:Cowboy Henk 207*a1a3b679SAndreas BoehlerEND:VCARD 208*a1a3b679SAndreas BoehlerICS 209*a1a3b679SAndreas Boehler ); 210*a1a3b679SAndreas Boehler rewind($inputStream); 211*a1a3b679SAndreas Boehler $this->cli->stdin = $inputStream; 212*a1a3b679SAndreas Boehler 213*a1a3b679SAndreas Boehler $this->assertEquals( 214*a1a3b679SAndreas Boehler 2, 215*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', 'convert','--format=jcal', '--inputformat=mimedir', '-')) 216*a1a3b679SAndreas Boehler ); 217*a1a3b679SAndreas Boehler 218*a1a3b679SAndreas Boehler } 219*a1a3b679SAndreas Boehler 220*a1a3b679SAndreas Boehler public function testConvertMimeDir() { 221*a1a3b679SAndreas Boehler 222*a1a3b679SAndreas Boehler $inputStream = fopen('php://memory','r+'); 223*a1a3b679SAndreas Boehler 224*a1a3b679SAndreas Boehler fwrite($inputStream, <<<JCARD 225*a1a3b679SAndreas Boehler[ 226*a1a3b679SAndreas Boehler "vcard", 227*a1a3b679SAndreas Boehler [ 228*a1a3b679SAndreas Boehler [ 229*a1a3b679SAndreas Boehler "version", 230*a1a3b679SAndreas Boehler { 231*a1a3b679SAndreas Boehler 232*a1a3b679SAndreas Boehler }, 233*a1a3b679SAndreas Boehler "text", 234*a1a3b679SAndreas Boehler "4.0" 235*a1a3b679SAndreas Boehler ], 236*a1a3b679SAndreas Boehler [ 237*a1a3b679SAndreas Boehler "prodid", 238*a1a3b679SAndreas Boehler { 239*a1a3b679SAndreas Boehler 240*a1a3b679SAndreas Boehler }, 241*a1a3b679SAndreas Boehler "text", 242*a1a3b679SAndreas Boehler "-\/\/Sabre\/\/Sabre VObject 3.1.0\/\/EN" 243*a1a3b679SAndreas Boehler ], 244*a1a3b679SAndreas Boehler [ 245*a1a3b679SAndreas Boehler "fn", 246*a1a3b679SAndreas Boehler { 247*a1a3b679SAndreas Boehler 248*a1a3b679SAndreas Boehler }, 249*a1a3b679SAndreas Boehler "text", 250*a1a3b679SAndreas Boehler "Cowboy Henk" 251*a1a3b679SAndreas Boehler ] 252*a1a3b679SAndreas Boehler ] 253*a1a3b679SAndreas Boehler] 254*a1a3b679SAndreas BoehlerJCARD 255*a1a3b679SAndreas Boehler ); 256*a1a3b679SAndreas Boehler rewind($inputStream); 257*a1a3b679SAndreas Boehler $this->cli->stdin = $inputStream; 258*a1a3b679SAndreas Boehler 259*a1a3b679SAndreas Boehler $this->assertEquals( 260*a1a3b679SAndreas Boehler 0, 261*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', 'convert','--format=mimedir', '--inputformat=json', '--pretty', '-')) 262*a1a3b679SAndreas Boehler ); 263*a1a3b679SAndreas Boehler 264*a1a3b679SAndreas Boehler rewind($this->cli->stdout); 265*a1a3b679SAndreas Boehler $expected = <<<VCF 266*a1a3b679SAndreas BoehlerBEGIN:VCARD 267*a1a3b679SAndreas BoehlerVERSION:4.0 268*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject 3.1.0//EN 269*a1a3b679SAndreas BoehlerFN:Cowboy Henk 270*a1a3b679SAndreas BoehlerEND:VCARD 271*a1a3b679SAndreas Boehler 272*a1a3b679SAndreas BoehlerVCF; 273*a1a3b679SAndreas Boehler 274*a1a3b679SAndreas Boehler $this->assertEquals( 275*a1a3b679SAndreas Boehler strtr($expected, array("\n"=>"\r\n")), 276*a1a3b679SAndreas Boehler stream_get_contents($this->cli->stdout) 277*a1a3b679SAndreas Boehler ); 278*a1a3b679SAndreas Boehler 279*a1a3b679SAndreas Boehler } 280*a1a3b679SAndreas Boehler 281*a1a3b679SAndreas Boehler public function testConvertDefaultFormats() { 282*a1a3b679SAndreas Boehler 283*a1a3b679SAndreas Boehler $inputStream = fopen('php://memory','r+'); 284*a1a3b679SAndreas Boehler $outputFile = SABRE_TEMPDIR . 'bar.json'; 285*a1a3b679SAndreas Boehler 286*a1a3b679SAndreas Boehler $this->assertEquals( 287*a1a3b679SAndreas Boehler 2, 288*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', 'convert','foo.json',$outputFile)) 289*a1a3b679SAndreas Boehler ); 290*a1a3b679SAndreas Boehler 291*a1a3b679SAndreas Boehler $this->assertEquals('json', $this->cli->inputFormat); 292*a1a3b679SAndreas Boehler $this->assertEquals('json', $this->cli->format); 293*a1a3b679SAndreas Boehler 294*a1a3b679SAndreas Boehler } 295*a1a3b679SAndreas Boehler 296*a1a3b679SAndreas Boehler public function testConvertDefaultFormats2() { 297*a1a3b679SAndreas Boehler 298*a1a3b679SAndreas Boehler $outputFile = SABRE_TEMPDIR . 'bar.ics'; 299*a1a3b679SAndreas Boehler 300*a1a3b679SAndreas Boehler $this->assertEquals( 301*a1a3b679SAndreas Boehler 2, 302*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', 'convert','foo.ics',$outputFile)) 303*a1a3b679SAndreas Boehler ); 304*a1a3b679SAndreas Boehler 305*a1a3b679SAndreas Boehler $this->assertEquals('mimedir', $this->cli->inputFormat); 306*a1a3b679SAndreas Boehler $this->assertEquals('mimedir', $this->cli->format); 307*a1a3b679SAndreas Boehler 308*a1a3b679SAndreas Boehler } 309*a1a3b679SAndreas Boehler 310*a1a3b679SAndreas Boehler public function testVCard3040() { 311*a1a3b679SAndreas Boehler 312*a1a3b679SAndreas Boehler $inputStream = fopen('php://memory','r+'); 313*a1a3b679SAndreas Boehler 314*a1a3b679SAndreas Boehler fwrite($inputStream, <<<VCARD 315*a1a3b679SAndreas BoehlerBEGIN:VCARD 316*a1a3b679SAndreas BoehlerVERSION:3.0 317*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject 3.1.0//EN 318*a1a3b679SAndreas BoehlerFN:Cowboy Henk 319*a1a3b679SAndreas BoehlerEND:VCARD 320*a1a3b679SAndreas Boehler 321*a1a3b679SAndreas BoehlerVCARD 322*a1a3b679SAndreas Boehler ); 323*a1a3b679SAndreas Boehler rewind($inputStream); 324*a1a3b679SAndreas Boehler $this->cli->stdin = $inputStream; 325*a1a3b679SAndreas Boehler 326*a1a3b679SAndreas Boehler $this->assertEquals( 327*a1a3b679SAndreas Boehler 0, 328*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', 'convert','--format=vcard40', '--pretty', '-')) 329*a1a3b679SAndreas Boehler ); 330*a1a3b679SAndreas Boehler 331*a1a3b679SAndreas Boehler rewind($this->cli->stdout); 332*a1a3b679SAndreas Boehler 333*a1a3b679SAndreas Boehler $version = Version::VERSION; 334*a1a3b679SAndreas Boehler $expected = <<<VCF 335*a1a3b679SAndreas BoehlerBEGIN:VCARD 336*a1a3b679SAndreas BoehlerVERSION:4.0 337*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject $version//EN 338*a1a3b679SAndreas BoehlerFN:Cowboy Henk 339*a1a3b679SAndreas BoehlerEND:VCARD 340*a1a3b679SAndreas Boehler 341*a1a3b679SAndreas BoehlerVCF; 342*a1a3b679SAndreas Boehler 343*a1a3b679SAndreas Boehler $this->assertEquals( 344*a1a3b679SAndreas Boehler strtr($expected, array("\n"=>"\r\n")), 345*a1a3b679SAndreas Boehler stream_get_contents($this->cli->stdout) 346*a1a3b679SAndreas Boehler ); 347*a1a3b679SAndreas Boehler 348*a1a3b679SAndreas Boehler } 349*a1a3b679SAndreas Boehler 350*a1a3b679SAndreas Boehler public function testVCard4030() { 351*a1a3b679SAndreas Boehler 352*a1a3b679SAndreas Boehler $inputStream = fopen('php://memory','r+'); 353*a1a3b679SAndreas Boehler 354*a1a3b679SAndreas Boehler fwrite($inputStream, <<<VCARD 355*a1a3b679SAndreas BoehlerBEGIN:VCARD 356*a1a3b679SAndreas BoehlerVERSION:4.0 357*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject 3.1.0//EN 358*a1a3b679SAndreas BoehlerFN:Cowboy Henk 359*a1a3b679SAndreas BoehlerEND:VCARD 360*a1a3b679SAndreas Boehler 361*a1a3b679SAndreas BoehlerVCARD 362*a1a3b679SAndreas Boehler ); 363*a1a3b679SAndreas Boehler rewind($inputStream); 364*a1a3b679SAndreas Boehler $this->cli->stdin = $inputStream; 365*a1a3b679SAndreas Boehler 366*a1a3b679SAndreas Boehler $this->assertEquals( 367*a1a3b679SAndreas Boehler 0, 368*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', 'convert','--format=vcard30', '--pretty', '-')) 369*a1a3b679SAndreas Boehler ); 370*a1a3b679SAndreas Boehler 371*a1a3b679SAndreas Boehler $version = Version::VERSION; 372*a1a3b679SAndreas Boehler 373*a1a3b679SAndreas Boehler rewind($this->cli->stdout); 374*a1a3b679SAndreas Boehler $expected = <<<VCF 375*a1a3b679SAndreas BoehlerBEGIN:VCARD 376*a1a3b679SAndreas BoehlerVERSION:3.0 377*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject $version//EN 378*a1a3b679SAndreas BoehlerFN:Cowboy Henk 379*a1a3b679SAndreas BoehlerEND:VCARD 380*a1a3b679SAndreas Boehler 381*a1a3b679SAndreas BoehlerVCF; 382*a1a3b679SAndreas Boehler 383*a1a3b679SAndreas Boehler $this->assertEquals( 384*a1a3b679SAndreas Boehler strtr($expected, array("\n"=>"\r\n")), 385*a1a3b679SAndreas Boehler stream_get_contents($this->cli->stdout) 386*a1a3b679SAndreas Boehler ); 387*a1a3b679SAndreas Boehler 388*a1a3b679SAndreas Boehler } 389*a1a3b679SAndreas Boehler 390*a1a3b679SAndreas Boehler public function testVCard4021() { 391*a1a3b679SAndreas Boehler 392*a1a3b679SAndreas Boehler $inputStream = fopen('php://memory','r+'); 393*a1a3b679SAndreas Boehler 394*a1a3b679SAndreas Boehler fwrite($inputStream, <<<VCARD 395*a1a3b679SAndreas BoehlerBEGIN:VCARD 396*a1a3b679SAndreas BoehlerVERSION:4.0 397*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject 3.1.0//EN 398*a1a3b679SAndreas BoehlerFN:Cowboy Henk 399*a1a3b679SAndreas BoehlerEND:VCARD 400*a1a3b679SAndreas Boehler 401*a1a3b679SAndreas BoehlerVCARD 402*a1a3b679SAndreas Boehler ); 403*a1a3b679SAndreas Boehler rewind($inputStream); 404*a1a3b679SAndreas Boehler $this->cli->stdin = $inputStream; 405*a1a3b679SAndreas Boehler 406*a1a3b679SAndreas Boehler // vCard 2.1 is not supported yet, so this returns a failure. 407*a1a3b679SAndreas Boehler $this->assertEquals( 408*a1a3b679SAndreas Boehler 2, 409*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', 'convert','--format=vcard21', '--pretty', '-')) 410*a1a3b679SAndreas Boehler ); 411*a1a3b679SAndreas Boehler 412*a1a3b679SAndreas Boehler } 413*a1a3b679SAndreas Boehler 414*a1a3b679SAndreas Boehler function testValidate() { 415*a1a3b679SAndreas Boehler 416*a1a3b679SAndreas Boehler $inputStream = fopen('php://memory','r+'); 417*a1a3b679SAndreas Boehler 418*a1a3b679SAndreas Boehler fwrite($inputStream, <<<VCARD 419*a1a3b679SAndreas BoehlerBEGIN:VCARD 420*a1a3b679SAndreas BoehlerVERSION:4.0 421*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject 3.1.0//EN 422*a1a3b679SAndreas BoehlerUID:foo 423*a1a3b679SAndreas BoehlerFN:Cowboy Henk 424*a1a3b679SAndreas BoehlerEND:VCARD 425*a1a3b679SAndreas Boehler 426*a1a3b679SAndreas BoehlerVCARD 427*a1a3b679SAndreas Boehler ); 428*a1a3b679SAndreas Boehler rewind($inputStream); 429*a1a3b679SAndreas Boehler $this->cli->stdin = $inputStream; 430*a1a3b679SAndreas Boehler $result = $this->cli->main(array('vobject', 'validate', '-')); 431*a1a3b679SAndreas Boehler 432*a1a3b679SAndreas Boehler $this->assertEquals( 433*a1a3b679SAndreas Boehler 0, 434*a1a3b679SAndreas Boehler $result 435*a1a3b679SAndreas Boehler ); 436*a1a3b679SAndreas Boehler 437*a1a3b679SAndreas Boehler } 438*a1a3b679SAndreas Boehler 439*a1a3b679SAndreas Boehler function testValidateFail() { 440*a1a3b679SAndreas Boehler 441*a1a3b679SAndreas Boehler $inputStream = fopen('php://memory','r+'); 442*a1a3b679SAndreas Boehler 443*a1a3b679SAndreas Boehler fwrite($inputStream, <<<VCARD 444*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 445*a1a3b679SAndreas BoehlerVERSION:2.0 446*a1a3b679SAndreas BoehlerEND:VCARD 447*a1a3b679SAndreas Boehler 448*a1a3b679SAndreas BoehlerVCARD 449*a1a3b679SAndreas Boehler ); 450*a1a3b679SAndreas Boehler rewind($inputStream); 451*a1a3b679SAndreas Boehler $this->cli->stdin = $inputStream; 452*a1a3b679SAndreas Boehler // vCard 2.1 is not supported yet, so this returns a failure. 453*a1a3b679SAndreas Boehler $this->assertEquals( 454*a1a3b679SAndreas Boehler 2, 455*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', 'validate', '-')) 456*a1a3b679SAndreas Boehler ); 457*a1a3b679SAndreas Boehler 458*a1a3b679SAndreas Boehler } 459*a1a3b679SAndreas Boehler 460*a1a3b679SAndreas Boehler function testValidateFail2() { 461*a1a3b679SAndreas Boehler 462*a1a3b679SAndreas Boehler $inputStream = fopen('php://memory','r+'); 463*a1a3b679SAndreas Boehler 464*a1a3b679SAndreas Boehler fwrite($inputStream, <<<VCARD 465*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 466*a1a3b679SAndreas BoehlerVERSION:5.0 467*a1a3b679SAndreas BoehlerEND:VCALENDAR 468*a1a3b679SAndreas Boehler 469*a1a3b679SAndreas BoehlerVCARD 470*a1a3b679SAndreas Boehler ); 471*a1a3b679SAndreas Boehler rewind($inputStream); 472*a1a3b679SAndreas Boehler $this->cli->stdin = $inputStream; 473*a1a3b679SAndreas Boehler // vCard 2.1 is not supported yet, so this returns a failure. 474*a1a3b679SAndreas Boehler $this->assertEquals( 475*a1a3b679SAndreas Boehler 2, 476*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', 'validate', '-')) 477*a1a3b679SAndreas Boehler ); 478*a1a3b679SAndreas Boehler 479*a1a3b679SAndreas Boehler } 480*a1a3b679SAndreas Boehler 481*a1a3b679SAndreas Boehler function testRepair() { 482*a1a3b679SAndreas Boehler 483*a1a3b679SAndreas Boehler $inputStream = fopen('php://memory','r+'); 484*a1a3b679SAndreas Boehler 485*a1a3b679SAndreas Boehler fwrite($inputStream, <<<VCARD 486*a1a3b679SAndreas BoehlerBEGIN:VCARD 487*a1a3b679SAndreas BoehlerVERSION:5.0 488*a1a3b679SAndreas BoehlerEND:VCARD 489*a1a3b679SAndreas Boehler 490*a1a3b679SAndreas BoehlerVCARD 491*a1a3b679SAndreas Boehler ); 492*a1a3b679SAndreas Boehler rewind($inputStream); 493*a1a3b679SAndreas Boehler $this->cli->stdin = $inputStream; 494*a1a3b679SAndreas Boehler // vCard 2.1 is not supported yet, so this returns a failure. 495*a1a3b679SAndreas Boehler $this->assertEquals( 496*a1a3b679SAndreas Boehler 2, 497*a1a3b679SAndreas Boehler $this->cli->main(array('vobject', 'repair', '-')) 498*a1a3b679SAndreas Boehler ); 499*a1a3b679SAndreas Boehler 500*a1a3b679SAndreas Boehler rewind($this->cli->stdout); 501*a1a3b679SAndreas Boehler $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)); 502*a1a3b679SAndreas Boehler } 503*a1a3b679SAndreas Boehler 504*a1a3b679SAndreas Boehler function testRepairNothing() { 505*a1a3b679SAndreas Boehler 506*a1a3b679SAndreas Boehler $inputStream = fopen('php://memory','r+'); 507*a1a3b679SAndreas Boehler 508*a1a3b679SAndreas Boehler fwrite($inputStream, <<<VCARD 509*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 510*a1a3b679SAndreas BoehlerVERSION:2.0 511*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject 3.1.0//EN 512*a1a3b679SAndreas BoehlerBEGIN:VEVENT 513*a1a3b679SAndreas BoehlerUID:foo 514*a1a3b679SAndreas BoehlerDTSTAMP:20140122T233226Z 515*a1a3b679SAndreas BoehlerDTSTART:20140101T120000Z 516*a1a3b679SAndreas BoehlerEND:VEVENT 517*a1a3b679SAndreas BoehlerEND:VCALENDAR 518*a1a3b679SAndreas Boehler 519*a1a3b679SAndreas BoehlerVCARD 520*a1a3b679SAndreas Boehler ); 521*a1a3b679SAndreas Boehler rewind($inputStream); 522*a1a3b679SAndreas Boehler $this->cli->stdin = $inputStream; 523*a1a3b679SAndreas Boehler // vCard 2.1 is not supported yet, so this returns a failure. 524*a1a3b679SAndreas Boehler 525*a1a3b679SAndreas Boehler $result = $this->cli->main(array('vobject', 'repair', '-')); 526*a1a3b679SAndreas Boehler 527*a1a3b679SAndreas Boehler rewind($this->cli->stderr); 528*a1a3b679SAndreas Boehler $error = stream_get_contents($this->cli->stderr); 529*a1a3b679SAndreas Boehler 530*a1a3b679SAndreas Boehler $this->assertEquals( 531*a1a3b679SAndreas Boehler 0, 532*a1a3b679SAndreas Boehler $result, 533*a1a3b679SAndreas Boehler "This should have been error free. stderr output:\n" . $error 534*a1a3b679SAndreas Boehler ); 535*a1a3b679SAndreas Boehler 536*a1a3b679SAndreas Boehler } 537*a1a3b679SAndreas Boehler 538*a1a3b679SAndreas Boehler /** 539*a1a3b679SAndreas Boehler * Note: this is a very shallow test, doesn't dig into the actual output, 540*a1a3b679SAndreas Boehler * but just makes sure there's no errors thrown. 541*a1a3b679SAndreas Boehler * 542*a1a3b679SAndreas Boehler * The colorizer is not a critical component, it's mostly a debugging tool. 543*a1a3b679SAndreas Boehler */ 544*a1a3b679SAndreas Boehler function testColorCalendar() { 545*a1a3b679SAndreas Boehler 546*a1a3b679SAndreas Boehler $inputStream = fopen('php://memory','r+'); 547*a1a3b679SAndreas Boehler 548*a1a3b679SAndreas Boehler $version = Version::VERSION; 549*a1a3b679SAndreas Boehler 550*a1a3b679SAndreas Boehler /** 551*a1a3b679SAndreas Boehler * This object is not valid, but it's designed to hit every part of the 552*a1a3b679SAndreas Boehler * colorizer source. 553*a1a3b679SAndreas Boehler */ 554*a1a3b679SAndreas Boehler fwrite($inputStream, <<<VCARD 555*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 556*a1a3b679SAndreas BoehlerVERSION:2.0 557*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject {$version}//EN 558*a1a3b679SAndreas BoehlerBEGIN:VTIMEZONE 559*a1a3b679SAndreas BoehlerEND:VTIMEZONE 560*a1a3b679SAndreas BoehlerBEGIN:VEVENT 561*a1a3b679SAndreas BoehlerATTENDEE;RSVP=TRUE:mailto:foo@example.org 562*a1a3b679SAndreas BoehlerREQUEST-STATUS:5;foo 563*a1a3b679SAndreas BoehlerATTACH:blabla 564*a1a3b679SAndreas BoehlerEND:VEVENT 565*a1a3b679SAndreas BoehlerEND:VCALENDAR 566*a1a3b679SAndreas Boehler 567*a1a3b679SAndreas BoehlerVCARD 568*a1a3b679SAndreas Boehler ); 569*a1a3b679SAndreas Boehler rewind($inputStream); 570*a1a3b679SAndreas Boehler $this->cli->stdin = $inputStream; 571*a1a3b679SAndreas Boehler // vCard 2.1 is not supported yet, so this returns a failure. 572*a1a3b679SAndreas Boehler 573*a1a3b679SAndreas Boehler $result = $this->cli->main(array('vobject', 'color', '-')); 574*a1a3b679SAndreas Boehler 575*a1a3b679SAndreas Boehler rewind($this->cli->stderr); 576*a1a3b679SAndreas Boehler $error = stream_get_contents($this->cli->stderr); 577*a1a3b679SAndreas Boehler 578*a1a3b679SAndreas Boehler $this->assertEquals( 579*a1a3b679SAndreas Boehler 0, 580*a1a3b679SAndreas Boehler $result, 581*a1a3b679SAndreas Boehler "This should have been error free. stderr output:\n" . $error 582*a1a3b679SAndreas Boehler ); 583*a1a3b679SAndreas Boehler 584*a1a3b679SAndreas Boehler } 585*a1a3b679SAndreas Boehler 586*a1a3b679SAndreas Boehler /** 587*a1a3b679SAndreas Boehler * Note: this is a very shallow test, doesn't dig into the actual output, 588*a1a3b679SAndreas Boehler * but just makes sure there's no errors thrown. 589*a1a3b679SAndreas Boehler * 590*a1a3b679SAndreas Boehler * The colorizer is not a critical component, it's mostly a debugging tool. 591*a1a3b679SAndreas Boehler */ 592*a1a3b679SAndreas Boehler function testColorVCard() { 593*a1a3b679SAndreas Boehler 594*a1a3b679SAndreas Boehler $inputStream = fopen('php://memory','r+'); 595*a1a3b679SAndreas Boehler 596*a1a3b679SAndreas Boehler $version = Version::VERSION; 597*a1a3b679SAndreas Boehler 598*a1a3b679SAndreas Boehler /** 599*a1a3b679SAndreas Boehler * This object is not valid, but it's designed to hit every part of the 600*a1a3b679SAndreas Boehler * colorizer source. 601*a1a3b679SAndreas Boehler */ 602*a1a3b679SAndreas Boehler fwrite($inputStream, <<<VCARD 603*a1a3b679SAndreas BoehlerBEGIN:VCARD 604*a1a3b679SAndreas BoehlerVERSION:4.0 605*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject {$version}//EN 606*a1a3b679SAndreas BoehlerADR:1;2;3;4a,4b;5;6 607*a1a3b679SAndreas Boehlergroup.TEL:123454768 608*a1a3b679SAndreas BoehlerEND:VCARD 609*a1a3b679SAndreas Boehler 610*a1a3b679SAndreas BoehlerVCARD 611*a1a3b679SAndreas Boehler ); 612*a1a3b679SAndreas Boehler rewind($inputStream); 613*a1a3b679SAndreas Boehler $this->cli->stdin = $inputStream; 614*a1a3b679SAndreas Boehler // vCard 2.1 is not supported yet, so this returns a failure. 615*a1a3b679SAndreas Boehler 616*a1a3b679SAndreas Boehler $result = $this->cli->main(array('vobject', 'color', '-')); 617*a1a3b679SAndreas Boehler 618*a1a3b679SAndreas Boehler rewind($this->cli->stderr); 619*a1a3b679SAndreas Boehler $error = stream_get_contents($this->cli->stderr); 620*a1a3b679SAndreas Boehler 621*a1a3b679SAndreas Boehler $this->assertEquals( 622*a1a3b679SAndreas Boehler 0, 623*a1a3b679SAndreas Boehler $result, 624*a1a3b679SAndreas Boehler "This should have been error free. stderr output:\n" . $error 625*a1a3b679SAndreas Boehler ); 626*a1a3b679SAndreas Boehler 627*a1a3b679SAndreas Boehler } 628*a1a3b679SAndreas Boehler} 629*a1a3b679SAndreas Boehler 630*a1a3b679SAndreas Boehlerclass CliMock extends Cli { 631*a1a3b679SAndreas Boehler 632*a1a3b679SAndreas Boehler public $log = array(); 633*a1a3b679SAndreas Boehler 634*a1a3b679SAndreas Boehler public $quiet = false; 635*a1a3b679SAndreas Boehler 636*a1a3b679SAndreas Boehler public $format; 637*a1a3b679SAndreas Boehler 638*a1a3b679SAndreas Boehler public $pretty; 639*a1a3b679SAndreas Boehler 640*a1a3b679SAndreas Boehler public $stdin; 641*a1a3b679SAndreas Boehler 642*a1a3b679SAndreas Boehler public $stdout; 643*a1a3b679SAndreas Boehler 644*a1a3b679SAndreas Boehler public $stderr; 645*a1a3b679SAndreas Boehler 646*a1a3b679SAndreas Boehler public $inputFormat; 647*a1a3b679SAndreas Boehler 648*a1a3b679SAndreas Boehler public $outputFormat; 649*a1a3b679SAndreas Boehler 650*a1a3b679SAndreas Boehler} 651