forked from xvoland/html-validate
-
Notifications
You must be signed in to change notification settings - Fork 0
/
assertHTMLValidate.php
116 lines (101 loc) · 3.75 KB
/
assertHTMLValidate.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?php
/**
* CUSTOM ASSERT EXTENSION FOR PHPUNIT FRAMEWORK
*
* Copyright © 2012, Vitalii Tereshchuk <[email protected]>
* All rights reserved.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* @package Custom Assert
* @subpackage Custom Assert Extension for PHPUnit Framework
* @author Vitalii Tereshchuk <[email protected]>
* @copyright 2012 Vitalii Tereshchuk <[email protected]>
* @link http://dotoca.net/
* @link https://github.com/xvoland/html-validate
*
*/
require_once 'PHPUnit/Framework/Assert.php';
class Assert extends PHPUnit_Framework_Assert
{
/**
* Asserts that a HTML is validate.
*
* @param string $html
* @param string $output
* @throws PHPUnit_Framework_AssertionFailedError
*/
public static function HTMLValidate($html, $output = 'text')
{
$_url = 'http://html5.validator.nu/';
$_port = null;
$_output = array('xhtml', 'html', 'xml', 'json', 'text');
$_useragent = 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)';
if (empty($html)) {
self::assertEmpty($html, self::isEmpty());
}
if (!is_string($html)) {
throw self::factory(
1, 'string'
);
}
if (!is_string($output) || !in_array($output, $_output)) {
throw self::factory(
2, 'string - text/xhtml/html/xml/json'
);
}
$posts = array(
'out' => $output,
'content' => self::_makeHTMLBody($html)
);
$curlOpt = array(
CURLOPT_USERAGENT => $_useragent,
CURLOPT_URL => $_url,
CURLOPT_PORT => $_port,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $posts
);
$curl = curl_init();
curl_setopt_array($curl, $curlOpt);
if (!$response = curl_exec($curl)) {
throw new PHPUnit_Framework_Exception(
sprintf('Can\'t check validation. cURL returning error %s',
trigger_error(curl_error($curl))
)
);
}
curl_close($curl);
// check response
if (stripos($response, 'Error') !== false || stripos($response, 'Warning') !== false) {
//self::assertTrue(false);
self::fail($response);
}
return self::assertTrue(true);
}
/**
* this is HTML body?
*
* @param string $html
* @return string $html
*/
private static function _makeHTMLBody($isHTML) {
// this is HTML or part of HTML?
if (stripos($isHTML, 'html>') === false) {
return '<!DOCTYPE html><html><head><meta charset=utf-8 /><title></title></head><body>'.$isHTML.'</body></html>';
} else {
return $isHTML;
}
}
}