Blame test.pl

Packit 5b6b86
#!/usr/bin/perl
Packit 5b6b86
#
Packit 5b6b86
# nkf test program for nkf 2.0
Packit 5b6b86
#    Shinji KONO <kono@ie.u-ryukyu.ac.jp>
Packit 5b6b86
# Sun Aug 18 12:25:40 JST 1996
Packit 5b6b86
# Sun Nov  8 00:16:06 JST 1998
Packit 5b6b86
# Sun Sep  8 14:04:02 JST 2002
Packit 5b6b86
#
Packit 5b6b86
# This is useful when you add new patch on nkf.
Packit 5b6b86
# Since this test is too strict, faileurs may not mean
Packit 5b6b86
# wrong conversion. 
Packit 5b6b86
#
Packit 5b6b86
# nkf 2.0 utf8
Packit 5b6b86
# nkf 1.5 differs on MIME decoding
Packit 5b6b86
# nkf 1.4 passes Basic Conversion tests
Packit 5b6b86
# nkf PDS version passes Basic Conversion tests  using "nkf -iB -oB "
Packit 5b6b86
#
Packit 5b6b86
Packit 5b6b86
if ($ARGV[0]) {
Packit 5b6b86
    $nkf = $ARGV[0];
Packit 5b6b86
} else {
Packit 5b6b86
    $nkf = 'MSWin32' eq $^O ? ".\\nkf" : "./nkf";
Packit 5b6b86
}
Packit 5b6b86
# $nkf = "doscmd nkf.exe";
Packit 5b6b86
Packit 5b6b86
# If you want to see the testing process, set next flag.
Packit 5b6b86
Packit 5b6b86
$error_count = 0;
Packit 5b6b86
$diff=1;
Packit 5b6b86
Packit 5b6b86
# &library_test0();
Packit 5b6b86
sub test {
Packit 5b6b86
    &command_test(@_);
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
sub command_test {
Packit 5b6b86
    local ($nkf,$in,@ans) = @_;
Packit 5b6b86
    local ($result);
Packit 5b6b86
Packit 5b6b86
    $result = '';
Packit 5b6b86
    open(OUT,"> nkf.in");
Packit 5b6b86
    binmode OUT;
Packit 5b6b86
    print OUT $in;
Packit 5b6b86
    close(OUT);
Packit 5b6b86
    system("$nkf <nkf.in >nkf.out");   # easy
Packit 5b6b86
    open(IN,"< nkf.out");
Packit 5b6b86
    binmode IN;
Packit 5b6b86
    while(<IN>) {
Packit 5b6b86
	$result .= $_;
Packit 5b6b86
    }
Packit 5b6b86
Packit 5b6b86
    $result =~ s/ //g if $nkf =~ /-\w+m[NS]/o;
Packit 5b6b86
    foreach $ans (@ans) {
Packit 5b6b86
	$ans =~ s/ //g if $nkf =~ /-\w+m[NS]/o;
Packit 5b6b86
        if ($result eq $ans) {
Packit 5b6b86
	    print "Ok\n";
Packit 5b6b86
	    return $result;
Packit 5b6b86
	}
Packit 5b6b86
    }
Packit 5b6b86
    $ans = $ans[0];
Packit 5b6b86
    print "Fail\n";
Packit 5b6b86
    system "mv nkf.in nkf.in.$error_count.bad";
Packit 5b6b86
    system "mv nkf.out nkf.out.$error_count.bad";
Packit 5b6b86
    open(OUT,"> nkf.expect.$error_count.bad");
Packit 5b6b86
    binmode OUT;
Packit 5b6b86
    print OUT $ans;
Packit 5b6b86
    close(OUT);
Packit 5b6b86
    $error_count++;
Packit 5b6b86
    if ($diff) {
Packit 5b6b86
	open(R,"|od -c >tmp.result.bad"); binmode R; print R $result; close(R);
Packit 5b6b86
	open(R,"|od -c >tmp.expect.bad"); binmode R; print R $ans; close(R);
Packit 5b6b86
	system "diff -c tmp.result.bad tmp.expect.bad";
Packit 5b6b86
    }
Packit 5b6b86
    return $result;
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
sub command_tests {
Packit 5b6b86
    my @tests = @_;
Packit 5b6b86
    my ($in, $out, $ans);
Packit 5b6b86
Packit 5b6b86
    for (my $i = 0; $i <= $#tests; $i += 3){
Packit 5b6b86
	my $nkf = $tests[$i];
Packit 5b6b86
	$in = $tests[$i+1];
Packit 5b6b86
	$ans = $tests[$i+2];
Packit 5b6b86
	$out = '';
Packit 5b6b86
	open(OUT, "> nkf.in");
Packit 5b6b86
	binmode OUT;
Packit 5b6b86
	print OUT $in;
Packit 5b6b86
	close(OUT);
Packit 5b6b86
	system("$nkf <nkf.in >nkf.out");   # easy
Packit 5b6b86
	open(IN,"< nkf.out");
Packit 5b6b86
	binmode IN;
Packit 5b6b86
	while (<IN>) {
Packit 5b6b86
	    $out .= $_;
Packit 5b6b86
	}
Packit 5b6b86
	close(IN);
Packit 5b6b86
	$out =~ s/ //g if $nkf =~ /-\w+m[NS]/o;
Packit 5b6b86
	$ans =~ s/ //g if $nkf =~ /-\w+m[NS]/o;
Packit 5b6b86
        if ($out ne $ans) {
Packit 5b6b86
	    last;
Packit 5b6b86
	}
Packit 5b6b86
    }
Packit 5b6b86
    if ($out eq $ans) {
Packit 5b6b86
	print "Ok\n";
Packit 5b6b86
	return;
Packit 5b6b86
    }
Packit 5b6b86
    print "Fail\n";
Packit 5b6b86
    system "mv nkf.in nkf.in.$error_count.bad";
Packit 5b6b86
    system "mv nkf.out nkf.out.$error_count.bad";
Packit 5b6b86
    open(OUT,"> nkf.expect.$error_count.bad");
Packit 5b6b86
    binmode OUT;
Packit 5b6b86
    print OUT $ans;
Packit 5b6b86
    close(OUT);
Packit 5b6b86
    $error_count++;
Packit 5b6b86
    if ($diff) {
Packit 5b6b86
	open(R,"|od -c >tmp.result.bad"); binmode R; print R $out; close(R);
Packit 5b6b86
	open(R,"|od -c >tmp.expect.bad"); binmode R; print R $ans; close(R);
Packit 5b6b86
	system "diff -c tmp.result.bad tmp.expect.bad";
Packit 5b6b86
    }
Packit 5b6b86
    return;
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
do "nkf_test.pl";
Packit 5b6b86
unlink "nkf.in";
Packit 5b6b86
unlink "nkf.out";
Packit 5b6b86
Packit 5b6b86
if ($error_count > 1) {
Packit 5b6b86
    printf("%d errors were found.\n", $error_count);
Packit 5b6b86
} elsif ($error_count == 1) {
Packit 5b6b86
    printf("1 error was found.\n");
Packit 5b6b86
} else {
Packit 5b6b86
    printf("All tests are succeeded.\n");
Packit 5b6b86
}