--- /dev/null
+<?php
+
+class Sabre_DAV_XMLUtilTest extends PHPUnit_Framework_TestCase {
+
+ function testToClarkNotation() {
+
+ $dom = new DOMDocument();
+ $dom->loadXML('<?xml version="1.0"?><test1 xmlns="http://www.example.org/">Testdoc</test1>');
+
+ $this->assertEquals(
+ '{http://www.example.org/}test1',
+ Sabre_DAV_XMLUtil::toClarkNotation($dom->firstChild)
+ );
+
+ }
+
+ function testToClarkNotation2() {
+
+ $dom = new DOMDocument();
+ $dom->loadXML('<?xml version="1.0"?><s:test1 xmlns:s="http://www.example.org/">Testdoc</s:test1>');
+
+ $this->assertEquals(
+ '{http://www.example.org/}test1',
+ Sabre_DAV_XMLUtil::toClarkNotation($dom->firstChild)
+ );
+
+ }
+
+ function testToClarkNotationDAVNamespace() {
+
+ $dom = new DOMDocument();
+ $dom->loadXML('<?xml version="1.0"?><s:test1 xmlns:s="urn:DAV">Testdoc</s:test1>');
+
+ $this->assertEquals(
+ '{DAV:}test1',
+ Sabre_DAV_XMLUtil::toClarkNotation($dom->firstChild)
+ );
+
+ }
+
+ function testToClarkNotationNoElem() {
+
+ $dom = new DOMDocument();
+ $dom->loadXML('<?xml version="1.0"?><s:test1 xmlns:s="urn:DAV">Testdoc</s:test1>');
+
+ $this->assertNull(
+ Sabre_DAV_XMLUtil::toClarkNotation($dom->firstChild->firstChild)
+ );
+
+ }
+
+ function testConvertDAVNamespace() {
+
+ $xml='<?xml version="1.0"?><document xmlns="DAV:">blablabla</document>';
+ $this->assertEquals(
+ '<?xml version="1.0"?><document xmlns="urn:DAV">blablabla</document>',
+ Sabre_DAV_XMLUtil::convertDAVNamespace($xml)
+ );
+
+ }
+
+ function testConvertDAVNamespace2() {
+
+ $xml='<?xml version="1.0"?><s:document xmlns:s="DAV:">blablabla</s:document>';
+ $this->assertEquals(
+ '<?xml version="1.0"?><s:document xmlns:s="urn:DAV">blablabla</s:document>',
+ Sabre_DAV_XMLUtil::convertDAVNamespace($xml)
+ );
+
+ }
+
+ function testConvertDAVNamespace3() {
+
+ $xml='<?xml version="1.0"?><s:document xmlns="http://bla" xmlns:s="DAV:" xmlns:z="http://othernamespace">blablabla</s:document>';
+ $this->assertEquals(
+ '<?xml version="1.0"?><s:document xmlns="http://bla" xmlns:s="urn:DAV" xmlns:z="http://othernamespace">blablabla</s:document>',
+ Sabre_DAV_XMLUtil::convertDAVNamespace($xml)
+ );
+
+ }
+
+ function testConvertDAVNamespace4() {
+
+ $xml='<?xml version="1.0"?><document xmlns=\'DAV:\'>blablabla</document>';
+ $this->assertEquals(
+ '<?xml version="1.0"?><document xmlns=\'urn:DAV\'>blablabla</document>',
+ Sabre_DAV_XMLUtil::convertDAVNamespace($xml)
+ );
+
+ }
+
+ function testConvertDAVNamespaceMixedQuotes() {
+
+ $xml='<?xml version="1.0"?><document xmlns=\'DAV:" xmlns="Another attribute\'>blablabla</document>';
+ $this->assertEquals(
+ $xml,
+ Sabre_DAV_XMLUtil::convertDAVNamespace($xml)
+ );
+
+ }
+
+ /**
+ * @depends testConvertDAVNamespace
+ */
+ function testLoadDOMDocument() {
+
+ $xml='<?xml version="1.0"?><document></document>';
+ $dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
+ $this->assertTrue($dom instanceof DOMDocument);
+
+ }
+
+ /**
+ * @depends testLoadDOMDocument
+ * @expectedException Sabre_DAV_Exception_BadRequest
+ */
+ function testLoadDOMDocumentEmpty() {
+
+ Sabre_DAV_XMLUtil::loadDOMDocument('');
+
+ }
+
+ /**
+ * @depends testConvertDAVNamespace
+ * @expectedException Sabre_DAV_Exception_BadRequest
+ */
+ function testLoadDOMDocumentInvalid() {
+
+ $xml='<?xml version="1.0"?><document></docu';
+ $dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
+
+ }
+
+ /**
+ * @depends testLoadDOMDocument
+ */
+ function testLoadDOMDocumentUTF16() {
+
+ $xml='<?xml version="1.0" encoding="UTF-16"?><root xmlns="DAV:">blabla</root>';
+ $xml = iconv('UTF-8','UTF-16LE',$xml);
+ $dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
+ $this->assertEquals('blabla',$dom->firstChild->nodeValue);
+
+ }
+
+
+ function testParseProperties() {
+
+ $xml='<?xml version="1.0"?>
+<root xmlns="DAV:">
+ <prop>
+ <displayname>Calendars</displayname>
+ </prop>
+</root>';
+
+ $dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
+ $properties = Sabre_DAV_XMLUtil::parseProperties($dom->firstChild);
+
+ $this->assertEquals(array(
+ '{DAV:}displayname' => 'Calendars',
+ ), $properties);
+
+
+
+ }
+
+ /**
+ * @depends testParseProperties
+ */
+ function testParsePropertiesEmpty() {
+
+ $xml='<?xml version="1.0"?>
+<root xmlns="DAV:" xmlns:s="http://www.rooftopsolutions.nl/example">
+ <prop>
+ <displayname>Calendars</displayname>
+ </prop>
+ <prop>
+ <s:example />
+ </prop>
+</root>';
+
+ $dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
+ $properties = Sabre_DAV_XMLUtil::parseProperties($dom->firstChild);
+
+ $this->assertEquals(array(
+ '{DAV:}displayname' => 'Calendars',
+ '{http://www.rooftopsolutions.nl/example}example' => null
+ ), $properties);
+
+ }
+
+
+ /**
+ * @depends testParseProperties
+ */
+ function testParsePropertiesComplex() {
+
+ $xml='<?xml version="1.0"?>
+<root xmlns="DAV:">
+ <prop>
+ <displayname>Calendars</displayname>
+ </prop>
+ <prop>
+ <someprop>Complex value <b>right here</b></someprop>
+ </prop>
+</root>';
+
+ $dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
+ $properties = Sabre_DAV_XMLUtil::parseProperties($dom->firstChild);
+
+ $this->assertEquals(array(
+ '{DAV:}displayname' => 'Calendars',
+ '{DAV:}someprop' => 'Complex value right here',
+ ), $properties);
+
+ }
+
+
+ /**
+ * @depends testParseProperties
+ */
+ function testParsePropertiesNoProperties() {
+
+ $xml='<?xml version="1.0"?>
+<root xmlns="DAV:">
+ <prop>
+ </prop>
+</root>';
+
+ $dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
+ $properties = Sabre_DAV_XMLUtil::parseProperties($dom->firstChild);
+
+ $this->assertEquals(array(), $properties);
+
+ }
+
+ function testParsePropertiesMapHref() {
+
+ $xml='<?xml version="1.0"?>
+<root xmlns="DAV:">
+ <prop>
+ <displayname>Calendars</displayname>
+ </prop>
+ <prop>
+ <someprop><href>http://sabredav.org/</href></someprop>
+ </prop>
+</root>';
+
+ $dom = Sabre_DAV_XMLUtil::loadDOMDocument($xml);
+ $properties = Sabre_DAV_XMLUtil::parseProperties($dom->firstChild,array('{DAV:}someprop'=>'Sabre_DAV_Property_Href'));
+
+ $this->assertEquals(array(
+ '{DAV:}displayname' => 'Calendars',
+ '{DAV:}someprop' => new Sabre_DAV_Property_Href('http://sabredav.org/',false),
+ ), $properties);
+
+ }
+
+ function testParseClarkNotation() {
+
+ $this->assertEquals(array(
+ 'DAV:',
+ 'foo',
+ ), Sabre_DAV_XMLUtil::parseClarkNotation('{DAV:}foo'));
+
+ $this->assertEquals(array(
+ 'http://example.org/ns/bla',
+ 'bar-soap',
+ ), Sabre_DAV_XMLUtil::parseClarkNotation('{http://example.org/ns/bla}bar-soap'));
+ }
+
+ /**
+ * @expectedException InvalidArgumentException
+ */
+ function testParseClarkNotationFail() {
+
+ Sabre_DAV_XMLUtil::parseClarkNotation('}foo');
+
+ }
+
+}
+