| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- <?php
- namespace Cake\Test\Fixture;
- use Cake\TestSuite\TestCase;
- use PHPUnit\Framework\ExpectationFailedException;
- /**
- * This class helps in indirectly testing the functionality of TestCase::assertHtml
- */
- class AssertHtmlTest extends TestCase
- {
- /**
- * Test whitespace after HTML tags
- *
- * @return
- */
- public function testAssertHtmlWhitespaceAfter()
- {
- $input = <<<HTML
- <div class="wrapper">
- <h4 class="widget-title">Popular tags
- <i class="i-icon"></i>
- </h4>
- </div>
- HTML;
- $pattern = [
- 'div' => ['class' => 'wrapper'],
- 'h4' => ['class' => 'widget-title'], 'Popular tags',
- 'i' => ['class' => 'i-icon'], '/i',
- '/h4',
- '/div',
- ];
- $this->assertHtml($pattern, $input);
- }
- /**
- * Test whitespace inside HTML tags
- *
- * @return void
- */
- public function testAssertHtmlInnerWhitespace()
- {
- $input = <<<HTML
- <div class="widget">
- <div class="widget-content">
- A custom widget
- </div>
- </div>
- HTML;
- $expected = [
- ['div' => ['class' => 'widget']],
- ['div' => ['class' => 'widget-content']],
- 'A custom widget',
- '/div',
- '/div',
- ];
- $this->assertHtml($expected, $input);
- }
- /**
- * test assertHtml works with single and double quotes
- *
- * @return void
- */
- public function testAssertHtmlQuoting()
- {
- $input = '<a href="/test.html" class="active">My link</a>';
- $pattern = [
- 'a' => ['href' => '/test.html', 'class' => 'active'],
- 'My link',
- '/a',
- ];
- $this->assertHtml($pattern, $input);
- $input = "<a href='/test.html' class='active'>My link</a>";
- $pattern = [
- 'a' => ['href' => '/test.html', 'class' => 'active'],
- 'My link',
- '/a',
- ];
- $this->assertHtml($pattern, $input);
- $input = "<a href='/test.html' class='active'>My link</a>";
- $pattern = [
- 'a' => ['href' => 'preg:/.*\.html/', 'class' => 'active'],
- 'My link',
- '/a',
- ];
- $this->assertHtml($pattern, $input);
- $input = '<span><strong>Text</strong></span>';
- $pattern = [
- '<span',
- '<strong',
- 'Text',
- '/strong',
- '/span',
- ];
- $this->assertHtml($pattern, $input);
- $input = "<span class='active'><strong>Text</strong></span>";
- $pattern = [
- 'span' => ['class'],
- '<strong',
- 'Text',
- '/strong',
- '/span',
- ];
- $this->assertHtml($pattern, $input);
- }
- /**
- * Test that assertHtml runs quickly.
- *
- * @return void
- */
- public function testAssertHtmlRuntimeComplexity()
- {
- $pattern = [
- 'div' => [
- 'attr1' => 'val1',
- 'attr2' => 'val2',
- 'attr3' => 'val3',
- 'attr4' => 'val4',
- 'attr5' => 'val5',
- 'attr6' => 'val6',
- 'attr7' => 'val7',
- 'attr8' => 'val8',
- ],
- 'My div',
- '/div',
- ];
- $input = '<div attr8="val8" attr6="val6" attr4="val4" attr2="val2"' .
- ' attr1="val1" attr3="val3" attr5="val5" attr7="val7" />' .
- 'My div' .
- '</div>';
- $this->assertHtml($pattern, $input);
- }
- /**
- * test that assertHtml knows how to handle correct quoting.
- *
- * @return void
- */
- public function testAssertHtmlQuotes()
- {
- $input = '<a href="/test.html" class="active">My link</a>';
- $pattern = [
- 'a' => ['href' => '/test.html', 'class' => 'active'],
- 'My link',
- '/a',
- ];
- $this->assertHtml($pattern, $input);
- $input = "<a href='/test.html' class='active'>My link</a>";
- $pattern = [
- 'a' => ['href' => '/test.html', 'class' => 'active'],
- 'My link',
- '/a',
- ];
- $this->assertHtml($pattern, $input);
- $input = "<a href='/test.html' class='active'>My link</a>";
- $pattern = [
- 'a' => ['href' => 'preg:/.*\.html/', 'class' => 'active'],
- 'My link',
- '/a',
- ];
- $this->assertHtml($pattern, $input);
- }
- /**
- * testNumericValuesInExpectationForAssertHtml
- *
- * @return void
- */
- public function testNumericValuesInExpectationForAssertHtml()
- {
- $value = 220985;
- $input = '<p><strong>' . $value . '</strong></p>';
- $pattern = [
- '<p',
- '<strong',
- $value,
- '/strong',
- '/p',
- ];
- $this->assertHtml($pattern, $input);
- $input = '<p><strong>' . $value . '</strong></p><p><strong>' . $value . '</strong></p>';
- $pattern = [
- '<p',
- '<strong',
- $value,
- '/strong',
- '/p',
- '<p',
- '<strong',
- $value,
- '/strong',
- '/p',
- ];
- $this->assertHtml($pattern, $input);
- $input = '<p><strong>' . $value . '</strong></p><p id="' . $value . '"><strong>' . $value . '</strong></p>';
- $pattern = [
- '<p',
- '<strong',
- $value,
- '/strong',
- '/p',
- 'p' => ['id' => $value],
- '<strong',
- $value,
- '/strong',
- '/p',
- ];
- $this->assertHtml($pattern, $input);
- }
- /**
- * test assertions fail when attributes are wrong.
- *
- * @return void
- */
- public function testBadAssertHtmlInvalidAttribute()
- {
- $input = '<a href="/test.html" class="active">My link</a>';
- $pattern = [
- 'a' => ['hRef' => '/test.html', 'clAss' => 'active'],
- 'My link2',
- '/a',
- ];
- try {
- $this->assertHtml($pattern, $input);
- $this->fail('Assertion should fail');
- } catch (ExpectationFailedException $e) {
- $this->assertContains(
- 'Attribute did not match. Was expecting Attribute "clAss" == "active"',
- $e->getMessage()
- );
- }
- }
- /**
- * test assertion failure on incomplete HTML
- *
- * @return void
- */
- public function testBadAssertHtmlMissingTags()
- {
- $input = '<a href="/test.html" class="active">My link</a>';
- $pattern = [
- '<a' => ['href' => '/test.html', 'class' => 'active'],
- 'My link',
- '/a',
- ];
- try {
- $this->assertHtml($pattern, $input);
- } catch (ExpectationFailedException $e) {
- $this->assertContains(
- 'Item #1 / regex #0 failed: Open <a tag',
- $e->getMessage()
- );
- }
- }
- }
|