Completed
Push — master ( 95fb2b...c3aa20 )
by Joschi
02:59
created

DomTest   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 85
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 3
Bugs 0 Features 0
Metric Value
dl 0
loc 85
rs 10
c 3
b 0
f 0
wmc 6
lcom 1
cbo 1

6 Methods

Rating   Name   Duplication   Size   Complexity  
A testXmlString() 0 6 1
A testXmlFile() 0 8 1
A testHtml5String() 0 8 1
A testHtml4StringNamespaces() 0 15 1
A testXmlUri() 0 6 1
A testHtmlSvgFile() 0 13 1
1
<?php
2
3
/**
4
 * dom-factory
5
 *
6
 * @category Jkphl
7
 * @package Jkphl\Domfactory
8
 * @subpackage Jkphl\Domfactory\Tests
9
 * @author Joschi Kuphal <[email protected]> / @jkphl
10
 * @copyright Copyright © 2017 Joschi Kuphal <[email protected]> / @jkphl
11
 * @license http://opensource.org/licenses/MIT The MIT License (MIT)
12
 */
13
14
/***********************************************************************************
15
 *  The MIT License (MIT)
16
 *
17
 *  Copyright © 2017 Joschi Kuphal <[email protected]> / @jkphl
18
 *
19
 *  Permission is hereby granted, free of charge, to any person obtaining a copy of
20
 *  this software and associated documentation files (the "Software"), to deal in
21
 *  the Software without restriction, including without limitation the rights to
22
 *  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
23
 *  the Software, and to permit persons to whom the Software is furnished to do so,
24
 *  subject to the following conditions:
25
 *
26
 *  The above copyright notice and this permission notice shall be included in all
27
 *  copies or substantial portions of the Software.
28
 *
29
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
30
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
31
 *  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
32
 *  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
33
 *  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
34
 *  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35
 ***********************************************************************************/
36
37
namespace Jkphl\Domfactory\Tests\Ports;
38
39
use Jkphl\Domfactory\Ports\Dom;
40
use Jkphl\Domfactory\Tests\AbstractTestBase;
41
42
/**
43
 * DOM factory tests
44
 *
45
 * @package Jkphl\Domfactory
46
 * @subpackage Jkphl\Domfactory\Tests
47
 */
48
class DomTest extends AbstractTestBase
49
{
50
    /**
51
     * Test parsing an XML string
52
     */
53
    public function testXmlString()
54
    {
55
        $dom = Dom::createFromString(file_get_contents(self::$fixture.'books.xml'));
56
        $this->assertInstanceOf(\DOMDocument::class, $dom);
57
        $this->assertEquals('catalog', $dom->documentElement->localName);
58
    }
59
60
    /**
61
     * Test parsing an XML file
62
     *
63
     * @expectedException \Jkphl\Domfactory\Ports\InvalidArgumentException
64
     * @expectedExceptionCode 1495569580
65
     */
66
    public function testXmlFile()
67
    {
68
        $dom = Dom::createFromFile(self::$fixture.'books.xml');
69
        $this->assertInstanceOf(\DOMDocument::class, $dom);
70
        $this->assertEquals('catalog', $dom->documentElement->localName);
71
72
        Dom::createFromFile('invalid');
73
    }
74
75
    /**
76
     * Test parsing an XML string via HTTP
77
     */
78
    public function testXmlUri()
79
    {
80
        $dom = Dom::createFromUri('http://localhost:1349/books.xml');
81
        $this->assertInstanceOf(\DOMDocument::class, $dom);
82
        $this->assertEquals('catalog', $dom->documentElement->localName);
83
    }
84
85
    /**
86
     * Test parsing an HTML5 string
87
     */
88
    public function testHtml5String()
89
    {
90
        $dom = Dom::createFromString(file_get_contents(self::$fixture.'html5.html'));
91
        $this->assertInstanceOf(\DOMDocument::class, $dom);
92
        $this->assertEquals('html', $dom->documentElement->localName);
93
        $this->assertEquals('http://www.w3.org/1999/xhtml', $dom->documentElement->namespaceURI);
94
        $this->assertTrue($dom->documentElement->isDefaultNamespace('http://www.w3.org/1999/xhtml'));
95
    }
96
97
    /**
98
     * Test parsing an HTML4 string with additional namespaces
99
     */
100
    public function testHtml4StringNamespaces()
101
    {
102
        $dom = Dom::createFromString(file_get_contents(self::$fixture.'html4.html'));
103
        $this->assertInstanceOf(\DOMDocument::class, $dom);
104
        $this->assertEquals('html', $dom->documentElement->localName);
105
        $this->assertEquals('http://www.w3.org/1999/xhtml', $dom->documentElement->namespaceURI);
106
        $this->assertTrue($dom->documentElement->isDefaultNamespace('http://www.w3.org/1999/xhtml'));
107
108
        $xpath = new \DOMXPath($dom);
109
        $xpath->registerNamespace('html', 'http://www.w3.org/1999/xhtml');
110
        $xpath->registerNamespace('test', 'http://example.com/test-ns');
111
        $htmlElement = $xpath->query('/html:html');
112
        $this->assertEquals(1, count($htmlElement));
113
        $this->assertEquals(1, count($xpath->query('namespace::*', $htmlElement->item(0))));
114
    }
115
116
    /**
117
     * Test parsing an HTML file with inline SVG
118
     */
119
    public function testHtmlSvgFile()
120
    {
121
        $dom = Dom::createFromFile(self::$fixture.'html+svg.html');
122
        $this->assertInstanceOf(\DOMDocument::class, $dom);
123
        $this->assertEquals('html', $dom->documentElement->localName);
124
125
        $xpath = new \DOMXPath($dom);
126
        $xpath->registerNamespace('html', 'http://www.w3.org/1999/xhtml');
127
        $xpath->registerNamespace('svg', 'http://www.w3.org/2000/svg');
128
        $this->assertEquals(1, count($xpath->query('/html:html')));
129
        $this->assertEquals(1, count($xpath->query('//svg')));
130
        $this->assertEquals(1, count($xpath->query('//svg:svg')));
131
    }
132
}
133