CSS-Minifier-XS
view release on metacpan or search on metacpan
t/minify-collapse-zeroes.t view on Meta::CPAN
#!/usr/bin/perl
use strict;
use warnings;
use if $ENV{AUTOMATED_TESTING}, 'Test::DiagINC'; use Test::More;
use CSS::Minifier::XS qw(minify);
###############################################################################
# When collapsing "zeroes", we ONLY want to collapse ones that are genuine
# numeric values. We should NOT be collapsing identifier/filename fragments
# that simply happen to begin with a "0" (e.g. "status-0.png").
subtest 'identifiers w/zeroes are preserved' => sub {
is minify('a{background:url(0.png)}'), 'a{background:url(0.png)}', 'paren: 0.png';
is minify('a{background:url(001.png)}'), 'a{background:url(001.png)}', 'paren: 001.png';
is minify('a{background:url(img/0.png)}'), 'a{background:url(img/0.png)}', 'slash: img/0.png';
is minify('a{background:url(a.png),url(0.png)}'), 'a{background:url(a.png),url(0.png)}', 'comma list: 0.png';
};
###############################################################################
# Verify that leading-zeroes in identifiers are preserved.
subtest 'leading zeroes in identifiers are preserved' => sub {
is minify('.grid-001{color:red}'), '.grid-001{color:red}', 'class .grid-001';
is minify('.icon-007{color:red}'), '.icon-007{color:red}', 'class .icon-007';
is minify('#item-001{color:red}'), '#item-001{color:red}', 'id #item-001';
is minify(':root{--spacing-001:5px}'), ':root{--spacing-001:5px}', 'custom property name';
is minify('a{animation-name:spin-001}'), 'a{animation-name:spin-001}', 'animation name';
};
###############################################################################
# Verify that leading-zeroes in url() paths are preserved
subtest 'leading zeroes in url() paths are preserved' => sub {
is minify('a{background:url(cache/00/x.png)}'), 'a{background:url(cache/00/x.png)}', 'numeric cache dir /00/';
is minify('a{background:url(v1/007/icon.png)}'), 'a{background:url(v1/007/icon.png)}', 'numeric path segment /007/';
};
###############################################################################
# Double-check that numeric values collapse as expected.
#
# While yes, this is somewhat duplicative to tests already done in "minify.t",
# I'm leaving them here as well for mental context.
subtest 'numeric values collapse as expected' => sub {
is minify('a{margin:0px}'), 'a{margin:0}', '0px -> 0';
is minify('a{opacity:0.5}'), 'a{opacity:.5}', '0.5 -> .5';
is minify('a{opacity:0.50}'), 'a{opacity:.50}', '0.50 -> .50';
is minify('a{margin:0.0px}'), 'a{margin:0}', '0.0px -> 0';
is minify('a{margin:0px}'), 'a{margin:0}', '0px -> 0';
is minify('a{margin:-0.5px}'), 'a{margin:-.5px}', 'negative -0.5px -> -.5px';
is minify('a{color:rgba(0,0,0,0.5)}'), 'a{color:rgba(0,0,0,.5)}', 'rgba alpha 0.5 -> .5';
};
###############################################################################
done_testing();
( run in 1.623 second using v1.01-cache-2.11-cpan-b16cb0d3907 )