annotate core/modules/text/tests/src/Kernel/TextSummaryTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 1fec387a4317
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Tests\text\Kernel;
Chris@0 4
Chris@0 5 use Drupal\KernelTests\KernelTestBase;
Chris@0 6 use Drupal\filter\Entity\FilterFormat;
Chris@0 7
Chris@0 8 /**
Chris@0 9 * Tests text_summary() with different strings and lengths.
Chris@0 10 *
Chris@0 11 * @group text
Chris@0 12 */
Chris@0 13 class TextSummaryTest extends KernelTestBase {
Chris@0 14
Chris@0 15 public static $modules = ['system', 'user', 'filter', 'text'];
Chris@0 16
Chris@0 17 protected function setUp() {
Chris@0 18 parent::setUp();
Chris@0 19
Chris@0 20 $this->installConfig(['text']);
Chris@0 21 }
Chris@0 22
Chris@0 23 /**
Chris@0 24 * Tests an edge case where the first sentence is a question and
Chris@0 25 * subsequent sentences are not. This edge case is documented at
Chris@0 26 * https://www.drupal.org/node/180425.
Chris@0 27 */
Chris@0 28 public function testFirstSentenceQuestion() {
Chris@0 29 $text = 'A question? A sentence. Another sentence.';
Chris@0 30 $expected = 'A question? A sentence.';
Chris@0 31 $this->assertTextSummary($text, $expected, NULL, 30);
Chris@0 32 }
Chris@0 33
Chris@0 34 /**
Chris@0 35 * Test summary with long example.
Chris@0 36 */
Chris@0 37 public function testLongSentence() {
Chris@0 38 // 125.
Chris@0 39 $text =
Chris@0 40 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ' .
Chris@0 41 // 108.
Chris@0 42 'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. ' .
Chris@0 43 // 103.
Chris@0 44 'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. ' .
Chris@0 45 // 110.
Chris@0 46 'Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.';
Chris@0 47 $expected = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ' .
Chris@0 48 'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. ' .
Chris@0 49 'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.';
Chris@0 50 // First three sentences add up to: 336, so add one for space and then 3 to get half-way into next word.
Chris@0 51 $this->assertTextSummary($text, $expected, NULL, 340);
Chris@0 52 }
Chris@0 53
Chris@0 54 /**
Chris@0 55 * Test various summary length edge cases.
Chris@0 56 */
Chris@0 57 public function testLength() {
Chris@0 58 FilterFormat::create([
Chris@0 59 'format' => 'autop',
Chris@0 60 'filters' => [
Chris@0 61 'filter_autop' => [
Chris@0 62 'status' => 1,
Chris@0 63 ],
Chris@0 64 ],
Chris@0 65 ])->save();
Chris@0 66 FilterFormat::create([
Chris@0 67 'format' => 'autop_correct',
Chris@0 68 'filters' => [
Chris@0 69 'filter_autop' => [
Chris@0 70 'status' => 1,
Chris@0 71 ],
Chris@0 72 'filter_htmlcorrector' => [
Chris@0 73 'status' => 1,
Chris@0 74 ],
Chris@0 75 ],
Chris@0 76 ])->save();
Chris@0 77
Chris@0 78 // This string tests a number of edge cases.
Chris@0 79 $text = "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>";
Chris@0 80
Chris@0 81 // The summaries we expect text_summary() to return when $size is the index
Chris@0 82 // of each array item.
Chris@0 83 // Using no text format:
Chris@0 84 $format = NULL;
Chris@0 85 $i = 0;
Chris@0 86 $this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
Chris@0 87 $this->assertTextSummary($text, "<", $format, $i++);
Chris@0 88 $this->assertTextSummary($text, "<p", $format, $i++);
Chris@0 89 $this->assertTextSummary($text, "<p>", $format, $i++);
Chris@0 90 $this->assertTextSummary($text, "<p>\n", $format, $i++);
Chris@0 91 $this->assertTextSummary($text, "<p>\nH", $format, $i++);
Chris@0 92 $this->assertTextSummary($text, "<p>\nHi", $format, $i++);
Chris@0 93 $this->assertTextSummary($text, "<p>\nHi\n", $format, $i++);
Chris@0 94 $this->assertTextSummary($text, "<p>\nHi\n<", $format, $i++);
Chris@0 95 $this->assertTextSummary($text, "<p>\nHi\n</", $format, $i++);
Chris@0 96 $this->assertTextSummary($text, "<p>\nHi\n</p", $format, $i++);
Chris@0 97 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 98 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 99 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 100 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 101 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 102 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 103 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 104 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 105 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 106 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 107 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 108 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 109 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 110 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 111 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 112 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 113 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 114 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 115 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 116 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 117 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 118 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 119 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 120 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 121 $this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
Chris@0 122 $this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
Chris@0 123 $this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
Chris@0 124
Chris@0 125 // Using a text format with filter_autop enabled.
Chris@0 126 $format = 'autop';
Chris@0 127 $i = 0;
Chris@0 128 $this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
Chris@0 129 $this->assertTextSummary($text, "<", $format, $i++);
Chris@0 130 $this->assertTextSummary($text, "<p", $format, $i++);
Chris@0 131 $this->assertTextSummary($text, "<p>", $format, $i++);
Chris@0 132 $this->assertTextSummary($text, "<p>", $format, $i++);
Chris@0 133 $this->assertTextSummary($text, "<p>", $format, $i++);
Chris@0 134 $this->assertTextSummary($text, "<p>", $format, $i++);
Chris@0 135 $this->assertTextSummary($text, "<p>\nHi", $format, $i++);
Chris@0 136 $this->assertTextSummary($text, "<p>\nHi", $format, $i++);
Chris@0 137 $this->assertTextSummary($text, "<p>\nHi", $format, $i++);
Chris@0 138 $this->assertTextSummary($text, "<p>\nHi", $format, $i++);
Chris@0 139 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 140 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 141 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 142 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 143 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 144 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 145 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 146 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 147 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 148 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 149 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 150 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 151 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 152 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 153 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 154 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 155 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 156 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 157 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 158 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 159 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 160 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 161 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 162 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 163 $this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
Chris@0 164 $this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
Chris@0 165 $this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
Chris@0 166
Chris@0 167 // Using a text format with filter_autop and filter_htmlcorrector enabled.
Chris@0 168 $format = 'autop_correct';
Chris@0 169 $i = 0;
Chris@0 170 $this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
Chris@0 171 $this->assertTextSummary($text, "", $format, $i++);
Chris@0 172 $this->assertTextSummary($text, "<p></p>", $format, $i++);
Chris@0 173 $this->assertTextSummary($text, "<p></p>", $format, $i++);
Chris@0 174 $this->assertTextSummary($text, "<p></p>", $format, $i++);
Chris@0 175 $this->assertTextSummary($text, "<p></p>", $format, $i++);
Chris@0 176 $this->assertTextSummary($text, "<p></p>", $format, $i++);
Chris@0 177 $this->assertTextSummary($text, "<p>\nHi</p>", $format, $i++);
Chris@0 178 $this->assertTextSummary($text, "<p>\nHi</p>", $format, $i++);
Chris@0 179 $this->assertTextSummary($text, "<p>\nHi</p>", $format, $i++);
Chris@0 180 $this->assertTextSummary($text, "<p>\nHi</p>", $format, $i++);
Chris@0 181 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 182 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 183 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 184 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 185 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 186 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 187 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 188 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 189 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 190 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 191 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 192 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 193 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 194 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 195 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 196 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 197 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 198 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 199 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 200 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 201 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 202 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 203 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 204 $this->assertTextSummary($text, "<p>\nHi\n</p>", $format, $i++);
Chris@0 205 $this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
Chris@0 206 $this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
Chris@0 207 $this->assertTextSummary($text, "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>", $format, $i++);
Chris@0 208 }
Chris@0 209
Chris@0 210 /**
Chris@14 211 * Test text_summary() returns an empty string without any error when called
Chris@14 212 * with an invalid format.
Chris@14 213 */
Chris@14 214 public function testInvalidFilterFormat() {
Chris@14 215
Chris@14 216 $this->assertTextSummary($this->randomString(100), '', 'non_existent_format');
Chris@14 217 }
Chris@14 218
Chris@14 219 /**
Chris@0 220 * Calls text_summary() and asserts that the expected teaser is returned.
Chris@0 221 */
Chris@0 222 public function assertTextSummary($text, $expected, $format = NULL, $size = NULL) {
Chris@0 223 $summary = text_summary($text, $format, $size);
Chris@0 224 $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>', [
Chris@0 225 '@actual' => $summary,
Chris@0 226 '@expected' => $expected,
Chris@0 227 ]));
Chris@0 228 }
Chris@0 229
Chris@0 230 }