22
33namespace Mf2 \Parser \Test ;
44
5+ final class Parser extends \Mf2 \Parser
6+ {
7+ /** Actually textContent from before the whitespace normalisation merge (e8da04f93d548d26287a8980eca4216639cbc61d) */
8+ public function textContent (\DOMElement $ el , $ dummy =false ) {
9+ $ excludeTags = array ('noframe ' , 'noscript ' , 'script ' , 'style ' , 'frames ' , 'frameset ' );
10+
11+ if (isset ($ el ->tagName ) and in_array (strtolower ($ el ->tagName ), $ excludeTags )) {
12+ return '' ;
13+ }
14+
15+ $ this ->_resolveChildUrls ($ el );
16+
17+ $ clonedEl = $ el ->cloneNode (true );
18+
19+ foreach ($ this ->xpath ->query ('.//img ' , $ clonedEl ) as $ imgEl ) {
20+ $ newNode = $ this ->doc ->createTextNode ($ imgEl ->getAttribute ($ imgEl ->hasAttribute ('alt ' ) ? 'alt ' : 'src ' ));
21+ $ imgEl ->parentNode ->replaceChild ($ newNode , $ imgEl );
22+ }
23+
24+ foreach ($ excludeTags as $ tagName ) {
25+ foreach ($ this ->xpath ->query (".// {$ tagName }" , $ clonedEl ) as $ elToRemove ) {
26+ $ elToRemove ->parentNode ->removeChild ($ elToRemove );
27+ }
28+ }
29+
30+ return \Mf2 \unicodeTrim ($ clonedEl ->textContent );
31+ }
32+
33+ // Hack. Old textContent requires "resolveChildUrls", but that method is private.
34+ private $ __resolveChildUrls = null ;
35+ private function _resolveChildUrls (\DOMElement $ element ) {
36+ if (null === $ this ->__resolveChildUrls ) {
37+ $ reflectUpon = new \ReflectionClass ($ this );
38+ $ this ->__resolveChildUrls = $ reflectUpon ->getMethod ('resolveChildUrls ' );
39+ $ this ->__resolveChildUrls ->setAccessible (true );
40+ }
41+ return $ this ->__resolveChildUrls ->invoke ($ this , $ element );
42+ }
43+ }
44+
545class MicroformatsTestSuiteTest extends \PHPUnit_Framework_TestCase
646{
747 /**
@@ -10,7 +50,7 @@ class MicroformatsTestSuiteTest extends \PHPUnit_Framework_TestCase
1050 */
1151 public function testMf1FromTestSuite ($ input , $ expectedOutput )
1252 {
13- $ parser = new \ Mf2 \ Parser ($ input , 'http://example.com/ ' );
53+ $ parser = new Parser ($ input , 'http://example.com/ ' );
1454 $ this ->assertEquals (
1555 $ this ->makeComparible (json_decode ($ expectedOutput , true )),
1656 $ this ->makeComparible (json_decode (json_encode ($ parser ->parse ()), true ))
@@ -23,7 +63,7 @@ public function testMf1FromTestSuite($input, $expectedOutput)
2363 */
2464 public function testMf2FromTestSuite ($ input , $ expectedOutput )
2565 {
26- $ parser = new \ Mf2 \ Parser ($ input , 'http://example.com/ ' );
66+ $ parser = new Parser ($ input , 'http://example.com/ ' );
2767 $ this ->assertEquals (
2868 $ this ->makeComparible (json_decode ($ expectedOutput , true )),
2969 $ this ->makeComparible (json_decode (json_encode ($ parser ->parse ()), true ))
@@ -36,7 +76,7 @@ public function testMf2FromTestSuite($input, $expectedOutput)
3676 */
3777 public function testMixedFromTestSuite ($ input , $ expectedOutput )
3878 {
39- $ parser = new \ Mf2 \ Parser ($ input , 'http://example.com/ ' );
79+ $ parser = new Parser ($ input , 'http://example.com/ ' );
4080 $ this ->assertEquals (
4181 $ this ->makeComparible (json_decode ($ expectedOutput , true )),
4282 $ this ->makeComparible (json_decode (json_encode ($ parser ->parse ()), true ))
@@ -48,9 +88,6 @@ public function testMixedFromTestSuite($input, $expectedOutput)
4888 * * We sort arrays by key, normalising them, because JSON objects are unordered.
4989 * * We json_encode strings, and cut the starting and ending ", so PHPUnit better
5090 * shows whitespace characters like tabs and newlines.
51- * * We replace all consecutive whitespace with single space characters in e-* value
52- * properties, to avoid failing tests only because difference in the handing of
53- * extracting textContent.
5491 **/
5592 public function makeComparible ($ array )
5693 {
@@ -59,9 +96,6 @@ public function makeComparible($array)
5996 if (gettype ($ value ) === 'array ' ) {
6097 $ array [$ key ] = $ this ->makeComparible ($ value );
6198 } else if (gettype ($ value ) === 'string ' ) {
62- if ($ key === 'value ' && array_key_exists ('html ' , $ array )) {
63- $ value = preg_replace ('/\s+/ ' , ' ' , $ value );
64- }
6599 $ array [$ key ] = substr (json_encode ($ value ), 1 , -1 );
66100 }
67101 }
0 commit comments