Completed
Push — master ( f5d71d...bfd9cb )
by Sam
12:52
created

SS_HTML4ValueTest   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 65
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 65
rs 10
wmc 7
lcom 1
cbo 2

5 Methods

Rating   Name   Duplication   Size   Complexity  
A HTML4ValueTest::testInvalidHTMLSaving() 0 16 2
A HTML4ValueTest::testUtf8Saving() 0 6 1
A HTML4ValueTest::testInvalidHTMLTagNames() 0 18 2
A HTML4ValueTest::testMixedNewlines() 0 10 1
A HTML4ValueTest::testAttributeEscaping() 0 9 1
1
<?php
2
3
use SilverStripe\Dev\SapphireTest;
4
use SilverStripe\View\Parsers\HTML4Value;
5
6
/**
7
 * @package framework
8
 * @subpackage tests
9
 */
10
class HTML4ValueTest extends SapphireTest {
11
	public function testInvalidHTMLSaving() {
12
		$value = new HTML4Value();
13
14
		$invalid = array (
15
			'<p>Enclosed Value</p></p>'                              => '<p>Enclosed Value</p>',
16
			'<meta content="text/html"></meta>'                      => '<meta content="text/html">',
17
			'<p><div class="example"></div></p>'                     => '<p></p><div class="example"></div>',
18
			'<html><html><body><falsetag "attribute=""attribute""">' => '<falsetag></falsetag>',
19
			'<body<body<body>/bodu>/body>'                           => '/bodu&gt;/body&gt;'
20
		);
21
22
		foreach($invalid as $input => $expected) {
23
			$value->setContent($input);
24
			$this->assertEquals($expected, $value->getContent(), 'Invalid HTML can be saved');
25
		}
26
	}
27
28
	public function testUtf8Saving() {
29
		$value = new HTML4Value();
30
31
		$value->setContent('<p>ö ß ā い 家</p>');
32
		$this->assertEquals('<p>ö ß ā い 家</p>', $value->getContent());
33
	}
34
35
	public function testInvalidHTMLTagNames() {
36
		$value = new HTML4Value();
37
38
		$invalid = array(
39
			'<p><div><a href="test-link"></p></div>',
40
			'<html><div><a href="test-link"></a></a></html_>',
41
			'""\'\'\'"""\'""<<<>/</<htmlbody><a href="test-link"<<>'
42
		);
43
44
		foreach($invalid as $input) {
45
			$value->setContent($input);
46
			$this->assertEquals(
47
				'test-link',
48
				$value->getElementsByTagName('a')->item(0)->getAttribute('href'),
49
				'Link data can be extraced from malformed HTML'
50
			);
51
		}
52
	}
53
54
	public function testMixedNewlines() {
55
		$value = new HTML4Value();
56
57
		$value->setContent("<p>paragraph</p>\n<ul><li>1</li>\r\n</ul>");
58
		$this->assertEquals(
59
			"<p>paragraph</p>\n<ul><li>1</li>\n</ul>",
60
			$value->getContent(),
61
			'Newlines get converted'
62
		);
63
	}
64
65
	public function testAttributeEscaping() {
66
		$value = new HTML4Value();
67
68
		$value->setContent('<a href="[]"></a>');
69
		$this->assertEquals('<a href="[]"></a>', $value->getContent(), "'[' character isn't escaped");
70
71
		$value->setContent('<a href="&quot;"></a>');
72
		$this->assertEquals('<a href="&quot;"></a>', $value->getContent(), "'\"' character is escaped");
73
	}
74
}
75