Loading core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php +0 −153 Original line number Diff line number Diff line Loading @@ -5,7 +5,6 @@ use Behat\Mink\Exception\ElementNotFoundException; use Behat\Mink\Exception\ExpectationException; use Drupal\Component\Serialization\Json; use Drupal\Component\Utility\Html; use Drupal\Core\Url; use Drupal\Tests\BrowserTestBase; use Drupal\Tests\StreamCapturer; Loading Loading @@ -193,81 +192,6 @@ public function testError() { $this->drupalGet('test-error'); } /** * Tests linkExists() with pipe character (|) in locator. * * @see \Drupal\Tests\WebAssert::linkExists() */ public function testPipeCharInLocator() { $this->drupalGet('test-pipe-char'); $this->assertSession()->linkExists('foo|bar|baz'); } /** * Tests linkExistsExact() functionality. * * @see \Drupal\Tests\WebAssert::linkExistsExact() */ public function testLinkExistsExact() { $this->drupalGet('test-pipe-char'); $this->assertSession()->linkExistsExact('foo|bar|baz'); } /** * Tests linkExistsExact() functionality fail. * * @see \Drupal\Tests\WebAssert::linkExistsExact() */ public function testInvalidLinkExistsExact() { $this->drupalGet('test-pipe-char'); $this->expectException(ExpectationException::class); $this->expectExceptionMessage('Link with label foo|bar not found'); $this->assertSession()->linkExistsExact('foo|bar'); } /** * Tests linkNotExistsExact() functionality. * * @see \Drupal\Tests\WebAssert::linkNotExistsExact() */ public function testLinkNotExistsExact() { $this->drupalGet('test-pipe-char'); $this->assertSession()->linkNotExistsExact('foo|bar'); } /** * Tests responseHeaderDoesNotExist() functionality. * * @see \Drupal\Tests\WebAssert::responseHeaderDoesNotExist() */ public function testResponseHeaderDoesNotExist() { $this->drupalGet('test-pipe-char'); $this->assertSession()->responseHeaderDoesNotExist('Foo-Bar'); } /** * Tests linkNotExistsExact() functionality fail. * * @see \Drupal\Tests\WebAssert::linkNotExistsExact() */ public function testInvalidLinkNotExistsExact() { $this->drupalGet('test-pipe-char'); $this->expectException(ExpectationException::class); $this->expectExceptionMessage('Link with label foo|bar|baz found'); $this->assertSession()->linkNotExistsExact('foo|bar|baz'); } /** * Tests legacy text asserts. */ public function testTextAsserts() { $this->drupalGet('test-encoded'); $dangerous = 'Bad html <script>alert(123);</script>'; $sanitized = Html::escape($dangerous); $this->assertSession()->responseNotContains($dangerous); $this->assertSession()->responseContains($sanitized); } /** * Tests legacy field asserts which use xpath directly. */ Loading Loading @@ -410,41 +334,6 @@ public function testFieldAssertsForTextfields() { $this->assertSession()->fieldValueEquals('edit-test-textarea-with-newline', "Test text with\nnewline"); } /** * Tests legacy field asserts for button field type. */ public function testFieldAssertsForButton() { $this->drupalGet('test-field-xpath'); // Verify if the test passes with button ID. $this->assertSession()->buttonExists('edit-save'); // Verify if the test passes with button Value. $this->assertSession()->buttonExists('Save'); // Verify if the test passes with button Name. $this->assertSession()->buttonExists('op'); // Verify if the test passes with button ID. $this->assertSession()->buttonNotExists('i-do-not-exist'); // Verify if the test passes with button Value. $this->assertSession()->buttonNotExists('I do not exist'); // Verify if the test passes with button Name. $this->assertSession()->buttonNotExists('no'); // Test that multiple fields with the same name are validated correctly. $this->assertSession()->buttonExists('duplicate_button'); $this->assertSession()->buttonExists('Duplicate button 1'); $this->assertSession()->buttonExists('Duplicate button 2'); $this->assertSession()->buttonNotExists('Rabbit'); try { $this->assertSession()->buttonNotExists('Duplicate button 2'); $this->fail('The "duplicate_button" field with the value Duplicate button 2 was not found.'); } catch (ExpectationException $e) { // Expected exception; just continue testing. } } /** * Tests legacy field asserts for checkbox field type. */ Loading Loading @@ -631,48 +520,6 @@ public function testHtkey() { $this->assertSession()->statusCodeEquals(403); } /** * Tests pageContainsNoDuplicateId() functionality. * * @see \Drupal\Tests\WebAssert::pageContainsNoDuplicateId() */ public function testPageContainsNoDuplicateId() { $assert_session = $this->assertSession(); $this->drupalGet(Url::fromRoute('test_page_test.page_without_duplicate_ids')); $assert_session->pageContainsNoDuplicateId(); $this->drupalGet(Url::fromRoute('test_page_test.page_with_duplicate_ids')); $this->expectException(ExpectationException::class); $this->expectExceptionMessage('The page contains a duplicate HTML ID "page-element".'); $assert_session->pageContainsNoDuplicateId(); } /** * Tests assertEscaped() and assertUnescaped(). * * @see \Drupal\Tests\WebAssert::assertNoEscaped() * @see \Drupal\Tests\WebAssert::assertEscaped() */ public function testEscapingAssertions() { $assert = $this->assertSession(); $this->drupalGet('test-escaped-characters'); $assert->assertNoEscaped('<div class="escaped">'); $assert->responseContains('<div class="escaped">'); $assert->assertEscaped('Escaped: <"\'&>'); $this->drupalGet('test-escaped-script'); $assert->assertNoEscaped('<div class="escaped">'); $assert->responseContains('<div class="escaped">'); $assert->assertEscaped("<script>alert('XSS');alert(\"XSS\");</script>"); $this->drupalGet('test-unescaped-script'); $assert->assertNoEscaped('<div class="unescaped">'); $assert->responseContains('<div class="unescaped">'); $assert->responseContains("<script>alert('Marked safe');alert(\"Marked safe\");</script>"); $assert->assertNoEscaped("<script>alert('Marked safe');alert(\"Marked safe\");</script>"); } /** * Tests that deprecation headers do not get duplicated. * Loading core/tests/Drupal/FunctionalTests/WebAssertTest.php +149 −0 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ namespace Drupal\FunctionalTests; use Behat\Mink\Exception\ExpectationException; use Drupal\Component\Utility\Html; use Drupal\Core\Url; use Drupal\Tests\BrowserTestBase; use Behat\Mink\Exception\ResponseTextException; Loading Loading @@ -133,4 +134,152 @@ public function testAddressNotEqualsException(): void { $this->assertSession()->addressNotEquals('test-page?a=b&c=d'); } /** * Tests linkExists() with pipe character (|) in locator. * * @covers ::linkExists */ public function testPipeCharInLocator() { $this->drupalGet('test-pipe-char'); $this->assertSession()->linkExists('foo|bar|baz'); } /** * Tests linkExistsExact() functionality. * * @covers ::linkExistsExact */ public function testLinkExistsExact() { $this->drupalGet('test-pipe-char'); $this->assertSession()->linkExistsExact('foo|bar|baz'); } /** * Tests linkExistsExact() functionality fail. * * @covers ::linkExistsExact */ public function testInvalidLinkExistsExact() { $this->drupalGet('test-pipe-char'); $this->expectException(ExpectationException::class); $this->expectExceptionMessage('Link with label foo|bar not found'); $this->assertSession()->linkExistsExact('foo|bar'); } /** * Tests linkNotExistsExact() functionality. * * @covers ::linkNotExistsExact */ public function testLinkNotExistsExact() { $this->drupalGet('test-pipe-char'); $this->assertSession()->linkNotExistsExact('foo|bar'); } /** * Tests linkNotExistsExact() functionality fail. * * @covers ::linkNotExistsExact */ public function testInvalidLinkNotExistsExact() { $this->drupalGet('test-pipe-char'); $this->expectException(ExpectationException::class); $this->expectExceptionMessage('Link with label foo|bar|baz found'); $this->assertSession()->linkNotExistsExact('foo|bar|baz'); } /** * Tests legacy text asserts. * * @covers ::responseContains * @covers ::responseNotContains */ public function testTextAsserts() { $this->drupalGet('test-encoded'); $dangerous = 'Bad html <script>alert(123);</script>'; $sanitized = Html::escape($dangerous); $this->assertSession()->responseNotContains($dangerous); $this->assertSession()->responseContains($sanitized); } /** * Tests legacy field asserts for button field type. * * @covers ::buttonExists * @covers ::buttonNotExists */ public function testFieldAssertsForButton() { $this->drupalGet('test-field-xpath'); // Verify if the test passes with button ID. $this->assertSession()->buttonExists('edit-save'); // Verify if the test passes with button Value. $this->assertSession()->buttonExists('Save'); // Verify if the test passes with button Name. $this->assertSession()->buttonExists('op'); // Verify if the test passes with button ID. $this->assertSession()->buttonNotExists('i-do-not-exist'); // Verify if the test passes with button Value. $this->assertSession()->buttonNotExists('I do not exist'); // Verify if the test passes with button Name. $this->assertSession()->buttonNotExists('no'); // Test that multiple fields with the same name are validated correctly. $this->assertSession()->buttonExists('duplicate_button'); $this->assertSession()->buttonExists('Duplicate button 1'); $this->assertSession()->buttonExists('Duplicate button 2'); $this->assertSession()->buttonNotExists('Rabbit'); try { $this->assertSession()->buttonNotExists('Duplicate button 2'); $this->fail('The "duplicate_button" field with the value Duplicate button 2 was not found.'); } catch (ExpectationException $e) { // Expected exception; just continue testing. } } /** * Tests pageContainsNoDuplicateId() functionality. * * @covers ::pageContainsNoDuplicateId */ public function testPageContainsNoDuplicateId() { $assert_session = $this->assertSession(); $this->drupalGet(Url::fromRoute('test_page_test.page_without_duplicate_ids')); $assert_session->pageContainsNoDuplicateId(); $this->drupalGet(Url::fromRoute('test_page_test.page_with_duplicate_ids')); $this->expectException(ExpectationException::class); $this->expectExceptionMessage('The page contains a duplicate HTML ID "page-element".'); $assert_session->pageContainsNoDuplicateId(); } /** * Tests assertEscaped() and assertUnescaped(). * * @covers ::assertNoEscaped * @covers ::assertEscaped */ public function testEscapingAssertions() { $assert = $this->assertSession(); $this->drupalGet('test-escaped-characters'); $assert->assertNoEscaped('<div class="escaped">'); $assert->responseContains('<div class="escaped">'); $assert->assertEscaped('Escaped: <"\'&>'); $this->drupalGet('test-escaped-script'); $assert->assertNoEscaped('<div class="escaped">'); $assert->responseContains('<div class="escaped">'); $assert->assertEscaped("<script>alert('XSS');alert(\"XSS\");</script>"); $this->drupalGet('test-unescaped-script'); $assert->assertNoEscaped('<div class="unescaped">'); $assert->responseContains('<div class="unescaped">'); $assert->responseContains("<script>alert('Marked safe');alert(\"Marked safe\");</script>"); $assert->assertNoEscaped("<script>alert('Marked safe');alert(\"Marked safe\");</script>"); } } Loading
core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php +0 −153 Original line number Diff line number Diff line Loading @@ -5,7 +5,6 @@ use Behat\Mink\Exception\ElementNotFoundException; use Behat\Mink\Exception\ExpectationException; use Drupal\Component\Serialization\Json; use Drupal\Component\Utility\Html; use Drupal\Core\Url; use Drupal\Tests\BrowserTestBase; use Drupal\Tests\StreamCapturer; Loading Loading @@ -193,81 +192,6 @@ public function testError() { $this->drupalGet('test-error'); } /** * Tests linkExists() with pipe character (|) in locator. * * @see \Drupal\Tests\WebAssert::linkExists() */ public function testPipeCharInLocator() { $this->drupalGet('test-pipe-char'); $this->assertSession()->linkExists('foo|bar|baz'); } /** * Tests linkExistsExact() functionality. * * @see \Drupal\Tests\WebAssert::linkExistsExact() */ public function testLinkExistsExact() { $this->drupalGet('test-pipe-char'); $this->assertSession()->linkExistsExact('foo|bar|baz'); } /** * Tests linkExistsExact() functionality fail. * * @see \Drupal\Tests\WebAssert::linkExistsExact() */ public function testInvalidLinkExistsExact() { $this->drupalGet('test-pipe-char'); $this->expectException(ExpectationException::class); $this->expectExceptionMessage('Link with label foo|bar not found'); $this->assertSession()->linkExistsExact('foo|bar'); } /** * Tests linkNotExistsExact() functionality. * * @see \Drupal\Tests\WebAssert::linkNotExistsExact() */ public function testLinkNotExistsExact() { $this->drupalGet('test-pipe-char'); $this->assertSession()->linkNotExistsExact('foo|bar'); } /** * Tests responseHeaderDoesNotExist() functionality. * * @see \Drupal\Tests\WebAssert::responseHeaderDoesNotExist() */ public function testResponseHeaderDoesNotExist() { $this->drupalGet('test-pipe-char'); $this->assertSession()->responseHeaderDoesNotExist('Foo-Bar'); } /** * Tests linkNotExistsExact() functionality fail. * * @see \Drupal\Tests\WebAssert::linkNotExistsExact() */ public function testInvalidLinkNotExistsExact() { $this->drupalGet('test-pipe-char'); $this->expectException(ExpectationException::class); $this->expectExceptionMessage('Link with label foo|bar|baz found'); $this->assertSession()->linkNotExistsExact('foo|bar|baz'); } /** * Tests legacy text asserts. */ public function testTextAsserts() { $this->drupalGet('test-encoded'); $dangerous = 'Bad html <script>alert(123);</script>'; $sanitized = Html::escape($dangerous); $this->assertSession()->responseNotContains($dangerous); $this->assertSession()->responseContains($sanitized); } /** * Tests legacy field asserts which use xpath directly. */ Loading Loading @@ -410,41 +334,6 @@ public function testFieldAssertsForTextfields() { $this->assertSession()->fieldValueEquals('edit-test-textarea-with-newline', "Test text with\nnewline"); } /** * Tests legacy field asserts for button field type. */ public function testFieldAssertsForButton() { $this->drupalGet('test-field-xpath'); // Verify if the test passes with button ID. $this->assertSession()->buttonExists('edit-save'); // Verify if the test passes with button Value. $this->assertSession()->buttonExists('Save'); // Verify if the test passes with button Name. $this->assertSession()->buttonExists('op'); // Verify if the test passes with button ID. $this->assertSession()->buttonNotExists('i-do-not-exist'); // Verify if the test passes with button Value. $this->assertSession()->buttonNotExists('I do not exist'); // Verify if the test passes with button Name. $this->assertSession()->buttonNotExists('no'); // Test that multiple fields with the same name are validated correctly. $this->assertSession()->buttonExists('duplicate_button'); $this->assertSession()->buttonExists('Duplicate button 1'); $this->assertSession()->buttonExists('Duplicate button 2'); $this->assertSession()->buttonNotExists('Rabbit'); try { $this->assertSession()->buttonNotExists('Duplicate button 2'); $this->fail('The "duplicate_button" field with the value Duplicate button 2 was not found.'); } catch (ExpectationException $e) { // Expected exception; just continue testing. } } /** * Tests legacy field asserts for checkbox field type. */ Loading Loading @@ -631,48 +520,6 @@ public function testHtkey() { $this->assertSession()->statusCodeEquals(403); } /** * Tests pageContainsNoDuplicateId() functionality. * * @see \Drupal\Tests\WebAssert::pageContainsNoDuplicateId() */ public function testPageContainsNoDuplicateId() { $assert_session = $this->assertSession(); $this->drupalGet(Url::fromRoute('test_page_test.page_without_duplicate_ids')); $assert_session->pageContainsNoDuplicateId(); $this->drupalGet(Url::fromRoute('test_page_test.page_with_duplicate_ids')); $this->expectException(ExpectationException::class); $this->expectExceptionMessage('The page contains a duplicate HTML ID "page-element".'); $assert_session->pageContainsNoDuplicateId(); } /** * Tests assertEscaped() and assertUnescaped(). * * @see \Drupal\Tests\WebAssert::assertNoEscaped() * @see \Drupal\Tests\WebAssert::assertEscaped() */ public function testEscapingAssertions() { $assert = $this->assertSession(); $this->drupalGet('test-escaped-characters'); $assert->assertNoEscaped('<div class="escaped">'); $assert->responseContains('<div class="escaped">'); $assert->assertEscaped('Escaped: <"\'&>'); $this->drupalGet('test-escaped-script'); $assert->assertNoEscaped('<div class="escaped">'); $assert->responseContains('<div class="escaped">'); $assert->assertEscaped("<script>alert('XSS');alert(\"XSS\");</script>"); $this->drupalGet('test-unescaped-script'); $assert->assertNoEscaped('<div class="unescaped">'); $assert->responseContains('<div class="unescaped">'); $assert->responseContains("<script>alert('Marked safe');alert(\"Marked safe\");</script>"); $assert->assertNoEscaped("<script>alert('Marked safe');alert(\"Marked safe\");</script>"); } /** * Tests that deprecation headers do not get duplicated. * Loading
core/tests/Drupal/FunctionalTests/WebAssertTest.php +149 −0 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ namespace Drupal\FunctionalTests; use Behat\Mink\Exception\ExpectationException; use Drupal\Component\Utility\Html; use Drupal\Core\Url; use Drupal\Tests\BrowserTestBase; use Behat\Mink\Exception\ResponseTextException; Loading Loading @@ -133,4 +134,152 @@ public function testAddressNotEqualsException(): void { $this->assertSession()->addressNotEquals('test-page?a=b&c=d'); } /** * Tests linkExists() with pipe character (|) in locator. * * @covers ::linkExists */ public function testPipeCharInLocator() { $this->drupalGet('test-pipe-char'); $this->assertSession()->linkExists('foo|bar|baz'); } /** * Tests linkExistsExact() functionality. * * @covers ::linkExistsExact */ public function testLinkExistsExact() { $this->drupalGet('test-pipe-char'); $this->assertSession()->linkExistsExact('foo|bar|baz'); } /** * Tests linkExistsExact() functionality fail. * * @covers ::linkExistsExact */ public function testInvalidLinkExistsExact() { $this->drupalGet('test-pipe-char'); $this->expectException(ExpectationException::class); $this->expectExceptionMessage('Link with label foo|bar not found'); $this->assertSession()->linkExistsExact('foo|bar'); } /** * Tests linkNotExistsExact() functionality. * * @covers ::linkNotExistsExact */ public function testLinkNotExistsExact() { $this->drupalGet('test-pipe-char'); $this->assertSession()->linkNotExistsExact('foo|bar'); } /** * Tests linkNotExistsExact() functionality fail. * * @covers ::linkNotExistsExact */ public function testInvalidLinkNotExistsExact() { $this->drupalGet('test-pipe-char'); $this->expectException(ExpectationException::class); $this->expectExceptionMessage('Link with label foo|bar|baz found'); $this->assertSession()->linkNotExistsExact('foo|bar|baz'); } /** * Tests legacy text asserts. * * @covers ::responseContains * @covers ::responseNotContains */ public function testTextAsserts() { $this->drupalGet('test-encoded'); $dangerous = 'Bad html <script>alert(123);</script>'; $sanitized = Html::escape($dangerous); $this->assertSession()->responseNotContains($dangerous); $this->assertSession()->responseContains($sanitized); } /** * Tests legacy field asserts for button field type. * * @covers ::buttonExists * @covers ::buttonNotExists */ public function testFieldAssertsForButton() { $this->drupalGet('test-field-xpath'); // Verify if the test passes with button ID. $this->assertSession()->buttonExists('edit-save'); // Verify if the test passes with button Value. $this->assertSession()->buttonExists('Save'); // Verify if the test passes with button Name. $this->assertSession()->buttonExists('op'); // Verify if the test passes with button ID. $this->assertSession()->buttonNotExists('i-do-not-exist'); // Verify if the test passes with button Value. $this->assertSession()->buttonNotExists('I do not exist'); // Verify if the test passes with button Name. $this->assertSession()->buttonNotExists('no'); // Test that multiple fields with the same name are validated correctly. $this->assertSession()->buttonExists('duplicate_button'); $this->assertSession()->buttonExists('Duplicate button 1'); $this->assertSession()->buttonExists('Duplicate button 2'); $this->assertSession()->buttonNotExists('Rabbit'); try { $this->assertSession()->buttonNotExists('Duplicate button 2'); $this->fail('The "duplicate_button" field with the value Duplicate button 2 was not found.'); } catch (ExpectationException $e) { // Expected exception; just continue testing. } } /** * Tests pageContainsNoDuplicateId() functionality. * * @covers ::pageContainsNoDuplicateId */ public function testPageContainsNoDuplicateId() { $assert_session = $this->assertSession(); $this->drupalGet(Url::fromRoute('test_page_test.page_without_duplicate_ids')); $assert_session->pageContainsNoDuplicateId(); $this->drupalGet(Url::fromRoute('test_page_test.page_with_duplicate_ids')); $this->expectException(ExpectationException::class); $this->expectExceptionMessage('The page contains a duplicate HTML ID "page-element".'); $assert_session->pageContainsNoDuplicateId(); } /** * Tests assertEscaped() and assertUnescaped(). * * @covers ::assertNoEscaped * @covers ::assertEscaped */ public function testEscapingAssertions() { $assert = $this->assertSession(); $this->drupalGet('test-escaped-characters'); $assert->assertNoEscaped('<div class="escaped">'); $assert->responseContains('<div class="escaped">'); $assert->assertEscaped('Escaped: <"\'&>'); $this->drupalGet('test-escaped-script'); $assert->assertNoEscaped('<div class="escaped">'); $assert->responseContains('<div class="escaped">'); $assert->assertEscaped("<script>alert('XSS');alert(\"XSS\");</script>"); $this->drupalGet('test-unescaped-script'); $assert->assertNoEscaped('<div class="unescaped">'); $assert->responseContains('<div class="unescaped">'); $assert->responseContains("<script>alert('Marked safe');alert(\"Marked safe\");</script>"); $assert->assertNoEscaped("<script>alert('Marked safe');alert(\"Marked safe\");</script>"); } }