/**
* Test creating an UIinfo element with XML children
*/
public function testMarshallingChildren()
{
$keywords = new Keywords();
$keywords->lang = "nl";
$keywords->Keywords = array("voorbeeld", "specimen");
$logo = new Logo();
$logo->lang = "nl";
$logo->width = 30;
$logo->height = 20;
$logo->url = "https://example.edu/logo.png";
$discohints = new DiscoHints();
$discohints->IPHint = array("192.168.6.0/24", "fd00:0123:aa:1001::/64");
// keywords appears twice, direcyly under UIinfo and as child of DiscoHints
$discohints->children = array($keywords);
$uiinfo = new UIInfo();
$uiinfo->Logo = array($logo);
$uiinfo->Keywords = array($keywords);
$uiinfo->children = array($discohints);
$document = DOMDocumentFactory::fromString('<root />');
$xml = $uiinfo->toXML($document->firstChild);
$infoElements = Utils::xpQuery($xml, '/root/*[local-name()=\'UIInfo\' and namespace-uri()=\'urn:oasis:names:tc:SAML:metadata:ui\']');
$this->assertCount(1, $infoElements);
$infoElement = $infoElements[0];
$logoElements = Utils::xpQuery($infoElement, './*[local-name()=\'Logo\' and namespace-uri()=\'urn:oasis:names:tc:SAML:metadata:ui\']');
$this->assertCount(1, $logoElements);
$this->assertEquals("https://example.edu/logo.png", $logoElements[0]->textContent);
$keywordElements = Utils::xpQuery($infoElement, './*[local-name()=\'Keywords\' and namespace-uri()=\'urn:oasis:names:tc:SAML:metadata:ui\']');
$this->assertCount(1, $keywordElements);
$this->assertEquals("voorbeeld specimen", $keywordElements[0]->textContent);
$this->assertEquals("nl", $keywordElements[0]->getAttribute("xml:lang"));
$discoElements = Utils::xpQuery($infoElement, './*[local-name()=\'DiscoHints\' and namespace-uri()=\'urn:oasis:names:tc:SAML:metadata:ui\']');
$this->assertCount(1, $discoElements);
$discoElement = $discoElements[0];
$iphintElements = Utils::xpQuery($discoElement, './*[local-name()=\'IPHint\' and namespace-uri()=\'urn:oasis:names:tc:SAML:metadata:ui\']');
$this->assertCount(2, $iphintElements);
$this->assertEquals("192.168.6.0/24", $iphintElements[0]->textContent);
$this->assertEquals("fd00:0123:aa:1001::/64", $iphintElements[1]->textContent);
$keywordElements = Utils::xpQuery($discoElement, './*[local-name()=\'Keywords\' and namespace-uri()=\'urn:oasis:names:tc:SAML:metadata:ui\']');
$this->assertCount(1, $keywordElements);
$this->assertEquals("voorbeeld specimen", $keywordElements[0]->textContent);
$this->assertEquals("nl", $keywordElements[0]->getAttribute("xml:lang"));
}