Created
September 2, 2013 09:01
-
-
Save hanabokuro/6410792 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use strict; | |
use warnings; | |
use utf8; | |
use Test::More; | |
use Test::Builder; | |
BEGIN { | |
use_ok('AvoidCoreTextBug'); | |
} | |
my $Tester = Test::Builder->new; | |
subtest simple => sub { | |
is_filterd("\x{600}\x{20}"); | |
is_filterd("؀\x{20}"); | |
is_filterd("؀\x{20}"); | |
is_filterd("\x{600} "); | |
is_filterd("؀ "); | |
is_filterd("؀ "); | |
is_filterd("\x{600} "); | |
is_filterd("؀ "); | |
is_filterd("؀ "); | |
is_filterd("\x{600} "); | |
is_filterd("؀ "); | |
is_filterd("؀ "); | |
}; | |
subtest 'simple no entity reference' => sub { | |
is_filterd("\x{600}\x{20}", 1); | |
is_no_filterd("؀\x{20}", 1); | |
is_no_filterd("؀\x{20}", 1); | |
is_filterd("\x{600} ", 1); | |
is_no_filterd("؀ ", 1); | |
is_no_filterd("؀ ", 1); | |
is_no_filterd("\x{600} ", 1); | |
is_no_filterd("؀ ", 1); | |
is_no_filterd("؀ ", 1); | |
is_no_filterd("\x{600} ", 1); | |
is_no_filterd("؀ ", 1); | |
is_no_filterd("؀ ", 1); | |
}; | |
subtest 'multi line' => sub { | |
my $filterd = AvoidCoreTextBug::filter("\na\nb\x{600}\x{20}a\nb\nc\n\x{600}\x{20}\n\n\n"); | |
is($filterd, "\na\nb\x{600}\x{20}\x{200e}a\nb\nc\n\x{600}\x{20}\x{200e}\n\n\n"); | |
}; | |
subtest ascii => sub { | |
is_no_filterd("abc"); | |
}; | |
subtest with_tag => sub { | |
is_no_filterd("foo<a>bar"); | |
is_no_filterd("foo <a> bar </a> baz"); | |
is_no_filterd("foo <a> "); | |
}; | |
subtest with_entity => sub { | |
is_no_filterd("ab"); | |
is_no_filterd("abc"); | |
is_no_filterd("abc"); | |
is_no_filterd("abcd"); | |
}; | |
subtest 'with 0x00-0xff entity' => sub { | |
is_no_filterd("a<>b"); | |
is_no_filterd("a<>b"); | |
is_no_filterd("a<>b"); | |
is_no_filterd("<>"); | |
is_no_filterd("<>"); | |
is_no_filterd("<"); | |
}; | |
subtest 'with 0x100- entity (not Arabic)' => sub { | |
is_no_filterd("あいうえお"); | |
is_no_filterd("aあiいuうeえoお"); | |
is_no_filterd("aあbいuうeえoお"); | |
is_no_filterd("aあbb"); | |
}; | |
subtest with_Arabic => sub { | |
is_no_filterd("؀"); | |
is_filterd("؀\t"); | |
is_no_filterd("ݐ"); | |
is_filterd("ݐ "); | |
is_no_filterd("ࢠ"); | |
is_filterd("ࢠ "); | |
is_no_filterd("ﭐ"); | |
is_filterd("ﭐ\n"); | |
is_no_filterd("繰"); | |
is_filterd("繰\r"); | |
is_no_filterd("𐹠"); | |
is_filterd("𐹠\x{07}"); | |
is_no_filterd("𞸀"); | |
is_filterd("𞸀 "); | |
is_no_filterd("&#no_x200f;"); | |
is_filterd("‏ "); | |
is_no_filterd("‫"); | |
is_filterd("‫ "); | |
is_no_filterd("‮"); | |
is_filterd("‮ "); | |
}; | |
subtest with_Hebrew => sub { | |
is_no_filterd("֐"); | |
is_filterd("֐ "); | |
is_no_filterd("יִ"); | |
is_filterd("יִ\t"); | |
}; | |
subtest with_Syriac => sub { | |
is_filterd("܀ "); | |
}; | |
subtest with_all_right_to_left_char => sub { | |
foreach my $code (0x600 .. 0x6ff, | |
0x750 .. 0x77f, | |
0x8a0 .. 0x8ff, | |
0xfb50 .. 0xfdff, | |
0x7e70 .. 0xfeff, | |
0x10e60 .. 0x10e7f, | |
0x1ee00 .. 0x1eeff, | |
0x590 .. 0x05FF, | |
0xfb1d .. 0xfb4f, | |
0x700 .. 0x74f){ | |
my $str = "&#$code"; | |
my $filterd = AvoidCoreTextBug::filter($str); | |
if($str ne $filterd){ | |
is($str, $filterd, $code); | |
} | |
$filterd = AvoidCoreTextBug::filter($str . " "); | |
my $expected = $str . " \x{200e}"; | |
if($expected ne $filterd){ | |
is($str, $filterd, "$code + space"); | |
} | |
} | |
ok(1); | |
}; | |
subtest separator => sub { | |
is_filterd("؀\x{2003}"); | |
foreach my $code (0x20, 0xa0, | |
0x1680, 0x180e, | |
0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200a, | |
0x202f, 0x205f, | |
0x3000){ | |
} | |
}; | |
subtest complex => sub { | |
is_no_filterd("a؀b<<Ӓあいう‏ﭐか‏きく"); | |
is(AvoidCoreTextBug::filter("a؀\tb<<Ӓあいう‏ ﭐ か‏\nきく"), "a؀\t\x{200e}b<<Ӓあいう‏ \x{200e}ﭐ \x{200e}か‏\n\x{200e}きく"); | |
}; | |
subtest 'bug fix' => sub { | |
is_no_filterd("} "); | |
is_filterd("\x{600}­"); | |
is_filterd("\x{600}­"); | |
is_filterd("\x{600}\x{ad}"); | |
}; | |
sub is_filterd { | |
my($original, $dont_convert_entity_reference) = @_; | |
my $filterd = AvoidCoreTextBug::filter($original, $dont_convert_entity_reference); | |
$Tester->is_eq($filterd, $original . "\x{200e}"); | |
} | |
sub is_no_filterd { | |
my($original, $dont_convert_entity_reference) = @_; | |
my $filterd = AvoidCoreTextBug::filter($original, $dont_convert_entity_reference); | |
$Tester->is_eq($filterd, $original); | |
} | |
done_testing; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment