1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
#!/usr/bin/perl -T
use strict; use warnings;
our $tests;
BEGIN { ++$INC{'tests.pm'} }
sub tests::VERSION { $tests += pop };
use Test::More;
plan tests => $tests;
use CSS::DOM::Exception;
use tests 1; # use
use_ok 'CSS::DOM::Rule::Media';
require CSS::DOM;
my $rule = (
my $ss = CSS::DOM::parse(
'@media print { body { background: none } }'
)
)-> cssRules->[0];
use tests 1; # isa
isa_ok $rule, 'CSS::DOM::Rule::Media';
use tests 7; #constructor
{
(my $ss = new CSS::DOM)->insertRule('@media print {}',0);
my $rule = $ss->cssRules->[0];
my $empty_rule = new CSS::DOM::Rule::Media $rule;
isa_ok $empty_rule,'CSS::DOM::Rule::Media',
'result of new CSS::DOM::Rule::Media (empty rule)';
is $empty_rule->parentRule, $rule, 'parentRule of empty rule';
is $empty_rule->parentStyleSheet, $ss,
'parentStyleSheet of empty rule';
is $empty_rule->type, &CSS::DOM::Rule::MEDIA_RULE,
'type of empty rule';
$empty_rule = new CSS::DOM::Rule::Media $ss;
isa_ok $empty_rule, 'CSS::DOM::Rule::Media',
'empty rule with no parent rule';
is +()=$empty_rule->parentRule, 0,
'parentRule of empty rule without parent rule';
is $empty_rule->parentStyleSheet, $ss,
'parentStyleSheet of empty rule w/no parent rule';
}
use tests 2; # media
{
isa_ok $rule->media, 'CSS::DOM::MediaList';
$rule->media->mediaText('screen, printer');
is_deeply [$rule->media], [screen=>printer=>],
'media in list context';
}
use tests 2; # cssRules
{
my $rule = (
CSS::DOM::parse(
'@media print {
a{text-decoration: none} p { margin: 0 }
}'
)
)-> cssRules->[0];
is +()=$rule->cssRules, 2, 'cssRules in list context';
isa_ok my $rules = cssRules $rule, 'CSS::DOM::RuleList',
'cssRules in scalar context';
}
use tests 13; # insertRule
{
my $rule = (
my $ss = CSS::DOM::parse(
'@media print {
a{text-decoration: none} p { margin: 0 }
}'
)
)-> cssRules->[0];
is $rule->insertRule('b { font-weight: bold }', 0), 0,
'retval of insertRule';
is_deeply [map $_->selectorText, $rule->cssRules], [qw/ b a p /],
'result of insertRule with 0 for the index';
is $rule->cssRules->[0]->style->cssText, 'font-weight: bold',
'Are the contents of insertRule\'s new rule present?';
isa_ok $rule->cssRules->[0], 'CSS::DOM::Rule';
is $rule->insertRule('i {}', -1), 2,
'retval of insertRule with negative index';
is_deeply [map $_->selectorText, $rule->cssRules], [qw/ b a i p /],
'result of insertRule with negative index';
{
local $SIG{__WARN__} = sub{};
is $rule->insertRule('u {}', 27), 4,
'retval of insertRule with large index';
}
is_deeply [map $_->selectorText, $rule->cssRules],
[qw/ b a i p u /],
'result of insertRule with large index';
is +()=eval{$rule->insertRule(' two{} rules{}',0)}, 0,
'insertRule fails with two rules';
isa_ok $@, 'CSS::DOM::Exception','$@';
cmp_ok $@, '==', CSS::DOM::Exception::SYNTAX_ERR,
'$@ is a SYNTAX_ERR';
my $subrule = $rule->cssRules->[
$rule->insertRule('foo{bar:baz}',0)
];
is $subrule->parentStyleSheet, $ss,
'parentStyleSheet is set by insertRule';
is $subrule->parentRule, $rule, 'insertRule sets teh parentRule';
}
use tests 4; # deleteRule
{
my $rule = (
CSS::DOM::parse(
'@media print {
a{text-decoration: none} p { margin: 0 } i {}
}'
)
)-> cssRules->[0];
is +()=$rule->deleteRule(1), 0, 'retval of deleteRule';
is_deeply [map $_->selectorText, $rule->cssRules], [qw/ a i /],
'result of deleteRule';
eval {
$rule->deleteRule(79);
};
isa_ok $@, 'CSS::DOM::Exception', 'exception thrown by deleteRule';
cmp_ok $@, '==', CSS::DOM::Exception::INDEX_SIZE_ERR,
'error raised by deleteRule';
}
|