
| Current Path : /var/www/html/german-vocational.cn/core/modules/text/tests/src/Kernel/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/html/german-vocational.cn/core/modules/text/tests/src/Kernel/TextSummaryTest.php |
<?php
namespace Drupal\Tests\text\Kernel;
use Drupal\KernelTests\KernelTestBase;
use Drupal\filter\Entity\FilterFormat;
/**
* Tests text_summary() with different strings and lengths.
*
* @group text
*/
class TextSummaryTest extends KernelTestBase {
public static $modules = ['system', 'user', 'filter', 'text'];
protected function setUp() {
parent::setUp();
$this->installConfig(['text']);
}
/**
* Tests an edge case where the first sentence is a question and
* subsequent sentences are not. This edge case is documented at
* https://www.drupal.org/node/180425.
*/
public function testFirstSentenceQuestion() {
$text = 'A question? A sentence. Another sentence.';
$expected = 'A question? A sentence.';
$this->assertTextSummary($text, $expected, NULL, 30);
}
/**
* Test summary with long example.
*/
public function testLongSentence() {
// 125.
$text =
'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ' .
// 108.
'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. ' .
// 103.
'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. ' .
// 110.
'Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.';
$expected = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ' .
'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. ' .
'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.';
// First three sentences add up to: 336, so add one for space and then 3 to get half-way into next word.
$this->assertTextSummary($text, $expected, NULL, 340);
}
/**
* Test various summary length edge cases.
*/
public function testLength() {
FilterFormat::create([
'format' => 'autop',
'filters' => [
'filter_autop' => [
'status' => 1,
],
],
])->save();
FilterFormat::create([
'format' => 'autop_correct',
'filters' => [
'filter_autop' => [
'status' => 1,
],
'filter_htmlcorrector' => [
'status' => 1,
],
],
])->save();
// This string tests a number of edge cases.
$text = "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>";
// The summaries we expect text_summary() to return when $size is the index
// of each array item.
// Using no text format:
$format = NULL;
$i = 0;
$this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
$this->assertTextSummary($text, "<", $format, $i++);
$this->assertTextSummary($text, "<p", $format, $i++);
$this->assertTextSummary($text, "<p>", $format, $i++);
$this->assertTextSummary($text, "<p>\n", $format, $i++);
$this->assertTextSummary($text, "<p>\nH", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n<", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
// Using a text format with filter_autop enabled.
$format = 'autop';
$i = 0;
$this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
$this->assertTextSummary($text, "<", $format, $i++);
$this->assertTextSummary($text, "<p", $format, $i++);
$this->assertTextSummary($text, "<p>", $format, $i++);
$this->assertTextSummary($text, "<p>", $format, $i++);
$this->assertTextSummary($text, "<p>", $format, $i++);
$this->assertTextSummary($text, "<p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
// Using a text format with filter_autop and filter_htmlcorrector enabled.
$format = 'autop_correct';
$i = 0;
$this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
$this->assertTextSummary($text, "", $format, $i++);
$this->assertTextSummary($text, "<p></p>", $format, $i++);
$this->assertTextSummary($text, "<p></p>", $format, $i++);
$this->assertTextSummary($text, "<p></p>", $format, $i++);
$this->assertTextSummary($text, "<p></p>", $format, $i++);
$this->assertTextSummary($text, "<p></p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
$this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
}
/**
* Test text_summary() returns an empty string without any error when called
* with an invalid format.
*/
public function testInvalidFilterFormat() {
$this->assertTextSummary($this->randomString(100), '', 'non_existent_format');
}
/**
* Calls text_summary() and asserts that the expected teaser is returned.
*/
public function assertTextSummary($text, $expected, $format = NULL, $size = NULL) {
$summary = text_summary($text, $format, $size);
$this->assertIdentical($summary, $expected, format_string('<pre style="white-space: pre-wrap">@actual</pre> is identical to <pre style="white-space: pre-wrap">@expected</pre>', [
'@actual' => $summary,
'@expected' => $expected,
]));
}
}