use Test::Most;
use HTML::DeferableCSS;
subtest "css_files" => sub {
my $css = HTML::DeferableCSS->new(
css_root => 't/etc/css',
aliases => {
reset => 'reset',
},
);
isa_ok $css, 'HTML::DeferableCSS';
ok $css->check, 'check';
my $files = $css->css_files;
cmp_deeply $files, {
reset => [ obj_isa('Path::Tiny'), ignore(), 773 ],
}, "css_files";
is $files->{reset}->[0]->stringify => "t/etc/css/reset.min.css", "path";
is $files->{reset}->[1] => "reset.min.css", "filename";
};
subtest "css_files (alias => 1)" => sub {
my $css = HTML::DeferableCSS->new(
css_root => 't/etc/css',
aliases => {
reset => 1,
gone1 => 0,
gone2 => '',
gone3 => undef,
},
);
isa_ok $css, 'HTML::DeferableCSS';
ok $css->check, 'check';
my $files = $css->css_files;
cmp_deeply $files, {
reset => [ obj_isa('Path::Tiny'), ignore(), 773 ],
gone1 => [ undef, undef, 0 ],
gone2 => [ undef, undef, 0 ],
gone3 => [ undef, undef, 0 ],
}, "css_files";
is $files->{reset}->[0]->stringify => "t/etc/css/reset.min.css", "path";
is $files->{reset}->[1] => "reset.min.css", "filename";
};
subtest "css_files (1.css fails)" => sub {
my $css = HTML::DeferableCSS->new(
css_root => 't/etc/css',
aliases => {
one => 1,
},
);
isa_ok $css, 'HTML::DeferableCSS';
throws_ok {
$css->check;
} qr/alias 'one' refers to a non-existent file/;
throws_ok {
$css->css_files;
} qr/alias 'one' refers to a non-existent file/;
};
subtest "css_files (1.css workaround)" => sub {
my $css = HTML::DeferableCSS->new(
css_root => 't/etc/css',
aliases => {
one => "1.css",
},
);
isa_ok $css, 'HTML::DeferableCSS';
my $files = $css->css_files;
cmp_deeply $files, {
one => [ obj_isa('Path::Tiny'), '1.css', 17 ],
}, "css_files";
is $files->{one}->[0]->stringify => "t/etc/css/1.css", "path";
};
subtest "css_files (prefer_min=0)" => sub {
my $css = HTML::DeferableCSS->new(
css_root => 't/etc/css',
aliases => {
reset => 'reset',
},
prefer_min => 0,
);
isa_ok $css, 'HTML::DeferableCSS';
my $files = $css->css_files;
cmp_deeply $files, {
reset => [ obj_isa('Path::Tiny'), ignore(), 1089 ],
}, "css_files";
is $files->{reset}->[0]->stringify => "t/etc/css/reset.css", "path";
is $files->{reset}->[1] => "reset.css", "filename";
};
subtest "css_files (prefer_min=0 works when there is only min)" => sub {
my $css = HTML::DeferableCSS->new(
css_root => 't/etc/css',
aliases => {
bar => 1
},
prefer_min => 0,
);
isa_ok $css, 'HTML::DeferableCSS';
my $files = $css->css_files;
cmp_deeply $files, { bar => ignore() }, "css_files";
is $files->{bar}->[0]->stringify => "t/etc/css/bar.min.css", "path";
is $files->{bar}->[1] => "bar.min.css", "filename";
};
subtest "css_files (full name)" => sub {
my $css = HTML::DeferableCSS->new(
css_root => 't/etc/css',
prefer_min => 0,
aliases => {
reset => 'reset.css',
},
);
isa_ok $css, 'HTML::DeferableCSS';
my $files = $css->css_files;
cmp_deeply $files, {
reset => [ obj_isa('Path::Tiny'), ignore(), 1089 ],
}, "css_files";
is $files->{reset}->[0]->stringify => "t/etc/css/reset.css", "path";
is $files->{reset}->[1] => "reset.css", "filename";
};
subtest "css_files (full name)" => sub {
my $css = HTML::DeferableCSS->new(
css_root => 't/etc/css',
aliases => {
reset => 'reset.min.css',
},
);
isa_ok $css, 'HTML::DeferableCSS';
my $files = $css->css_files;
cmp_deeply $files, {
reset => [ obj_isa('Path::Tiny'), ignore(), 773 ],
}, "css_files";
is $files->{reset}->[0]->stringify => "t/etc/css/reset.min.css", "path";
is $files->{reset}->[1] => "reset.min.css", "filename";
};
subtest "css_files (bad css_root)" => sub {
# We don't test for the actual error, since that is dependent upon
# Types::Path::Tiny
dies_ok {
my $css = HTML::DeferableCSS->new(
css_root => 't/etc/cssx',
aliases => {
reset => 'resetx',
},
);
} 'constructor died';
};
subtest "css_files (bad filename)" => sub {
my $css = HTML::DeferableCSS->new(
css_root => 't/etc/css',
aliases => {
reset => 'resetx',
},
);
isa_ok $css, 'HTML::DeferableCSS';
throws_ok {
$css->check
} qr/alias 'reset' refers to a non-existent file/;
throws_ok {
$css->css_files
} qr/alias 'reset' refers to a non-existent file/;
};
subtest "css_files (URI)" => sub {
my $css = HTML::DeferableCSS->new(
css_root => 't/etc/css',
aliases => {
reset => 'http://cdn.example.com/reset.css',
},
);
isa_ok $css, 'HTML::DeferableCSS';
my $files = $css->css_files;
cmp_deeply $files, {
reset => [ undef, ignore(), ignore() ],
}, "css_files";
is $files->{reset}->[1] => "http://cdn.example.com/reset.css", "uri";
};
subtest "css_files (URI)" => sub {
my $css = HTML::DeferableCSS->new(
css_root => 't/etc/css',
aliases => {
reset => '//cdn.example.com/reset.css',
},
);
isa_ok $css, 'HTML::DeferableCSS';
my $files = $css->css_files;
cmp_deeply $files, {
reset => [ undef, ignore(), ignore() ],
}, "css_files";
is $files->{reset}->[1] => "//cdn.example.com/reset.css", "uri";
};
subtest "css_files (array ref)" => sub {
my $css = HTML::DeferableCSS->new(
css_root => 't/etc/css',
aliases => [ qw[ reset ] ],
);
isa_ok $css, 'HTML::DeferableCSS';
my $files = $css->css_files;
cmp_deeply $files, {
reset => [ obj_isa('Path::Tiny'), ignore(), 773 ],
}, "css_files";
is $files->{reset}->[0]->stringify => "t/etc/css/reset.min.css", "path";
is $files->{reset}->[1] => "reset.min.css", "filename";
};
subtest "css_files (no files)" => sub {
my $css = HTML::DeferableCSS->new(
css_root => 't/etc/css',
aliases => {},
);
isa_ok $css, 'HTML::DeferableCSS';
throws_ok {
$css->check
} qr/no aliases/;
lives_ok {
$css->css_files
} 'css_files lives ok';
};
done_testing;