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#[desc <html>]# ], [ 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#
who:
cite
# ], [ q#[code]use strict;[/code]#, q#
Code:
use strict;
# ], [ q#[noparse]foo[b][/noparse]#, q#foo[b]# ], [ q#[code]foo[code]bar[/code][/code]#, q#
Code:
foo[code]bar<html>
[/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); } }