The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

#!perl -T
#########################
use Test::More tests => 19;
use JavaScript::Minifier qw(minify);
### This is mainly to align the tests to 's' scripts, because s1 is
### somehow missing
can_ok('JavaScript::Minifier', 'minify');
#########################
sub filesMatch {
my $file1 = shift;
my $file2 = shift;
my $a;
my $b;
while (1) {
$a = getc($file1);
$b = getc($file2);
if (!defined($a) && !defined($b)) { # both files end at same place
return 1;
}
elsif (!defined($b) || # file2 ends first
!defined($a) || # file1 ends first
$a ne $b) { # a and b not the same
return 0;
}
}
}
sub minTest {
my $filename = shift;
open(INFILE, 't/scripts/' . $filename . '.js') or die("couldn't open file");
open(GOTFILE, '>t/scripts/' . $filename . '-got.js') or die("couldn't open file");
minify(input => *INFILE, outfile => *GOTFILE);
close(INFILE);
close(GOTFILE);
open(EXPECTEDFILE, 't/scripts/' . $filename . '-expected.js') or die("couldn't open file");
open(GOTFILE, 't/scripts/' . $filename . '-got.js') or die("couldn't open file");
ok(filesMatch(GOTFILE, EXPECTEDFILE), 'testing ' . $filename);
close(EXPECTEDFILE);
close(GOTFILE);
}
minTest('s2'); # missing semi-colons
minTest('s3'); # //@
minTest('s4'); # /*@*/
minTest('s5'); # //
minTest('s6'); # /**/
minTest('s7'); # blocks of comments
minTest('s8'); # + + - -
minTest('s9'); # alphanum
minTest('s10'); # }])
minTest('s11'); # string and regexp literals
minTest('s12'); # other characters
minTest('s13'); # comment at start
minTest('s14'); # slash following square bracket
# ... is division not RegExp
minTest('s15'); # newline-at-end-of-file
# -> not there so don't add
minTest('s16'); # newline-at-end-of-file
# -> it's there so leave it alone
is(minify(input => 'var x = 2;'), 'var x=2;', 'string literal input and ouput');
is(minify(input => "var x = 2;\n;;;alert('hi');\nvar x = 2;", stripDebug => 1), 'var x=2;var x=2;', 'scriptDebug option');
is(minify(input => 'var x = 2;', copyright => "BSD"), '/* BSD */var x=2;', 'copyright option');