19declare(strict_types=1);
23require_once
'vendor/composer/vendor/autoload.php';
28use PHPUnit\Framework\TestCase;
30use InvalidArgumentException;
31use PHPUnit\Framework\Attributes\DataProvider;
35 private const TEXT = <<<EOT
36Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
38 private const HTML = <<<EOT
39<div>Lorem ipsum dolor <span style=
"color: red;">sit amet</span>, <img src=
"#" /> consetetur sadipscing elitr, sed diam nonumy eirmod <img src=
"#" /> tempor invidunt <img src=
"#" /> ut labore et dolore <img src=
"#" /> magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor <img src=
"#" /> sit amet. <img src=
"#" /> Lorem ipsum dolor <img src=
"#" /> sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, <img src=
"#" /> sed diam voluptua. <img src=
"#" /> At vero eos et accusam et justo duo dolores et ea rebum. Stet <img src=
"#" /> clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</div>
43<a href=
"http://www.ilias.de=foo=1&bar=2">
ILIAS</a>
48 protected function setUp(): void
51 $this->createMock(DataFactory::class),
52 $this->createMock(Language::class)
70 [
static function ():
void {
80 return array_map(
static function (
string $entity): array {
82 '<div>Lorem ipsum dolor <' . $entity .
'></' . $entity .
'></div>'
97 #[DataProvider('inputProvider')]
100 $this->expectException(InvalidArgumentException::class);
101 $readingTimeTrafo = $this->
refinery->string()->estimatedReadingTime(
true);
103 $readingTimeTrafo->transform($from);
108 $readingTimeTrafo = $this->
refinery->string()->estimatedReadingTime(
true);
111 $readingTimeTrafo->transform(self::TEXT)
119 $readingTimeTrafo = $this->
refinery->string()->estimatedReadingTime(
true);
122 $readingTimeTrafo->transform($text)
125 $onlyTextReadingTimeInfo = $this->
refinery->string()->estimatedReadingTime();
128 $onlyTextReadingTimeInfo->transform($text)
134 $textSegmentWithPunctuation =
'Lorem ipsum <img src="#" />, and some other text... ';
137 $readingTimeTrafo = $this->
refinery->string()->estimatedReadingTime(
true);
139 $text = str_repeat($textSegmentWithPunctuation, $repetitions);
141 $timeInMinutes = $readingTimeTrafo->transform($text);
142 $this->assertEquals(23, $timeInMinutes);
144 $textSegmentWithoutPunctuation =
'Lorem ipsum <img src="#" /> and some other text... ';
145 $text = str_repeat($textSegmentWithoutPunctuation, $repetitions);
147 $timeInMinutes = $readingTimeTrafo->transform($text);
148 $this->assertEquals(23, $timeInMinutes);
155 $comment =
'<script><!--a comment--></script>';
157 $text .= str_repeat(
$comment, $repetitions);
159 $onlyTextReadingTimeInfo = $this->
refinery->string()->estimatedReadingTime();
162 $onlyTextReadingTimeInfo->transform($text)
166 #[DataProvider('unsupportedButKnownEntitiesProvider')]
169 $reading_time_trafo = $this->
refinery->string()->estimatedReadingTime(
true);
171 $reading_time = $reading_time_trafo->transform($text);
173 $this->assertIsInt($reading_time);
174 $this->assertGreaterThan(0, $reading_time);
179 $reading_time_trafo = $this->
refinery->string()->estimatedReadingTime(
true);
181 $reading_time = $reading_time_trafo->transform(self::HTML_WITH_NON_XHTML_URLS);
183 $this->assertIsInt($reading_time);
184 $this->assertGreaterThan(0, $reading_time);
testReadingTimeForHtmlFragmentCanBeDetermined()
testXTHMLCommentsMustNotAffectReadingTime()
testSolitaryPunctuationCharactersMustNotAffectReadingTime()
const HTML_WITH_NON_XHTML_URLS
testNoExceptionIsRaisedIfHtmlContainsAmpersandInUrls()
static unsupportedButKnownEntitiesProvider()
testReadingTimeForPlainTextCanBeDetermined()
testNoExceptionIsRaisedIfHtmlContainsUnsupportedEntities(string $text)
testExceptionIsRaisedIfInputIsNotAString(mixed $from)
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.