19 declare(strict_types=1);
23 require_once
'vendor/composer/vendor/autoload.php';
35 private const TEXT = <<<EOT
36 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. 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>
42 private const HTML_WITH_NON_XHTML_URLS = <<<EOT
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)
61 public static function inputProvider(): array
70 [
static function ():
void {
78 public static function unsupportedButKnownEntitiesProvider(): array
80 return array_map(
static function (
string $entity): array {
82 '<div>Lorem ipsum dolor <' . $entity .
'></' . $entity .
'></div>' 97 #[DataProvider('inputProvider')] 98 public function testExceptionIsRaisedIfInputIsNotAString(mixed $from):
void 100 $this->expectException(InvalidArgumentException::class);
101 $readingTimeTrafo = $this->
refinery->string()->estimatedReadingTime(
true);
103 $readingTimeTrafo->transform($from);
106 public function testReadingTimeForPlainTextCanBeDetermined():
void 108 $readingTimeTrafo = $this->
refinery->string()->estimatedReadingTime(
true);
111 $readingTimeTrafo->transform(self::TEXT)
115 public function testReadingTimeForHtmlFragmentCanBeDetermined():
void 119 $readingTimeTrafo = $this->
refinery->string()->estimatedReadingTime(
true);
122 $readingTimeTrafo->transform($text)
125 $onlyTextReadingTimeInfo = $this->
refinery->string()->estimatedReadingTime();
128 $onlyTextReadingTimeInfo->transform($text)
132 public function testSolitaryPunctuationCharactersMustNotAffectReadingTime():
void 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);
151 public function testXTHMLCommentsMustNotAffectReadingTime():
void 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')] 167 public function testNoExceptionIsRaisedIfHtmlContainsUnsupportedEntities(
string $text):
void 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);
177 public function testNoExceptionIsRaisedIfHtmlContainsAmpersandInUrls():
void 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);
Interface Observer Contains several chained tasks and infos about them.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...