mourningdove/t/cleaner-tables.t

81 lines
2.5 KiB
Perl
Raw Normal View History

2026-05-24 01:03:05 +00:00
# t/cleaner-tables.t
#
# Test LJ::CleanHTML::clean_event with tables.
#
# This code was forked from the LiveJournal project owned and operated
# by Live Journal, Inc. The code has been modified and expanded by
# Dreamwidth Studios, LLC. These files were originally licensed under
# the terms of the license supplied by Live Journal, Inc, which can
# currently be found at:
#
# http://code.livejournal.org/trac/livejournal/browser/trunk/LICENSE-LiveJournal.txt
#
# In accordance with the original license, this code and all its
# modifications are provided under the GNU General Public License.
# A copy of that license can be found in the LICENSE file included as
# part of this distribution.
use strict;
use warnings;
use Test::More tests => 9;
BEGIN { require "$ENV{LJHOME}/t/lib/ljtestlib.pl"; }
use LJ::CleanHTML;
use HTMLCleaner;
my $orig_post;
my $clean_post;
my $clean = sub {
$clean_post = $orig_post;
LJ::CleanHTML::clean_event( \$clean_post, { tablecheck => 1 } );
};
# VALID: standard table
$orig_post =
"<table><tr><td>Cell 1</td><td>Cell 2</td></tr><tr><td>Cell 3</td><td>Cell 4</td></tr></table>";
$clean->();
ok( $orig_post eq $clean_post, "Table okay if all tags are closed" );
# VALID: table without closing tr/td tags
$orig_post = "<table><tr><td>Cell 1<td>Cell 2<tr><td>Cell 3<td>Cell 4</table>";
$clean->();
ok( $orig_post eq $clean_post, "Table okay if td and tr tags aren't closed" );
# INVALID: table without opening table tag, should escape all tags
$orig_post =
"<tr><td>Cell 1</td><td>Cell 2</td></tr><tr><td>Cell 3</td><td>Cell 4</td></tr></table>";
$clean->();
ok( $clean_post !~ '<t', "All tags escaped" );
$orig_post = "<td></td></table>";
$clean->();
ok( $clean_post !~ '<t', "All tags escaped" );
$orig_post = "<tr></tr></table>";
$clean->();
ok( $clean_post !~ '<t', "All tags escaped" );
$orig_post = "<td></td>";
$clean->();
ok( $clean_post !~ '<t', "All tags escaped" );
$orig_post = "<tr></tr>";
$clean->();
ok( $clean_post !~ '<t', "All tags escaped" );
# INVALID: table without opening tr tags, should escape all td tags
$orig_post = "<table><td>Cell 1</td><td>Cell 2</td><td>Cell 3</td><td>Cell 4</td></table>";
$clean->();
ok( $clean_post !~ '<td' && $clean_post =~ '<table', "All td tags escaped" );
$orig_post = "<table><tbody><tr><td>foo</td></tr></table>";
$clean->();
ok(
$clean_post eq "<table><tbody><tr><td>foo</td></tr></table>"
|| $clean_post eq "<table><tbody><tr><td>foo</td></tr></tbody></table>",
"Fixed tbody -- optional"
);