diff --git a/core/composer.lock b/core/composer.lock index d5aee6c9c5c36f778860a96ff5b2f16786433010..98265d4dfe1ec27a561b72085f5de325aded8b6c 100644 --- a/core/composer.lock +++ b/core/composer.lock @@ -957,16 +957,16 @@ }, { "name": "masterminds/html5", - "version": "2.1.0", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "a10f8d392e1aad0b500f7b440c8f0d3bc9189704" + "reference": "8f782e0f01a6e33a319bdc8f6de9cfd6569979a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/a10f8d392e1aad0b500f7b440c8f0d3bc9189704", - "reference": "a10f8d392e1aad0b500f7b440c8f0d3bc9189704", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/8f782e0f01a6e33a319bdc8f6de9cfd6569979a4", + "reference": "8f782e0f01a6e33a319bdc8f6de9cfd6569979a4", "shasum": "" }, "require": { @@ -1018,7 +1018,7 @@ "serializer", "xml" ], - "time": "2015-02-09 16:26:00" + "time": "2015-06-07 08:43:18" }, { "name": "mikey179/vfsStream", diff --git a/core/vendor/composer/ClassLoader.php b/core/vendor/composer/ClassLoader.php index 4e05d3b158348d499092a409f7beec47328946da..5e1469e8307d9c644831f694ed8eccdd4afccc28 100644 --- a/core/vendor/composer/ClassLoader.php +++ b/core/vendor/composer/ClassLoader.php @@ -351,7 +351,7 @@ private function findFileWithExtension($class, $ext) foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) { if (0 === strpos($class, $prefix)) { foreach ($this->prefixDirsPsr4[$prefix] as $dir) { - if (is_file($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { return $file; } } @@ -361,7 +361,7 @@ private function findFileWithExtension($class, $ext) // PSR-4 fallback dirs foreach ($this->fallbackDirsPsr4 as $dir) { - if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { return $file; } } @@ -380,7 +380,7 @@ private function findFileWithExtension($class, $ext) foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { if (0 === strpos($class, $prefix)) { foreach ($dirs as $dir) { - if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { return $file; } } @@ -390,7 +390,7 @@ private function findFileWithExtension($class, $ext) // PSR-0 fallback dirs foreach ($this->fallbackDirsPsr0 as $dir) { - if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { return $file; } } diff --git a/core/vendor/composer/include_paths.php b/core/vendor/composer/include_paths.php deleted file mode 100644 index dab4af10a2bf6dd178e5b92787a2c01c24042a07..0000000000000000000000000000000000000000 --- a/core/vendor/composer/include_paths.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php - -// include_paths.php @generated by Composer - -$vendorDir = dirname(dirname(__FILE__)); -$baseDir = dirname($vendorDir); - -return array( - $vendorDir . '/phpunit/php-text-template', -); diff --git a/core/vendor/composer/installed.json b/core/vendor/composer/installed.json index d77003b2645ba6fdee4d3121a0792c4ea2994fcb..94733abcb6bfedcf8b1bf5c10e0c7548a4ed9609 100644 --- a/core/vendor/composer/installed.json +++ b/core/vendor/composer/installed.json @@ -265,73 +265,6 @@ "testing" ] }, - { - "name": "masterminds/html5", - "version": "2.1.0", - "version_normalized": "2.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/Masterminds/html5-php.git", - "reference": "a10f8d392e1aad0b500f7b440c8f0d3bc9189704" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/a10f8d392e1aad0b500f7b440c8f0d3bc9189704", - "reference": "a10f8d392e1aad0b500f7b440c8f0d3bc9189704", - "shasum": "" - }, - "require": { - "ext-libxml": "*", - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "4.*", - "sami/sami": "~2.0", - "satooshi/php-coveralls": "0.6.*" - }, - "time": "2015-02-09 16:26:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Masterminds\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Matt Butcher", - "email": "technosophos@gmail.com" - }, - { - "name": "Asmir Mustafic", - "email": "goetas@gmail.com" - }, - { - "name": "Matt Farina", - "email": "matt@mattfarina.com" - } - ], - "description": "An HTML5 parser and serializer.", - "homepage": "http://masterminds.github.io/html5-php", - "keywords": [ - "HTML5", - "dom", - "html", - "parser", - "querypath", - "serializer", - "xml" - ] - }, { "name": "sebastian/diff", "version": "1.3.0", @@ -3483,5 +3416,72 @@ "keywords": [ "stack" ] + }, + { + "name": "masterminds/html5", + "version": "2.1.2", + "version_normalized": "2.1.2.0", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "8f782e0f01a6e33a319bdc8f6de9cfd6569979a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/8f782e0f01a6e33a319bdc8f6de9cfd6569979a4", + "reference": "8f782e0f01a6e33a319bdc8f6de9cfd6569979a4", + "shasum": "" + }, + "require": { + "ext-libxml": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "4.*", + "sami/sami": "~2.0", + "satooshi/php-coveralls": "0.6.*" + }, + "time": "2015-06-07 08:43:18", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Masterminds\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", + "keywords": [ + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" + ] } ] diff --git a/core/vendor/masterminds/html5/.travis.yml b/core/vendor/masterminds/html5/.travis.yml index 5b31d71b1d97a54a4c0cce1f58a5a88125b8c5a8..2ccb5634b3ba3168c06e01853a1fcde0f644b4e4 100644 --- a/core/vendor/masterminds/html5/.travis.yml +++ b/core/vendor/masterminds/html5/.travis.yml @@ -12,13 +12,14 @@ php: - 5.5 - 5.6 - hhvm + - nightly notifications: irc: "irc.freenode.net#masterminds" before_script: - composer self-update - - composer install --dev + - composer install script: - mkdir -p build/logs diff --git a/core/vendor/masterminds/html5/CREDITS b/core/vendor/masterminds/html5/CREDITS index 59c87a2353873e0346afa4539306510572abaae6..c2dbc4b64a9cf7e6b6a4826b3a872c7ca1210152 100644 --- a/core/vendor/masterminds/html5/CREDITS +++ b/core/vendor/masterminds/html5/CREDITS @@ -7,5 +7,5 @@ Kukhar Vasily [ngreduce] <ngreduce@gmail.com> (contributor) Rune Christensen [MrElectronic] <mrelectronic@example.com> (contributor) Mišo Belica [miso-belica] <miso-belica@example.com> (contributor) Asmir Mustafic [goetas] <goetas@example.com> (contributor) -KITAITI Makoto [KitaitiMakoto] <KitaitiMakoto@example.com> (contributor) +KITAITI Makoto [KitaitiMakoto] <KitaitiMakoto@example.com> (contributor) Jacob Floyd [cognifloyd] <cognifloyd@gmail.com> (contributor) diff --git a/core/vendor/masterminds/html5/LICENSE.txt b/core/vendor/masterminds/html5/LICENSE.txt index 93d60ed43fe89c2faff5f2e9c155cce5a3b60208..3c275b54a75ea01f2bffafe0e24e1ecde80b5bf6 100644 --- a/core/vendor/masterminds/html5/LICENSE.txt +++ b/core/vendor/masterminds/html5/LICENSE.txt @@ -7,8 +7,8 @@ Matt Farina - matt@mattfarina.com Asmir Mustafic - goetas@gmail.com Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: @@ -49,8 +49,8 @@ The Mozilla Foundation (contributions from Henri Sivonen since 2008) David Flanagan (Mozilla) - dflanagan@mozilla.com Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/core/vendor/masterminds/html5/README.md b/core/vendor/masterminds/html5/README.md index db2abb702b3a3006019edecdd5d6f96ad0154984..bbe003f6e61e3d02784a21cb84e0dccca02834c2 100644 --- a/core/vendor/masterminds/html5/README.md +++ b/core/vendor/masterminds/html5/README.md @@ -36,7 +36,7 @@ install. ## Basic Usage -HTML5-PHP has a high-level API and a low-level API. +HTML5-PHP has a high-level API and a low-level API. Here is how you use the high-level `HTML5` library API: @@ -101,7 +101,7 @@ The following options are supported: * `disable_html_ns` (boolean): Prevents the parser from automatically assigning the HTML5 namespace to the DOM document. This is for non-namespace aware DOM tools. -* `target_doc` (\DOMDocument): A DOM document that will be used as the +* `target_document` (\DOMDocument): A DOM document that will be used as the destination for the parsed nodes. * `implicit_namespaces` (array): An assoc array of namespaces that should be used by the parser. Name is tag prefix, value is NS URI. @@ -144,14 +144,14 @@ The serializer is broken into three parts: - The `OutputRules` contain the rules to turn DOM elements into strings. The rules are an implementation of the interface `RulesInterface` allowing for -different rule sets to be used. +different rule sets to be used. - The `Traverser`, which is a special-purpose tree walker. It visits each node node in the tree and uses the `OutputRules` to transform the node into a string. - `HTML5` manages the `Traverser` and stores the resultant data in the correct place. -The serializer (`save()`, `saveHTML()`) follows the +The serializer (`save()`, `saveHTML()`) follows the [section 8.9 of the HTML 5.0 spec](http://www.w3.org/TR/2012/CR-html5-20121217/syntax.html#serializing-html-fragments). So tags are serialized according to these rules: @@ -166,8 +166,8 @@ issues known issues that are not presently on the roadmap: - Namespaces: HTML5 only [supports a selected list of namespaces](http://www.w3.org/TR/html5/infrastructure.html#namespaces) and they do not operate in the same way as XML namespaces. A `:` has no special - meaning. - By default the parser does not support XML style namespaces via `:`; + meaning. + By default the parser does not support XML style namespaces via `:`; to enable the XML namespaces see the [XML Namespaces section](#xml-namespaces) - Scripts: This parser does not contain a JavaScript or a CSS interpreter. While one may be supplied, not all features will be @@ -184,13 +184,13 @@ issues known issues that are not presently on the roadmap: * Per the spec, many legacy tags are admitted and correctly handled, even though they are technically not part of HTML5. - Attribute names and values: Due to the implementation details of the - PHP implementation of DOM, attribute names that do not follow the + PHP implementation of DOM, attribute names that do not follow the XML 1.0 standard are not inserted into the DOM. (Effectively, they are ignored.) If you've got a clever fix for this, jump in! - Processor Instructions: The HTML5 spec does not allow processor instructions. We do. Since this is a server-side library, we think this is useful. And that means, dear reader, that in some cases you - can parse the HTML from a mixed PHP/HTML document. This, however, + can parse the HTML from a mixed PHP/HTML document. This, however, is an incidental feature, not a core feature. - HTML manifests: Unsupported. - PLAINTEXT: Unsupported. diff --git a/core/vendor/masterminds/html5/RELEASE.md b/core/vendor/masterminds/html5/RELEASE.md index 36d16305821ed0c2209a2d7eea9a1bc4fdf21dbb..e3d70d386e93c909f4297fea199b44934d20b8ad 100644 --- a/core/vendor/masterminds/html5/RELEASE.md +++ b/core/vendor/masterminds/html5/RELEASE.md @@ -1,4 +1,10 @@ # Release Notes +2.1.2 (2015-06-07) +- #82: Support for PHP7 +- #84: Improved boolean attribute handling + +2.1.1 (2015-03-23) +- #78: Fixes bug where unmatched entity like string drops everything after &. 2.1.0 (2015-02-01) - #74: Added `disable_html_ns` and `target_doc` dom parsing options diff --git a/core/vendor/masterminds/html5/UPGRADING.md b/core/vendor/masterminds/html5/UPGRADING.md index e3e562d1c4bf00b43e20041aab7cd81e402d0bd0..76e3a19bc1d5ef4773c3ee8ee6b2dddf6e3d46c2 100644 --- a/core/vendor/masterminds/html5/UPGRADING.md +++ b/core/vendor/masterminds/html5/UPGRADING.md @@ -2,19 +2,19 @@ From 1.x to 2.x ================= - All classes uses `Masterminds` namespace. -- All public static methods has been removed from `HTML5` class and the general API to access the HTML5 functionalities has changed. +- All public static methods has been removed from `HTML5` class and the general API to access the HTML5 functionalities has changed. Before: - + $dom = \HTML5::loadHTML('<html>....'); \HTML5::saveHTML($dom); - + After: use Masterminds\HTML5; - + $html5 = new HTML5(); - + $dom = $html5->loadHTML('<html>....'); echo $html5->saveHTML($dom); diff --git a/core/vendor/masterminds/html5/phpunit.xml.dist b/core/vendor/masterminds/html5/phpunit.xml.dist index b42903a989d3a2613dfb49042e07d4bdb8991216..c34488018dde26132746a6604baadab44c4830aa 100644 --- a/core/vendor/masterminds/html5/phpunit.xml.dist +++ b/core/vendor/masterminds/html5/phpunit.xml.dist @@ -11,7 +11,7 @@ <file>src/HTML5/Parser/InputStream.php</file> <file>src/HTML5/Serializer/RulesInterface.php</file> <file>src/HTML5/Entities.php</file> - <file>src/HTML5/Serializer/HTML5Entities.php</file> + <file>src/HTML5/Serializer/HTML5Entities.php</file> </blacklist> </filter> <logging> diff --git a/core/vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php b/core/vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php index e00b9a2e2b6cc8100f614248812e84383e6afd0d..a779191a43dc4f6cb9e73dec0a903dc02b0991bd 100644 --- a/core/vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php +++ b/core/vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php @@ -1065,8 +1065,14 @@ protected function decodeCharacterReference($inAttribute = false) // [a-zA-Z0-9]+; $cname = $this->scanner->getAsciiAlpha(); $entity = CharacterReference::lookupName($cname); + + // When no entity is found provide the name of the unmatched string + // and continue on as the & is not part of an entity. The & will + // be converted to & elsewhere. if ($entity == null) { - $this->parseError("No match in entity table for '%s'", $entity); + $this->parseError("No match in entity table for '%s'", $cname); + $this->scanner->unconsume($this->scanner->position() - $start); + return '&'; } } diff --git a/core/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php b/core/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php index c009698d8e1046fcbbbd06db8961f425b92acd97..4ad74f6b5d8dfe7cd9fd7617fc4263a099fd3a3c 100644 --- a/core/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php +++ b/core/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php @@ -73,17 +73,86 @@ class OutputRules implements \Masterminds\HTML5\Serializer\RulesInterface 'nodeName'=>'img', 'nodeName'=>array('img', 'a'), 'attrName'=>'alt', 'attrName'=>array('title', 'alt'), - - - 'prefixes'=>['xh'=>'http://www.w3.org/1999/xhtml'), - 'xpath' => "@checked[../../xh:input[@type='radio' or @type='checkbox']]", ), */ array( - 'nodeNamespace'=>'http://www.w3.org/1999/xhtml', - 'attrName'=>array('alt', 'title'), + 'nodeNamespace' => 'http://www.w3.org/1999/xhtml', + 'attrName' => array('href', + 'hreflang', + 'http-equiv', + 'icon', + 'id', + 'keytype', + 'kind', + 'label', + 'lang', + 'language', + 'list', + 'maxlength', + 'media', + 'method', + 'name', + 'placeholder', + 'rel', + 'rows', + 'rowspan', + 'sandbox', + 'spellcheck', + 'scope', + 'seamless', + 'shape', + 'size', + 'sizes', + 'span', + 'src', + 'srcdoc', + 'srclang', + 'srcset', + 'start', + 'step', + 'style', + 'summary', + 'tabindex', + 'target', + 'title', + 'type', + 'value', + 'width', + 'border', + 'charset', + 'cite', + 'class', + 'code', + 'codebase', + 'color', + 'cols', + 'colspan', + 'content', + 'coords', + 'data', + 'datetime', + 'default', + 'dir', + 'dirname', + 'enctype', + 'for', + 'form', + 'formaction', + 'headers', + 'height', + 'accept', + 'accept-charset', + 'accesskey', + 'action', + 'align', + 'alt', + 'bgcolor', + ), + ), + array( + 'nodeNamespace' => 'http://www.w3.org/1999/xhtml', + 'xpath' => 'starts-with(local-name(), \'data-\')', ), - ); const DOCTYPE = '<!DOCTYPE html>'; @@ -328,7 +397,7 @@ protected function nonBooleanAttribute(\DOMAttr $attr) $xp->registerNamespace($nsPrefix, $ns); } } - if(!$xp->query($rule['xpath'], $attr->ownerElement)->length){ + if(!$xp->evaluate($rule['xpath'], $attr)){ continue; } } diff --git a/core/vendor/masterminds/html5/test/HTML5/Html5Test.php b/core/vendor/masterminds/html5/test/HTML5/Html5Test.php index a1a6c9cb6297e4678d90f96668281207f97b59c3..cce58b70bf0efec64b249b05a8eeab6c90fbf36b 100644 --- a/core/vendor/masterminds/html5/test/HTML5/Html5Test.php +++ b/core/vendor/masterminds/html5/test/HTML5/Html5Test.php @@ -376,6 +376,9 @@ public function testEntities() $res = $this->cycleFragment('<a>Apples & bananas.</a>'); $this->assertRegExp('|Apples & bananas.|', $res); + + $res = $this->cycleFragment('<p>R&D</p>'); + $this->assertRegExp('|R&D|', $res); } public function testComment() diff --git a/core/vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php b/core/vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php index 3c18039cacba425f3c85511026ff4cb69c25bb32..b2a2d398f5b9cf29d3de358b1d14c3cee3f44b76 100644 --- a/core/vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php +++ b/core/vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php @@ -100,7 +100,7 @@ public function testDocumentWithATargetDocument() $this->assertSame($doc, $targetDom); $this->assertEquals('html', $doc->documentElement->tagName); } - + public function testDocumentFakeAttrAbsence() { $html = "<!DOCTYPE html><html xmlns=\"http://www.w3.org/1999/xhtml\"><body>foo</body></html>"; diff --git a/core/vendor/masterminds/html5/test/HTML5/Parser/UTF8UtilsTest.php b/core/vendor/masterminds/html5/test/HTML5/Parser/UTF8UtilsTest.php new file mode 100644 index 0000000000000000000000000000000000000000..0e8555a9cc6c65068f91da6939d28c965397d3d1 --- /dev/null +++ b/core/vendor/masterminds/html5/test/HTML5/Parser/UTF8UtilsTest.php @@ -0,0 +1,26 @@ +<?php + +namespace Masterminds\HTML5\Tests\Parser; + +use Masterminds\HTML5\Parser\UTF8Utils; + +class UTF8UtilsTest extends \Masterminds\HTML5\Tests\TestCase +{ + public function testConvertToUTF8() { + $out = UTF8Utils::convertToUTF8('éà a', 'ISO-8859-1'); + $this->assertEquals('éàa', $out); + } + + /** + * @todo add tests for invalid codepoints + */ + public function testCheckForIllegalCodepoints() { + $smoke = "Smoke test"; + $err = UTF8Utils::checkForIllegalCodepoints($smoke); + $this->assertEmpty($err); + + $data = "Foo Bar \0 Baz"; + $errors = UTF8Utils::checkForIllegalCodepoints($data); + $this->assertContains('null-character', $errors); + } +} \ No newline at end of file diff --git a/core/vendor/masterminds/html5/test/HTML5/Serializer/OutputRulesTest.php b/core/vendor/masterminds/html5/test/HTML5/Serializer/OutputRulesTest.php index aa2e0c539cd95392269d037dfc4ef79e3eb6fd5d..72d1cd371305c50f16f58749fd6fa8d9c2d6373c 100644 --- a/core/vendor/masterminds/html5/test/HTML5/Serializer/OutputRulesTest.php +++ b/core/vendor/masterminds/html5/test/HTML5/Serializer/OutputRulesTest.php @@ -460,8 +460,10 @@ public function booleanAttributes() array('<input type="radio" readonly>'), array('<input type="radio" checked disabled>'), array('<input type="checkbox" checked disabled>'), + array('<input type="radio" value="" checked disabled>'), + array('<div data-value=""></div>'), array('<select disabled></select>'), - array('<div ng-app>foo</div>'), + array('<div ng-app></div>'), array('<script defer></script>'), ); } @@ -482,7 +484,11 @@ public function testBooleanAttrs($html) $m->invoke($r, $node); $content = stream_get_contents($stream, - 1, 0); - $this->assertContains($content, $html); + + $html = preg_replace('~<[a-z]+(.*)></[a-z]+>~', '\1', $html); + $html = preg_replace('~<[a-z]+(.*)/?>~', '\1', $html); + + $this->assertEquals($content, $html); }