Mojo-DOM-Role-Restrict
view release on metacpan or search on metacpan
t/07-restrict-callback.t view on Meta::CPAN
use Test::More;
use Mojo::DOM;
my $dom = Mojo::DOM->with_roles('+Restrict')->new;
basic_test(
html => q|<html><head><script>...</script></head><body><p class="okay" id="allow" onclick="not-allow">Restrict <span class="not-okay">HTML</span></p></body></html>|,
spec => {
script => 0,
span => {
validate_tag => sub {
delete $_[1]->{class};
return @_;
}
},
'*' => {
class => sub {
my ($attr, $val) = @_;
my $match = $val =~ m/^okay$/;
return $match ? ($attr, $val) : 0;
},
id => sub {
return @_;
}
},
},
expected => q|<html><head></head><body><p class="okay" id="allow">Restrict <span>HTML</span></p></body></html>|
);
basic_test(
html => q|<html><head><script>...</script></head><body><p class="okay" id="allow" onclick="not-allow">Restrict <span class="not-okay">HTML</span></p></body></html>|,
spec => {
script => 0,
span => {
validate_tag => sub {
delete $_[1]->{class};
return @_;
}
},
'*' => {
class => 1,
id => sub {
return @_;
}
},
},
expected => q|<html><head></head><body><p class="okay" id="allow">Restrict <span>HTML</span></p></body></html>|
);
basic_test(
html => q|<html><head><script>...</script></head><body><p class="okay" id="allow" onclick="not-allow">Restrict <span class="not-okay">HTML</span></p></body></html>|,
spec => {
script => 0,
'*' => {
class => sub {
my ($attr, $val) = @_;
my $match = $val =~ m/^okay$/;
return $match ? ($attr, $val) : 0;
},
id => sub {
return @_;
}
},
},
expected => q|<html><head></head><body><p class="okay" id="allow">Restrict <span>HTML</span></p></body></html>|
);
basic_test(
html => q|<html><head><script>...</script></head><body><p class="okay" id="allow" onclick="not-allow">Restrict <span class="not-okay">HTML</span></p><p class="okay" id="allow" onclick="not-allow">Restrict <span class="not-okay">HTML</span></p><p cla...
spec => {
script => 0,
span => {
validate_tag => sub {
return ('b', $_[1]);
}
},
p => {
validate_tag => sub {
$_[1]->{id} = "prefixed-" . $_[1]->{id};
$_[1]->{'data-unknown'} = 'abc';
return ('div', $_[1]);
}
},
'*' => {
'*' => 1,
onclick => sub { 0 },
class => sub {
my ($attr, $val) = @_;
my $match = $val =~ m/^okay$/;
return $match ? ($attr, $val) : 0;
},
id => sub {
return @_;
}
},
},
expected => q|<html><head></head><body><div class="okay" data-unknown="abc" id="prefixed-allow">Restrict <b>HTML</b></div><div class="okay" data-unknown="abc" id="prefixed-allow">Restrict <b>HTML</b></div><div class="okay" data-unknown="abc" id="pre...
);
sub basic_test {
my (%args) = @_;
my $html = $dom->parse($args{html}, $args{spec});
$html->restrict;
is($html->to_string(1), $args{expected}, $args{expected});
}
done_testing();
( run in 0.678 second using v1.01-cache-2.11-cpan-d06a3f9ecfd )