. * */ namespace Friendica\Test\src\Content\Text; use Exception; use Friendica\Content\Text\HTML; use Friendica\Network\HTTPException\InternalServerErrorException; use Friendica\Test\FixtureTest; use GuzzleHttp\Psr7\Uri; use Psr\Http\Message\UriInterface; class HTMLTest extends FixtureTest { public function dataHTML() { $inputFiles = glob(__DIR__ . '/../../../datasets/content/text/html/*.html'); $data = []; foreach ($inputFiles as $file) { $data[str_replace('.html', '', $file)] = [ 'input' => file_get_contents($file), 'expected' => file_get_contents(str_replace('.html', '.txt', $file)) ]; } return $data; } /** * Test convert different input Markdown text into HTML * * @dataProvider dataHTML * * @param string $input The Markdown text to test * @param string $expected The expected HTML output * * @throws Exception */ public function testToPlaintext(string $input, string $expected) { $output = HTML::toPlaintext($input, 0); self::assertEquals($expected, $output); } public function dataHTMLText() { return [ 'bug-7665-audio-tag' => [ 'expectedBBCode' => '[audio]http://www.cendrones.fr/colloque2017/jonathanbocquet.mp3[/audio]', 'html' => '', ], 'bug-8075-html-tags' => [ 'expectedBBCode' => " I don't understand tests", 'html' => "<big rant here> I don't understand tests", ], 'bug-10877-code-entities' => [ 'expectedBBCode' => "Now playing [code] echo \"main(i){for(i=0;;i++)putchar(((i*(i>>8|i>>9)&46&i>>8))^(i&i>>13|i>>6));}\" | gcc -o a.out -x c - 2> /dev/null ./a.out | aplay -q 2> /dev/null [/code] its surprisingly good", 'html' => "

Now playing

echo "main(i){for(i=0;;i++)putchar(((i*(i>>8|i>>9)&46&i>>8))^(i&i>>13|i>>6));}" | gcc -o a.out -x c - 2> /dev/null
./a.out | aplay -q 2> /dev/null

its surprisingly good

", ], 'bug-11851-content-0' => [ 'expectedBBCode' => '[url=https://dev-friendica.mrpetovan.com/profile/hypolite]@hypolite[/url] 0', 'html' => '

@hypolite 0

', ], 'bug-12842-ul-new-lines' => [ 'expectedBBCode' => 'This is: [ul] [li]some[/li] [li]amazing[/li] [li]list[/li] [/ul]', 'html'=> '

This is:

', ], 'bug-12842-ol-new-lines' => [ 'expectedBBCode' => 'This is: [ol] [li]some[/li] [li]amazing[/li] [li]list[/li] [/ol]', 'html'=> '

This is:

  1. some
  2. amazing
  3. list
', ], ]; } /** * Test convert bbcodes to HTML * * @dataProvider dataHTMLText * * @param string $expectedBBCode Expected BBCode output * @param string $html HTML text * * @throws InternalServerErrorException */ public function testToBBCode(string $expectedBBCode, string $html) { $actual = HTML::toBBCode($html); self::assertEquals($expectedBBCode, $actual); } public function dataXpathQuote(): array { return [ 'no quotes' => [ 'value' => "foo", ], 'double quotes only' => [ 'value' => "\"foo", ], 'single quotes only' => [ 'value' => "'foo", ], 'both; double quotes in mid-string' => [ 'value' => "'foo\"bar", ], 'multiple double quotes in mid-string' => [ 'value' => "'foo\"bar\"baz", ], 'string ends with double quotes' => [ 'value' => "'foo\"", ], 'string ends with run of double quotes' => [ 'value' => "'foo\"\"", ], 'string begins with double quotes' => [ 'value' => "\"'foo", ], 'string begins with run of double quotes' => [ 'value' => "\"\"'foo", ], 'run of double quotes in mid-string' => [ 'value' => "'foo\"\"bar", ], ]; } /** * @dataProvider dataXpathQuote * @param string $value * @return void * @throws \DOMException */ public function testXpathQuote(string $value) { $dom = new \DOMDocument(); $element = $dom->createElement('test'); $attribute = $dom->createAttribute('value'); $attribute->value = $value; $element->appendChild($attribute); $dom->appendChild($element); $xpath = new \DOMXPath($dom); $result = $xpath->query('//test[@value = ' . HTML::xpathQuote($value) . ']'); $this->assertInstanceOf(\DOMNodeList::class, $result); $this->assertEquals(1, $result->length); } public function dataCheckRelMeLink(): array { $aSingleRelValue = new \DOMDocument(); $aSingleRelValue->load(__DIR__ . '/../../../datasets/dom/relme/a-single-rel-value.html'); $aMultipleRelValueStart = new \DOMDocument(); $aMultipleRelValueStart->load(__DIR__ . '/../../../datasets/dom/relme/a-multiple-rel-value-start.html'); $aMultipleRelValueMiddle = new \DOMDocument(); $aMultipleRelValueMiddle->load(__DIR__ . '/../../../datasets/dom/relme/a-multiple-rel-value-middle.html'); $aMultipleRelValueEnd = new \DOMDocument(); $aMultipleRelValueEnd->load(__DIR__ . '/../../../datasets/dom/relme/a-multiple-rel-value-end.html'); $linkSingleRelValue = new \DOMDocument(); $linkSingleRelValue->load(__DIR__ . '/../../../datasets/dom/relme/link-single-rel-value.html'); $meUrl = new Uri('https://example.com/profile/me'); return [ 'a-single-rel-value' => [ 'doc' => $aSingleRelValue, 'meUrl' => $meUrl ], 'a-multiple-rel-value-start' => [ 'doc' => $aMultipleRelValueStart, 'meUrl' => $meUrl ], 'a-multiple-rel-value-middle' => [ 'doc' => $aMultipleRelValueMiddle, 'meUrl' => $meUrl ], 'a-multiple-rel-value-end' => [ 'doc' => $aMultipleRelValueEnd, 'meUrl' => $meUrl ], 'link-single-rel-value' => [ 'doc' => $linkSingleRelValue, 'meUrl' => $meUrl ], ]; } /** * @dataProvider dataCheckRelMeLink * @param \DOMDocument $doc * @param UriInterface $meUrl * @return void */ public function testCheckRelMeLink(\DOMDocument $doc, UriInterface $meUrl) { $this->assertTrue(HTML::checkRelMeLink($doc, $meUrl)); } public function dataCheckRelMeLinkFail(): array { $aSingleRelValueFail = new \DOMDocument(); $aSingleRelValueFail->load(__DIR__ . '/../../../datasets/dom/relme/a-single-rel-value-fail.html'); $linkSingleRelValueFail = new \DOMDocument(); $linkSingleRelValueFail->load(__DIR__ . '/../../../datasets/dom/relme/link-single-rel-value-fail.html'); $meUrl = new Uri('https://example.com/profile/me'); return [ 'a-single-rel-value-fail' => [ 'doc' => $aSingleRelValueFail, 'meUrl' => $meUrl ], 'link-single-rel-value-fail' => [ 'doc' => $linkSingleRelValueFail, 'meUrl' => $meUrl ], ]; } /** * @dataProvider dataCheckRelMeLinkFail * @param \DOMDocument $doc * @param UriInterface $meUrl * @return void */ public function testCheckRelMeLinkFail(\DOMDocument $doc, UriInterface $meUrl) { $this->assertFalse(HTML::checkRelMeLink($doc, $meUrl)); } public function dataExtractCharset(): array { return [ 'https://github.com/friendica/friendica/issues/12488#issuecomment-1376002081' => [ 'expected' => 'utf-8', 'html' => "Mit Vollgas in den Abgrund … - Austria Insiderinfo Zum Inhalt springen
\"Austria
Startseite-Nachhaltigkeit-Natur- & Umweltschutz-Mit Vollgas in den Abgrund …

Mit Vollgas in den Abgrund …

… oder ist es doch nur ein wirklich ungünstiger Blickwinkel?

Viele sagen, dass wir sehenden Auges auf einen Abgrund zufahren. Ein Abgrund, den mittlerweile auch alle sehen. Bis auf die extrem Kurzsichtigen oder Blinden.

Aber trotzdem verharrt der Großteil von uns schön auf dem Gaspedal des Konsums. Ja, auch die Sehenden. Denn man habe es sich ja verdient, wozu würde man sonst den ganzen Tag arbeiten?

Warnung! Dieser Artikel kann Spuren von Ironie enthalten! Das Titelbild wurde unter Zuhilfenahme von DALL-E erstellt.

Abgrund? Künstliches Drama!

Würdest du mit deinem Auto auf eine Klippe zufahren und weiter Gas geben, obwohl du davon ausgehen musst, dass sich das mit durchgetretenem Gaspedal niemals ausgehen wird? Ein Absturz also unvermeidlich sein wird?

So ein Absturz wird im Rahmen der Klimakrise auch von vielen Sehenden in Kauf genommen. Denn seien wir einmal ganz ehrlich – wir wissen ja nicht wirklich, wie weit es dort dann hinuntergeht. Klar, es gibt Experten, die meinen, dass das sehr heftig werden wird, wenn wir so weitermachen. Aber man muss ja nicht immer gleich vom Schlimmsten ausgehen, oder?

Und was wäre, wenn diese sich vielleicht ja doch irren und es nur ein paar Zentimeter sind? Wenn es nur von unserem aktuellen Blickwinkel so schlimm aussieht? Mann kennt ja diese Bilder, wo sich der/die Fotograf:in einfach auf den Boden wirft, um ein künstliches Drama zu erzeugen. Dann hätten wir uns jahrelang umsonst so sehr angestrengt und eingeschränkt.

Brutale Einschränkungen. Echt brutal!

Öffis!

Brutal eingeschränkt! Mit kleineren E-Autos statt den schönen und sicheren (für den Fahrer) Hybrid-SUVs mit extra Stauraum und Überrollbügel. Oder noch schlimmer – in völlig überfüllte Öffis gezwängt, auf die man ohnehin immer ewig warten muss. Gemeinsam mit laut grölenden, betrunkenen und stinkenden, vor sich hin rülpsenden Fußballfans.

Nicht all-inclusive ins Glück!

Kein Urlaubsflug um 20 € zum Saufen für einen Abend nach Malle. Äh, wandern. Wandern im schönen Norden Mallorcas wollte ich natürlich sagen! Keine Kreuzfahrt ins Glück auf dem Traumschiff.

\"Ferienanlage
Ferienanlage in der Wüste mit Pool

Keine fremden Kulturen hautnah aus der sicheren All-Inklusive Ferienanlage mit extra großem Buffet und Security vor der Anlage heraus erleben. Bildung, so wichtig! Mir geht es natürlich nur um meine Bildung! Aber klar, der Pool der wirklich sauberen Anlage, da darf man sich wirklich nicht beschweren, der ist schon auch klasse. Und die Cocktails, und das Fitness-Angebot im Club.

Aber einmal fahre ich auf jeden Fall raus in die Slums, das muss man schon zumindest auch einmal gesehen haben. Um den Kindern Süßigkeiten vom Jeep zuzuwerfen und ihnen eine Freude zu machen. Um Verständnis für diese armen Menschen zu bekommen, denen die letzte Dürre / Überschwemmung / Tornado (zutreffendes bitte ankreuzen) wirklich mächtig zugesetzt hat.

Diese armen Leute stehen vor den Trümmern ihrer Existenz. Kein Haus. Kein Auto. Kein Boot. Wenig zu essen. Wer das nicht live gesehen hat, kann das Leid nicht verstehen – da gibst du mir doch recht, oder? Gut, wenn es Leute wie mich gibt, die Devisen ins Land bringen, um ihr Leid ein wenig zu verringern!

Keine Klimakrise – wäre wirklich alles umsonst?

Nehmen wir einmal an, die Klimakrise wäre nur erfunden. Erfunden vom „System“, welches uns nur unterjochen will, um Reiche noch reicher zu machen. Unterstützt von den Mainstream-Medien und dem Staatsfernsehen, die auch nur alle Teil des Systems wären. Was natürlicher völliger Schwachsinn ist, aber manche glauben das wirklich.

Wenn das alles nur erfunden wäre, würden wir also quasi völlig grundlos unsere Städte wieder lebenswerter machen.

\"Mirabellgarten
Mirabellgarten und die Festung Hohensalzburg – mehr davon!

Mit weniger Autos und somit Abgasen und Lärm. Weniger Asphalt und Parkplätze, dafür mehr Grün und Parks mit Spielplätzen, auf denen sich unsere Kinder und Enkel austoben können. In einer sehr guten und nahezu schadstofffreien Luft, ohne Angst haben zu müssen, dass sie von einem SUV umgenietet werden.

Mit einem sehr gut ausgebauten Öffi-System mit Bus und Bahn und einem ausgezeichneten Radwegenetz. Keine Zeit mehr in Staus verbringen. Sich nicht mehr mit dem Fahrrad zwischen stinkenden Autokolonnen durchschlängeln zu müssen, mit der ständigen Angst im Nacken, von einem gereizten und gestressten Autofahrer abgeschossen zu werden.

Wäre so etwas nicht erstrebenswert? Mit oder ohne Klimakrise? Mit dem zusätzlich guten Gefühl, dass wir die Kurve vor dem Abgrund noch schaffen können? Völlig egal, wie hoch der Abgrund am Ende wirklich ist?

Ähnliche Beiträge

Hinterlasse einen Kommentar Antworten abbrechen

Page load link
Nach oben
", ], 'meta http-equiv content-type' => [ 'expected' => 'utf-8', 'html' => '', ], 'meta http-equiv Content-Type' => [ 'expected' => 'utf-8', 'html' => '', ], 'meta http-equiv Content-Type no charset' => [ 'expected' => null, 'html' => '', ], 'meta charset' => [ 'expected' => 'utf-8', 'html' => '', ], 'meta charset no quotes' => [ 'expected' => 'utf-8', 'html' => '', ], 'meta charSet' => [ 'expected' => 'utf-8', 'html' => '', ], // Can't test in Woodpecker without tripping PHPUnit, even with the error-suppressing operator // 'invalid html' => [ // 'expected' => null, // 'html' => '', // ] ]; } /** * @dataProvider dataExtractCharset * * @param string|null $expected * @param string $html * @return void */ public function testExtractCharset(?string $expected, string $html) { $doc = new \DOMDocument(); @$doc->loadHTML($html, LIBXML_NOERROR); $this->assertEquals($expected, HTML::extractCharset($doc)); } }