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 }
|