#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
#use FileHandle;
#use IPC::Open2;
# colours for output
our $norm = "[0m";
#our $bold = "[1;10m";
our $green = "[1;32m";
our $red = "[1;31m";
#our $yellow = "[1;33m";
our $tests = 0;
our $test_input;
our $expected_result;
sub read_input() {
my $text = "";
while (<>) {
last if /^RESULT:/;
$text .= $_;
}
return $text;
}
sub read_expected() {
my $expected_result = <>;
# strip begining whitespace
$expected_result =~ s/^\s+//;
# strip trailing whitespace
$expected_result =~ s/\s+$//;
return $expected_result;
}
our $basic_prog = "../type_check_test";
our $prog = $basic_prog;
while (<>) {
if (/^OPTIONS:(.*)/) {
$prog = "$basic_prog $1";
}
if (/^TEST:/) {
$test_input = read_input;
$expected_result = read_expected;
if ($expected_result eq "success") {
open (TYPECHECK, "| $prog");
print TYPECHECK $test_input;
} elsif ($expected_result eq "undefined") {
open (TYPECHECK, "| $prog -u");
print TYPECHECK $test_input;
} elsif ($expected_result eq "redefinition") {
open (TYPECHECK, "| $prog -r");
print TYPECHECK $test_input;
} elsif ($expected_result eq "wrong") {
open (TYPECHECK, "| $prog -t");
print TYPECHECK $test_input;
} elsif ($expected_result eq "builtin") {
open (TYPECHECK, "| $prog -b");
print TYPECHECK $test_input;
} else {
print "Unknown expected result: \"$expected_result\"\n";
next;
}
my $result = close (TYPECHECK);
if (! $result) {
print "\t[${red}FAILURE${norm}] in test $tests :\n$test_input\n";
exit(1);
}
$tests++;
}
}
print "\t\t\t\t[${green}SUCCESS${norm}]\n";
syntax highlighted by Code2HTML, v. 0.9.1