use Test::More tests => 22;
use Test::NoWarnings;
use Parse::BBCode::XHTML;
use strict;
use warnings;
eval {
require
Email::Valid;
};
my $email_valid = $@ ? 0 : 1;
#$email_valid = 0;
my $parser = Parse::BBCode::XHTML->new();
my @tests = (
[ q#[B]bold? [test#,
q#[B]bold? [test# ],
[ q#[i=23]italic [b]bold italic [/b][/i]# . "$/$/",
q#italic bold italic <html>
# ],
[ q#[U][noparse][u][c][/noparse][/u]# . "$/$/",
q#<html>[u][c]
# ],
[ q#[img=/foo.jpg]desc [/img]#,
q#
# ],
[ q#[url=javascript:alert(123)]foo [i]italic[/i][/url]#,
q#[url=javascript:alert(123)]foo <html>italic[/url]# ],
[ q#[url=http://foo]foo [i]italic[/i][/url]#,
q#foo <html>italic# ],
[ q#[email=no"mail]mail [i]me[/i][/email]#,
$email_valid ? q#mail me# : q#mail me# ],
[ q#[email="test "]mail [i]me[/i][/email]#,
$email_valid ? q#mail me# : q#mail me#],
[ q#[email]test [/email]#,
$email_valid ? q#test <foo@example.org># : q#test <foo@example.org>#],
[ q#[size=7]big[/size]#,
q#big# ],
[ q#[size=huge!]big[/size]#,
q#big# ],
[ q{[color=#0000FF]blue[/color]},
q{blue} ],
[ q{[color="red"]blue[/color]},
q{blue} ],
[ q{[color="no color!"]blue[/color]},
q{blue} ],
[ q#[list][*]first[*]second[*]third[/list]#,
q## ],
[ q#[quote=who]cite[/quote]#,
q## ],
[ q#[code]use strict;[/code]#,
q## ],
[ q#[noparse]foo[b][/noparse]#,
q#foo[b]# ],
[ q#[code]foo[code]bar[/code][/code]#,
q#[/code]# ],
[ q#[i]italic [b]bold italic [/i][/b]#,
q#italic [b]bold italic <html>[/b]# ],
[ q#[i]italic [b]bold italic [/i][/b]#,
q#[i]italic bold italic <html>[/i]#, 'i' ],
);
for my $test (@tests) {
my ($text, $exp, $forbid) = @$test;
if ($forbid) {
$parser->forbid($forbid);
}
my $parsed = $parser->render($text);
#warn __PACKAGE__.':'.__LINE__.": $parsed\n";
s/[\r\n]//g for ($exp, $parsed);
$text =~ s/[\r\n]//g;
cmp_ok($parsed, 'eq', $exp, "parse '$text'");
if ($forbid) {
$parser->permit($forbid);
}
}