getDomFromString('AAA');
        $this->assertTrue($reader->elementExists('/element/child'));
        $this->assertEquals('AAA', $reader->getElement('/element/child')->textContent);
        $this->assertEquals('AAA', $reader->getValue('/element/child'));
        $this->assertEquals('test', $reader->getAttribute('attr', $reader->getElement('/element')));
        $this->assertEquals('subtest', $reader->getAttribute('attr', $reader->getElement('/element'), 'child'));
    }
    /**
     * Test reading XML from zip
     */
    public function testDomFromZip()
    {
        $pathResources = PHPOFFICE_COMMON_TESTS_BASE_DIR.DIRECTORY_SEPARATOR.'resources'.DIRECTORY_SEPARATOR.'files'.DIRECTORY_SEPARATOR;
        $reader = new XMLReader();
        $reader->getDomFromZip($pathResources. 'reader.zip', 'test.xml');
        $this->assertTrue($reader->elementExists('/element/child'));
        $this->assertFalse($reader->getDomFromZip($pathResources. 'reader.zip', 'non_existing_xml_file.xml'));
    }
    /**
     * Test that read from non existing archive throws exception
     *
     * @expectedException Exception
     */
    public function testThrowsExceptionOnNonExistingArchive()
    {
        $pathResources = PHPOFFICE_COMMON_TESTS_BASE_DIR.DIRECTORY_SEPARATOR.'resources'.DIRECTORY_SEPARATOR.'files'.DIRECTORY_SEPARATOR;
        $reader = new XMLReader();
        $reader->getDomFromZip($pathResources. 'readers.zip', 'test.xml');
    }
    /**
     * Test elements count
     */
    public function testCountElements()
    {
        $reader = new XMLReader();
        $reader->getDomFromString('AAABBB');
        $this->assertEquals(2, $reader->countElements('/element/child'));
    }
    /**
     * Test read non existing elements
     */
    public function testReturnNullOnNonExistingNode()
    {
        $reader = new XMLReader();
        $this->assertEmpty($reader->getElements('/element/children'));
        $reader->getDomFromString('AAA');
        $this->assertNull($reader->getElement('/element/children'));
        $this->assertNull($reader->getValue('/element/children'));
    }
    /**
     * Test that xpath fails if custom namespace is not registered
     */
    public function testShouldThrowExceptionIfNamespaceIsNotKnown()
    {
        try {
            $reader = new XMLReader();
            $reader->getDomFromString('AAA');
            $this->assertTrue($reader->elementExists('/element/test:child'));
            $this->assertEquals('AAA', $reader->getElement('/element/test:child')->textContent);
            $this->fail();
        } catch (\Exception $e) {
            $this->assertTrue(true);
        }
    }
    /**
     * Test reading XML with manually registered namespace
     */
    public function testShouldParseXmlWithCustomNamespace()
    {
        $reader = new XMLReader();
        $reader->getDomFromString('AAA');
        $reader->registerNamespace('test', 'http://phpword.com/my/custom/namespace');
        $this->assertTrue($reader->elementExists('/element/test:child'));
        $this->assertEquals('AAA', $reader->getElement('/element/test:child')->textContent);
    }
    /**
     * Test that xpath fails if custom namespace is not registered
     *
     * @expectedException InvalidArgumentException
     */
    public function testShouldThowExceptionIfTryingToRegisterNamespaceBeforeReadingDoc()
    {
        $reader = new XMLReader();
        $reader->registerNamespace('test', 'http://phpword.com/my/custom/namespace');
    }
}