OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

ViewEscapeTest.php

1 KB
<?php

declare(strict_types=1);

use OpenNIT\Core\View;

/**
 * Die zentrale Maskierung in Vorlagen.
 *
 * Sie nimmt beliebige Werte an – auch solche, die aus einer Fremdquelle
 * stammen und nicht wohlgeformt sind. Eine Anzeige darf daran höchstens
 * Zeichen verlieren, nie die ganze Seite.
 */
return static function (): void {

    $view = new View(sys_get_temp_dir());

    test('Markup in Werten wird maskiert', function () use ($view) {
        assertSame('&lt;b&gt;x&lt;/b&gt;', $view->e('<b>x</b>'));
        assertSame('', $view->e(null));
        assertSame('42', $view->e(42));
    });

    test('Listen und Objekte werden als JSON gezeigt', function () use ($view) {
        assertSame('{&quot;a&quot;:1}', $view->e(['a' => 1]));
    });

    test('Eine Liste mit kaputten Zeichen bricht die Seite nicht', function () use ($view) {
        // Melden Fremdsysteme Zeichen in einer anderen Kodierung, scheitert
        // json_encode() – ohne Auffangen endete das in einem Typfehler und
        // damit in der Fehlerseite.
        $out = $view->e(['name' => "Ger\xE4t"]);

        assertSame('string', gettype($out));
        assertTrue(str_contains($out, 'name'), 'Der Schlüssel fehlt: ' . $out);
        assertFalse(str_contains($out, '<'), 'Unmaskierte Klammer: ' . $out);
    });
};