1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\Xml; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehlerclass ReaderTest extends \PHPUnit_Framework_TestCase { 6*a1a3b679SAndreas Boehler 7*a1a3b679SAndreas Boehler function testGetClark() { 8*a1a3b679SAndreas Boehler 9*a1a3b679SAndreas Boehler $input = <<<BLA 10*a1a3b679SAndreas Boehler<?xml version="1.0"?> 11*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns" /> 12*a1a3b679SAndreas BoehlerBLA; 13*a1a3b679SAndreas Boehler $reader = new Reader(); 14*a1a3b679SAndreas Boehler $reader->xml($input); 15*a1a3b679SAndreas Boehler 16*a1a3b679SAndreas Boehler $reader->next(); 17*a1a3b679SAndreas Boehler 18*a1a3b679SAndreas Boehler $this->assertEquals('{http://sabredav.org/ns}root', $reader->getClark()); 19*a1a3b679SAndreas Boehler 20*a1a3b679SAndreas Boehler } 21*a1a3b679SAndreas Boehler 22*a1a3b679SAndreas Boehler function testGetClarkNoNS() { 23*a1a3b679SAndreas Boehler 24*a1a3b679SAndreas Boehler $input = <<<BLA 25*a1a3b679SAndreas Boehler<?xml version="1.0"?> 26*a1a3b679SAndreas Boehler<root /> 27*a1a3b679SAndreas BoehlerBLA; 28*a1a3b679SAndreas Boehler $reader = new Reader(); 29*a1a3b679SAndreas Boehler $reader->xml($input); 30*a1a3b679SAndreas Boehler 31*a1a3b679SAndreas Boehler $reader->next(); 32*a1a3b679SAndreas Boehler 33*a1a3b679SAndreas Boehler $this->assertEquals('{}root', $reader->getClark()); 34*a1a3b679SAndreas Boehler 35*a1a3b679SAndreas Boehler } 36*a1a3b679SAndreas Boehler 37*a1a3b679SAndreas Boehler function testGetClarkNotOnAnElement() { 38*a1a3b679SAndreas Boehler 39*a1a3b679SAndreas Boehler $input = <<<BLA 40*a1a3b679SAndreas Boehler<?xml version="1.0"?> 41*a1a3b679SAndreas Boehler<root /> 42*a1a3b679SAndreas BoehlerBLA; 43*a1a3b679SAndreas Boehler $reader = new Reader(); 44*a1a3b679SAndreas Boehler $reader->xml($input); 45*a1a3b679SAndreas Boehler 46*a1a3b679SAndreas Boehler $this->assertNull($reader->getClark()); 47*a1a3b679SAndreas Boehler } 48*a1a3b679SAndreas Boehler 49*a1a3b679SAndreas Boehler function testSimple() { 50*a1a3b679SAndreas Boehler 51*a1a3b679SAndreas Boehler $input = <<<BLA 52*a1a3b679SAndreas Boehler<?xml version="1.0"?> 53*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns"> 54*a1a3b679SAndreas Boehler <elem1 attr="val" /> 55*a1a3b679SAndreas Boehler <elem2> 56*a1a3b679SAndreas Boehler <elem3>Hi!</elem3> 57*a1a3b679SAndreas Boehler </elem2> 58*a1a3b679SAndreas Boehler</root> 59*a1a3b679SAndreas BoehlerBLA; 60*a1a3b679SAndreas Boehler 61*a1a3b679SAndreas Boehler $reader = new Reader(); 62*a1a3b679SAndreas Boehler $reader->xml($input); 63*a1a3b679SAndreas Boehler 64*a1a3b679SAndreas Boehler $output = $reader->parse(); 65*a1a3b679SAndreas Boehler 66*a1a3b679SAndreas Boehler $expected = [ 67*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}root', 68*a1a3b679SAndreas Boehler 'value' => [ 69*a1a3b679SAndreas Boehler [ 70*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}elem1', 71*a1a3b679SAndreas Boehler 'value' => null, 72*a1a3b679SAndreas Boehler 'attributes' => [ 73*a1a3b679SAndreas Boehler 'attr' => 'val', 74*a1a3b679SAndreas Boehler ], 75*a1a3b679SAndreas Boehler ], 76*a1a3b679SAndreas Boehler [ 77*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}elem2', 78*a1a3b679SAndreas Boehler 'value' => [ 79*a1a3b679SAndreas Boehler [ 80*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}elem3', 81*a1a3b679SAndreas Boehler 'value' => 'Hi!', 82*a1a3b679SAndreas Boehler 'attributes' => [], 83*a1a3b679SAndreas Boehler ], 84*a1a3b679SAndreas Boehler ], 85*a1a3b679SAndreas Boehler 'attributes' => [], 86*a1a3b679SAndreas Boehler ], 87*a1a3b679SAndreas Boehler 88*a1a3b679SAndreas Boehler ], 89*a1a3b679SAndreas Boehler 'attributes' => [], 90*a1a3b679SAndreas Boehler 91*a1a3b679SAndreas Boehler ]; 92*a1a3b679SAndreas Boehler 93*a1a3b679SAndreas Boehler $this->assertEquals($expected, $output); 94*a1a3b679SAndreas Boehler 95*a1a3b679SAndreas Boehler } 96*a1a3b679SAndreas Boehler 97*a1a3b679SAndreas Boehler function testCDATA() { 98*a1a3b679SAndreas Boehler 99*a1a3b679SAndreas Boehler $input = <<<BLA 100*a1a3b679SAndreas Boehler<?xml version="1.0"?> 101*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns"> 102*a1a3b679SAndreas Boehler <foo><![CDATA[bar]]></foo> 103*a1a3b679SAndreas Boehler</root> 104*a1a3b679SAndreas BoehlerBLA; 105*a1a3b679SAndreas Boehler 106*a1a3b679SAndreas Boehler $reader = new Reader(); 107*a1a3b679SAndreas Boehler $reader->xml($input); 108*a1a3b679SAndreas Boehler 109*a1a3b679SAndreas Boehler $output = $reader->parse(); 110*a1a3b679SAndreas Boehler 111*a1a3b679SAndreas Boehler $expected = [ 112*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}root', 113*a1a3b679SAndreas Boehler 'value' => [ 114*a1a3b679SAndreas Boehler [ 115*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}foo', 116*a1a3b679SAndreas Boehler 'value' => 'bar', 117*a1a3b679SAndreas Boehler 'attributes' => [], 118*a1a3b679SAndreas Boehler ], 119*a1a3b679SAndreas Boehler 120*a1a3b679SAndreas Boehler ], 121*a1a3b679SAndreas Boehler 'attributes' => [], 122*a1a3b679SAndreas Boehler 123*a1a3b679SAndreas Boehler ]; 124*a1a3b679SAndreas Boehler 125*a1a3b679SAndreas Boehler $this->assertEquals($expected, $output); 126*a1a3b679SAndreas Boehler 127*a1a3b679SAndreas Boehler } 128*a1a3b679SAndreas Boehler 129*a1a3b679SAndreas Boehler function testSimpleNamespacedAttribute() { 130*a1a3b679SAndreas Boehler 131*a1a3b679SAndreas Boehler $input = <<<BLA 132*a1a3b679SAndreas Boehler<?xml version="1.0"?> 133*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns" xmlns:foo="urn:foo"> 134*a1a3b679SAndreas Boehler <elem1 foo:attr="val" /> 135*a1a3b679SAndreas Boehler</root> 136*a1a3b679SAndreas BoehlerBLA; 137*a1a3b679SAndreas Boehler 138*a1a3b679SAndreas Boehler $reader = new Reader(); 139*a1a3b679SAndreas Boehler $reader->xml($input); 140*a1a3b679SAndreas Boehler 141*a1a3b679SAndreas Boehler $output = $reader->parse(); 142*a1a3b679SAndreas Boehler 143*a1a3b679SAndreas Boehler $expected = [ 144*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}root', 145*a1a3b679SAndreas Boehler 'value' => [ 146*a1a3b679SAndreas Boehler [ 147*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}elem1', 148*a1a3b679SAndreas Boehler 'value' => null, 149*a1a3b679SAndreas Boehler 'attributes' => [ 150*a1a3b679SAndreas Boehler '{urn:foo}attr' => 'val', 151*a1a3b679SAndreas Boehler ], 152*a1a3b679SAndreas Boehler ], 153*a1a3b679SAndreas Boehler ], 154*a1a3b679SAndreas Boehler 'attributes' => [], 155*a1a3b679SAndreas Boehler ]; 156*a1a3b679SAndreas Boehler 157*a1a3b679SAndreas Boehler $this->assertEquals($expected, $output); 158*a1a3b679SAndreas Boehler 159*a1a3b679SAndreas Boehler } 160*a1a3b679SAndreas Boehler 161*a1a3b679SAndreas Boehler function testMappedElement() { 162*a1a3b679SAndreas Boehler 163*a1a3b679SAndreas Boehler $input = <<<BLA 164*a1a3b679SAndreas Boehler<?xml version="1.0"?> 165*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns"> 166*a1a3b679SAndreas Boehler <elem1 /> 167*a1a3b679SAndreas Boehler</root> 168*a1a3b679SAndreas BoehlerBLA; 169*a1a3b679SAndreas Boehler 170*a1a3b679SAndreas Boehler $reader = new Reader(); 171*a1a3b679SAndreas Boehler $reader->elementMap = [ 172*a1a3b679SAndreas Boehler '{http://sabredav.org/ns}elem1' => 'Sabre\\Xml\\Element\\Mock' 173*a1a3b679SAndreas Boehler ]; 174*a1a3b679SAndreas Boehler $reader->xml($input); 175*a1a3b679SAndreas Boehler 176*a1a3b679SAndreas Boehler $output = $reader->parse(); 177*a1a3b679SAndreas Boehler 178*a1a3b679SAndreas Boehler $expected = [ 179*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}root', 180*a1a3b679SAndreas Boehler 'value' => [ 181*a1a3b679SAndreas Boehler [ 182*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}elem1', 183*a1a3b679SAndreas Boehler 'value' => 'foobar', 184*a1a3b679SAndreas Boehler 'attributes' => [], 185*a1a3b679SAndreas Boehler ], 186*a1a3b679SAndreas Boehler ], 187*a1a3b679SAndreas Boehler 'attributes' => [], 188*a1a3b679SAndreas Boehler 189*a1a3b679SAndreas Boehler ]; 190*a1a3b679SAndreas Boehler 191*a1a3b679SAndreas Boehler $this->assertEquals($expected, $output); 192*a1a3b679SAndreas Boehler 193*a1a3b679SAndreas Boehler } 194*a1a3b679SAndreas Boehler 195*a1a3b679SAndreas Boehler /** 196*a1a3b679SAndreas Boehler * @depends testMappedElement 197*a1a3b679SAndreas Boehler */ 198*a1a3b679SAndreas Boehler function testMappedElementCallBack() { 199*a1a3b679SAndreas Boehler 200*a1a3b679SAndreas Boehler $input = <<<BLA 201*a1a3b679SAndreas Boehler<?xml version="1.0"?> 202*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns"> 203*a1a3b679SAndreas Boehler <elem1 /> 204*a1a3b679SAndreas Boehler</root> 205*a1a3b679SAndreas BoehlerBLA; 206*a1a3b679SAndreas Boehler 207*a1a3b679SAndreas Boehler $reader = new Reader(); 208*a1a3b679SAndreas Boehler $reader->elementMap = [ 209*a1a3b679SAndreas Boehler '{http://sabredav.org/ns}elem1' => function(Reader $reader) { 210*a1a3b679SAndreas Boehler $reader->next(); 211*a1a3b679SAndreas Boehler return 'foobar'; 212*a1a3b679SAndreas Boehler } 213*a1a3b679SAndreas Boehler ]; 214*a1a3b679SAndreas Boehler $reader->xml($input); 215*a1a3b679SAndreas Boehler 216*a1a3b679SAndreas Boehler $output = $reader->parse(); 217*a1a3b679SAndreas Boehler 218*a1a3b679SAndreas Boehler $expected = [ 219*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}root', 220*a1a3b679SAndreas Boehler 'value' => [ 221*a1a3b679SAndreas Boehler [ 222*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}elem1', 223*a1a3b679SAndreas Boehler 'value' => 'foobar', 224*a1a3b679SAndreas Boehler 'attributes' => [], 225*a1a3b679SAndreas Boehler ], 226*a1a3b679SAndreas Boehler ], 227*a1a3b679SAndreas Boehler 'attributes' => [], 228*a1a3b679SAndreas Boehler 229*a1a3b679SAndreas Boehler ]; 230*a1a3b679SAndreas Boehler 231*a1a3b679SAndreas Boehler $this->assertEquals($expected, $output); 232*a1a3b679SAndreas Boehler 233*a1a3b679SAndreas Boehler } 234*a1a3b679SAndreas Boehler 235*a1a3b679SAndreas Boehler /** 236*a1a3b679SAndreas Boehler * @depends testMappedElementCallBack 237*a1a3b679SAndreas Boehler */ 238*a1a3b679SAndreas Boehler function testReadText() { 239*a1a3b679SAndreas Boehler 240*a1a3b679SAndreas Boehler $input = <<<BLA 241*a1a3b679SAndreas Boehler<?xml version="1.0"?> 242*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns"> 243*a1a3b679SAndreas Boehler <elem1> 244*a1a3b679SAndreas Boehler <elem2>hello </elem2> 245*a1a3b679SAndreas Boehler <elem2>world</elem2> 246*a1a3b679SAndreas Boehler </elem1> 247*a1a3b679SAndreas Boehler</root> 248*a1a3b679SAndreas BoehlerBLA; 249*a1a3b679SAndreas Boehler 250*a1a3b679SAndreas Boehler $reader = new Reader(); 251*a1a3b679SAndreas Boehler $reader->elementMap = [ 252*a1a3b679SAndreas Boehler '{http://sabredav.org/ns}elem1' => function(Reader $reader) { 253*a1a3b679SAndreas Boehler return $reader->readText(); 254*a1a3b679SAndreas Boehler } 255*a1a3b679SAndreas Boehler ]; 256*a1a3b679SAndreas Boehler $reader->xml($input); 257*a1a3b679SAndreas Boehler 258*a1a3b679SAndreas Boehler $output = $reader->parse(); 259*a1a3b679SAndreas Boehler 260*a1a3b679SAndreas Boehler $expected = [ 261*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}root', 262*a1a3b679SAndreas Boehler 'value' => [ 263*a1a3b679SAndreas Boehler [ 264*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}elem1', 265*a1a3b679SAndreas Boehler 'value' => 'hello world', 266*a1a3b679SAndreas Boehler 'attributes' => [], 267*a1a3b679SAndreas Boehler ], 268*a1a3b679SAndreas Boehler ], 269*a1a3b679SAndreas Boehler 'attributes' => [], 270*a1a3b679SAndreas Boehler 271*a1a3b679SAndreas Boehler ]; 272*a1a3b679SAndreas Boehler 273*a1a3b679SAndreas Boehler $this->assertEquals($expected, $output); 274*a1a3b679SAndreas Boehler 275*a1a3b679SAndreas Boehler } 276*a1a3b679SAndreas Boehler 277*a1a3b679SAndreas Boehler function testParseProblem() { 278*a1a3b679SAndreas Boehler 279*a1a3b679SAndreas Boehler $input = <<<BLA 280*a1a3b679SAndreas Boehler<?xml version="1.0"?> 281*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns"> 282*a1a3b679SAndreas BoehlerBLA; 283*a1a3b679SAndreas Boehler 284*a1a3b679SAndreas Boehler $reader = new Reader(); 285*a1a3b679SAndreas Boehler $reader->elementMap = [ 286*a1a3b679SAndreas Boehler '{http://sabredav.org/ns}elem1' => 'Sabre\\Xml\\Element\\Mock' 287*a1a3b679SAndreas Boehler ]; 288*a1a3b679SAndreas Boehler $reader->xml($input); 289*a1a3b679SAndreas Boehler 290*a1a3b679SAndreas Boehler try { 291*a1a3b679SAndreas Boehler $output = $reader->parse(); 292*a1a3b679SAndreas Boehler $this->fail('We expected a ParseException to be thrown'); 293*a1a3b679SAndreas Boehler } catch (LibXMLException $e) { 294*a1a3b679SAndreas Boehler 295*a1a3b679SAndreas Boehler $this->assertInternalType('array', $e->getErrors()); 296*a1a3b679SAndreas Boehler 297*a1a3b679SAndreas Boehler } 298*a1a3b679SAndreas Boehler 299*a1a3b679SAndreas Boehler } 300*a1a3b679SAndreas Boehler 301*a1a3b679SAndreas Boehler /** 302*a1a3b679SAndreas Boehler * @expectedException \Sabre\Xml\ParseException 303*a1a3b679SAndreas Boehler */ 304*a1a3b679SAndreas Boehler function testBrokenParserClass() { 305*a1a3b679SAndreas Boehler 306*a1a3b679SAndreas Boehler $input = <<<BLA 307*a1a3b679SAndreas Boehler<?xml version="1.0"?> 308*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns"> 309*a1a3b679SAndreas Boehler<elem1 /> 310*a1a3b679SAndreas Boehler</root> 311*a1a3b679SAndreas BoehlerBLA; 312*a1a3b679SAndreas Boehler 313*a1a3b679SAndreas Boehler $reader = new Reader(); 314*a1a3b679SAndreas Boehler $reader->elementMap = [ 315*a1a3b679SAndreas Boehler '{http://sabredav.org/ns}elem1' => 'Sabre\\Xml\\Element\\Eater' 316*a1a3b679SAndreas Boehler ]; 317*a1a3b679SAndreas Boehler $reader->xml($input); 318*a1a3b679SAndreas Boehler $reader->parse(); 319*a1a3b679SAndreas Boehler 320*a1a3b679SAndreas Boehler 321*a1a3b679SAndreas Boehler } 322*a1a3b679SAndreas Boehler 323*a1a3b679SAndreas Boehler /** 324*a1a3b679SAndreas Boehler * Test was added for Issue #10. 325*a1a3b679SAndreas Boehler * 326*a1a3b679SAndreas Boehler * @expectedException Sabre\Xml\LibXMLException 327*a1a3b679SAndreas Boehler */ 328*a1a3b679SAndreas Boehler function testBrokenXml() { 329*a1a3b679SAndreas Boehler 330*a1a3b679SAndreas Boehler $input = <<<BLA 331*a1a3b679SAndreas Boehler<test> 332*a1a3b679SAndreas Boehler<hello> 333*a1a3b679SAndreas Boehler</hello> 334*a1a3b679SAndreas Boehler</sffsdf> 335*a1a3b679SAndreas BoehlerBLA; 336*a1a3b679SAndreas Boehler 337*a1a3b679SAndreas Boehler $reader = new Reader(); 338*a1a3b679SAndreas Boehler $reader->xml($input); 339*a1a3b679SAndreas Boehler $reader->parse(); 340*a1a3b679SAndreas Boehler 341*a1a3b679SAndreas Boehler } 342*a1a3b679SAndreas Boehler 343*a1a3b679SAndreas Boehler /** 344*a1a3b679SAndreas Boehler * Test was added for Issue #45. 345*a1a3b679SAndreas Boehler * 346*a1a3b679SAndreas Boehler * @expectedException Sabre\Xml\LibXMLException 347*a1a3b679SAndreas Boehler */ 348*a1a3b679SAndreas Boehler function testBrokenXml2() { 349*a1a3b679SAndreas Boehler 350*a1a3b679SAndreas Boehler $input = <<<XML 351*a1a3b679SAndreas Boehler<?xml version="1.0" encoding="UTF-8"?> 352*a1a3b679SAndreas Boehler<definitions> 353*a1a3b679SAndreas Boehler <collaboration> 354*a1a3b679SAndreas Boehler <participant id="sid-A33D08EB-A2DE-448F-86FE-A2B62E98818" name="Company" processRef="sid-A0A6A196-3C9A-4C69-88F6-7ED7DDFDD264"> 355*a1a3b679SAndreas Boehler <extensionElements> 356*a1a3b679SAndreas Boehler <signavio:signavioMetaData metaKey="bgcolor" /> 357*a1a3b679SAndreas Boehler ""Administrative w"> 358*a1a3b679SAndreas Boehler <extensionElements> 359*a1a3b679SAndreas Boehler <signavio:signavioMetaData metaKey="bgcolor" metaValue=""/> 360*a1a3b679SAndreas Boehler </extensionElements> 361*a1a3b679SAndreas Boehler </lan 362*a1a3b679SAndreas BoehlerXML; 363*a1a3b679SAndreas Boehler $reader = new Reader(); 364*a1a3b679SAndreas Boehler $reader->xml($input); 365*a1a3b679SAndreas Boehler $reader->parse(); 366*a1a3b679SAndreas Boehler 367*a1a3b679SAndreas Boehler } 368*a1a3b679SAndreas Boehler 369*a1a3b679SAndreas Boehler 370*a1a3b679SAndreas Boehler /** 371*a1a3b679SAndreas Boehler * @depends testMappedElement 372*a1a3b679SAndreas Boehler */ 373*a1a3b679SAndreas Boehler function testParseInnerTree() { 374*a1a3b679SAndreas Boehler 375*a1a3b679SAndreas Boehler $input = <<<BLA 376*a1a3b679SAndreas Boehler<?xml version="1.0"?> 377*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns"> 378*a1a3b679SAndreas Boehler <elem1> 379*a1a3b679SAndreas Boehler <elem1 /> 380*a1a3b679SAndreas Boehler </elem1> 381*a1a3b679SAndreas Boehler</root> 382*a1a3b679SAndreas BoehlerBLA; 383*a1a3b679SAndreas Boehler 384*a1a3b679SAndreas Boehler $reader = new Reader(); 385*a1a3b679SAndreas Boehler $reader->elementMap = [ 386*a1a3b679SAndreas Boehler '{http://sabredav.org/ns}elem1' => function(Reader $reader) { 387*a1a3b679SAndreas Boehler 388*a1a3b679SAndreas Boehler $innerTree = $reader->parseInnerTree(['{http://sabredav.org/ns}elem1' => function(Reader $reader) { 389*a1a3b679SAndreas Boehler $reader->next(); 390*a1a3b679SAndreas Boehler return "foobar"; 391*a1a3b679SAndreas Boehler }]); 392*a1a3b679SAndreas Boehler 393*a1a3b679SAndreas Boehler return $innerTree; 394*a1a3b679SAndreas Boehler } 395*a1a3b679SAndreas Boehler ]; 396*a1a3b679SAndreas Boehler $reader->xml($input); 397*a1a3b679SAndreas Boehler 398*a1a3b679SAndreas Boehler $output = $reader->parse(); 399*a1a3b679SAndreas Boehler 400*a1a3b679SAndreas Boehler $expected = [ 401*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}root', 402*a1a3b679SAndreas Boehler 'value' => [ 403*a1a3b679SAndreas Boehler [ 404*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}elem1', 405*a1a3b679SAndreas Boehler 'value' => [ 406*a1a3b679SAndreas Boehler [ 407*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}elem1', 408*a1a3b679SAndreas Boehler 'value' => 'foobar', 409*a1a3b679SAndreas Boehler 'attributes' => [], 410*a1a3b679SAndreas Boehler ] 411*a1a3b679SAndreas Boehler ], 412*a1a3b679SAndreas Boehler 'attributes' => [], 413*a1a3b679SAndreas Boehler ], 414*a1a3b679SAndreas Boehler ], 415*a1a3b679SAndreas Boehler 'attributes' => [], 416*a1a3b679SAndreas Boehler 417*a1a3b679SAndreas Boehler ]; 418*a1a3b679SAndreas Boehler 419*a1a3b679SAndreas Boehler $this->assertEquals($expected, $output); 420*a1a3b679SAndreas Boehler 421*a1a3b679SAndreas Boehler } 422*a1a3b679SAndreas Boehler 423*a1a3b679SAndreas Boehler /** 424*a1a3b679SAndreas Boehler * @depends testParseInnerTree 425*a1a3b679SAndreas Boehler */ 426*a1a3b679SAndreas Boehler function testParseGetElements() { 427*a1a3b679SAndreas Boehler 428*a1a3b679SAndreas Boehler $input = <<<BLA 429*a1a3b679SAndreas Boehler<?xml version="1.0"?> 430*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns"> 431*a1a3b679SAndreas Boehler <elem1> 432*a1a3b679SAndreas Boehler <elem1 /> 433*a1a3b679SAndreas Boehler </elem1> 434*a1a3b679SAndreas Boehler</root> 435*a1a3b679SAndreas BoehlerBLA; 436*a1a3b679SAndreas Boehler 437*a1a3b679SAndreas Boehler $reader = new Reader(); 438*a1a3b679SAndreas Boehler $reader->elementMap = [ 439*a1a3b679SAndreas Boehler '{http://sabredav.org/ns}elem1' => function(Reader $reader) { 440*a1a3b679SAndreas Boehler 441*a1a3b679SAndreas Boehler $innerTree = $reader->parseGetElements(['{http://sabredav.org/ns}elem1' => function(Reader $reader) { 442*a1a3b679SAndreas Boehler $reader->next(); 443*a1a3b679SAndreas Boehler return "foobar"; 444*a1a3b679SAndreas Boehler }]); 445*a1a3b679SAndreas Boehler 446*a1a3b679SAndreas Boehler return $innerTree; 447*a1a3b679SAndreas Boehler } 448*a1a3b679SAndreas Boehler ]; 449*a1a3b679SAndreas Boehler $reader->xml($input); 450*a1a3b679SAndreas Boehler 451*a1a3b679SAndreas Boehler $output = $reader->parse(); 452*a1a3b679SAndreas Boehler 453*a1a3b679SAndreas Boehler $expected = [ 454*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}root', 455*a1a3b679SAndreas Boehler 'value' => [ 456*a1a3b679SAndreas Boehler [ 457*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}elem1', 458*a1a3b679SAndreas Boehler 'value' => [ 459*a1a3b679SAndreas Boehler [ 460*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}elem1', 461*a1a3b679SAndreas Boehler 'value' => 'foobar', 462*a1a3b679SAndreas Boehler 'attributes' => [], 463*a1a3b679SAndreas Boehler ] 464*a1a3b679SAndreas Boehler ], 465*a1a3b679SAndreas Boehler 'attributes' => [], 466*a1a3b679SAndreas Boehler ], 467*a1a3b679SAndreas Boehler ], 468*a1a3b679SAndreas Boehler 'attributes' => [], 469*a1a3b679SAndreas Boehler 470*a1a3b679SAndreas Boehler ]; 471*a1a3b679SAndreas Boehler 472*a1a3b679SAndreas Boehler $this->assertEquals($expected, $output); 473*a1a3b679SAndreas Boehler 474*a1a3b679SAndreas Boehler } 475*a1a3b679SAndreas Boehler 476*a1a3b679SAndreas Boehler /** 477*a1a3b679SAndreas Boehler * @depends testParseInnerTree 478*a1a3b679SAndreas Boehler */ 479*a1a3b679SAndreas Boehler function testParseGetElementsNoElements() { 480*a1a3b679SAndreas Boehler 481*a1a3b679SAndreas Boehler $input = <<<BLA 482*a1a3b679SAndreas Boehler<?xml version="1.0"?> 483*a1a3b679SAndreas Boehler<root xmlns="http://sabredav.org/ns"> 484*a1a3b679SAndreas Boehler <elem1> 485*a1a3b679SAndreas Boehler hi 486*a1a3b679SAndreas Boehler </elem1> 487*a1a3b679SAndreas Boehler</root> 488*a1a3b679SAndreas BoehlerBLA; 489*a1a3b679SAndreas Boehler 490*a1a3b679SAndreas Boehler $reader = new Reader(); 491*a1a3b679SAndreas Boehler $reader->elementMap = [ 492*a1a3b679SAndreas Boehler '{http://sabredav.org/ns}elem1' => function(Reader $reader) { 493*a1a3b679SAndreas Boehler 494*a1a3b679SAndreas Boehler $innerTree = $reader->parseGetElements(['{http://sabredav.org/ns}elem1' => function(Reader $reader) { 495*a1a3b679SAndreas Boehler $reader->next(); 496*a1a3b679SAndreas Boehler return "foobar"; 497*a1a3b679SAndreas Boehler }]); 498*a1a3b679SAndreas Boehler 499*a1a3b679SAndreas Boehler return $innerTree; 500*a1a3b679SAndreas Boehler } 501*a1a3b679SAndreas Boehler ]; 502*a1a3b679SAndreas Boehler $reader->xml($input); 503*a1a3b679SAndreas Boehler 504*a1a3b679SAndreas Boehler $output = $reader->parse(); 505*a1a3b679SAndreas Boehler 506*a1a3b679SAndreas Boehler $expected = [ 507*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}root', 508*a1a3b679SAndreas Boehler 'value' => [ 509*a1a3b679SAndreas Boehler [ 510*a1a3b679SAndreas Boehler 'name' => '{http://sabredav.org/ns}elem1', 511*a1a3b679SAndreas Boehler 'value' => [], 512*a1a3b679SAndreas Boehler 'attributes' => [], 513*a1a3b679SAndreas Boehler ], 514*a1a3b679SAndreas Boehler ], 515*a1a3b679SAndreas Boehler 'attributes' => [], 516*a1a3b679SAndreas Boehler 517*a1a3b679SAndreas Boehler ]; 518*a1a3b679SAndreas Boehler 519*a1a3b679SAndreas Boehler $this->assertEquals($expected, $output); 520*a1a3b679SAndreas Boehler 521*a1a3b679SAndreas Boehler } 522*a1a3b679SAndreas Boehler 523*a1a3b679SAndreas Boehler 524*a1a3b679SAndreas Boehler} 525