feeds-8.x-3.0-alpha1/tests/src/Unit/Component/XmlParserTraitTest.php
tests/src/Unit/Component/XmlParserTraitTest.php
<?php
namespace Drupal\Tests\feeds\Unit\Component;
use Drupal\Tests\feeds\Unit\FeedsUnitTestCase;
/**
* @coversDefaultClass \Drupal\feeds\Component\XmlParserTrait
* @group feeds
*/
class XmlParserTraitTest extends FeedsUnitTestCase {
/**
* Basic XML parsing test.
*/
public function test() {
$trait = $this->getMockForTrait('Drupal\feeds\Component\XmlParserTrait');
$doc = $this->callProtectedMethod($trait, 'getDomDocument', [' <thing></thing> ']);
$this->assertSame('DOMDocument', get_class($doc));
$errors = $this->callProtectedMethod($trait, 'getXmlErrors');
$this->assertSame([], $errors);
}
/**
* Tests parsing a document with invalid XML.
*/
public function testErrors() {
$trait = $this->getMockForTrait('Drupal\feeds\Component\XmlParserTrait');
$doc = $this->callProtectedMethod($trait, 'getDomDocument', ['asdfasdf']);
$this->assertSame('DOMDocument', get_class($doc));
$errors = $this->callProtectedMethod($trait, 'getXmlErrors');
$this->assertSame("Start tag expected, '<' not found", $errors[3][0]['message']);
}
/**
* Strip some namespaces out of XML.
*
* @dataProvider namespaceProvider
*/
public function testRemoveDefaultNamespaces($in, $out) {
$trait = $this->getMockForTrait('Drupal\feeds\Component\XmlParserTrait');
$result = $this->callProtectedMethod($trait, 'removeDefaultNamespaces', [$in]);
$this->assertSame($out, $result);
}
/**
* Data provider for testRemoveDefaultNamespaces().
*
* Checks that the input and output are equal.
*/
public function namespaceProvider() {
return [
['<feed xmlns="http://www.w3.org/2005/Atom">bleep blorp</feed>', '<feed>bleep blorp</feed>'],
['<подача xmlns="http://www.w3.org/2005/Atom">bleep blorp</подача>', '<подача>bleep blorp</подача>'],
['<по.дача xmlns="http://www.w3.org/2005/Atom">bleep blorp</по.дача>', '<по.дача>bleep blorp</по.дача>'],
['<element other attrs xmlns="http://www.w3.org/2005/Atom">bleep blorp</element>', '<element other attrs>bleep blorp</element>'],
['<cat xmlns="http://www.w3.org/2005/Atom" other attrs>bleep blorp</cat>', '<cat other attrs>bleep blorp</cat>'],
['<飼料 thing="stuff" xmlns="http://www.w3.org/2005/Atom">bleep blorp</飼料>', '<飼料 thing="stuff">bleep blorp</飼料>'],
['<飼-料 thing="stuff" xmlns="http://www.w3.org/2005/Atom">bleep blorp</飼-料>', '<飼-料 thing="stuff">bleep blorp</飼-料>'],
['<self xmlns="http://www.w3.org/2005/Atom" />', '<self />'],
['<self attr xmlns="http://www.w3.org/2005/Atom"/>', '<self attr/>'],
['<a xmlns="http://www.w3.org/2005/Atom"/>', '<a/>'],
['<a xmlns="http://www.w3.org/2005/Atom"></a>', '<a></a>'],
['<a href="http://google.com" xmlns="http://www.w3.org/2005/Atom"></a>', '<a href="http://google.com"></a>'],
// Test invalid XML element names.
['<1name href="http://google.com" xmlns="http://www.w3.org/2005/Atom"></1name>', '<1name href="http://google.com" xmlns="http://www.w3.org/2005/Atom"></1name>'],
// Test other namespaces.
['<name href="http://google.com" xmlns:h="http://www.w3.org/2005/Atom"></name>', '<name href="http://google.com" xmlns:h="http://www.w3.org/2005/Atom"></name>'],
// Test multiple default namespaces.
['<name xmlns="http://www.w3.org/2005/Atom"></name><name xmlns="http://www.w3.org/2005/Atom"></name>', '<name></name><name></name>'],
];
}
}
