@@ -9,39 +9,35 @@ my $exitstatus = 0;
9my @idrOpts = ();
9my @idrOpts = ();
12−# Determines how idris was built locally, returning a PATH modifier.
12+# Sets the PATH if there's a sandbox or stack present
14# Order of checking is:
14# Order of checking is:
16# 1. Cabal Sandboxing
16# 1. Cabal Sandboxing
20−sub sandbox_path {
19+sub set_path {
21 my ($test_dir,) = @_;
20 my ($test_dir,) = @_;
22− my $sandbox = "$test_dir/../../.cabal-sandbox/bin";
21+ my $sandbox = "../.cabal-sandbox/bin";
24 my $stack_bin_path = `stack path --dist-dir`;
23 my $stack_bin_path = `stack path --dist-dir`;
25 $stack_bin_path =~ s/\n//g;
24 $stack_bin_path =~ s/\n//g;
26− my $stack_work_dir = "$test_dir/../../$stack_bin_path/build/idris";
25+ my $stack_work_dir = "../$stack_bin_path/build/idris";
26+ my $path = $ENV{PATH};
28 if ( -d $sandbox ) {
28 if ( -d $sandbox ) {
30 my $sandbox_abs = abs_path($sandbox);
29 my $sandbox_abs = abs_path($sandbox);
31 print "Using Cabal Sandbox\n";
30 print "Using Cabal Sandbox\n";
32 printf("Sandbox located at: %s\n", $sandbox_abs);
31 printf("Sandbox located at: %s\n", $sandbox_abs);
33− return "PATH=\"$sandbox_abs:$PATH\"";
32+ $ENV{PATH} = $sandbox_abs . ":" . $path;
35 } elsif ( -d $stack_work_dir ) {
34 } elsif ( -d $stack_work_dir ) {
37 my $stack_work_abs = abs_path($stack_work_dir);
36 my $stack_work_abs = abs_path($stack_work_dir);
38 print "Using Stack Work\n";
37 print "Using Stack Work\n";
39 printf("Stack work located at: %s\n", $stack_work_abs);
38 printf("Stack work located at: %s\n", $stack_work_abs);
40− return "PATH=\"$stack_work_abs:$PATH\"";
39+ $ENV{PATH} = $stack_work_abs . ":" . $path;
43− print "Using Default Cabal.\n";
@@ -49,15 +45,13 @@ sub sandbox_path {
49# output and report results.
45# output and report results.
51sub runtest {
47sub runtest {
52− my ($test, $update, $showTime) = @_;
48+ my ($test, $update, $showTime, $failedref, $statsref) = @_;
54− my $sandbox = sandbox_path($test);
56 chdir($test);
50 chdir($test);
58 my $startTime = time();
52 my $startTime = time();
59 print "Running $test...\n";
53 print "Running $test...\n";
60− my $got = `$sandbox ./run @idrOpts`;
54+ my $got = `./run @idrOpts`;
61 my $exp = `cat expected`;
55 my $exp = `cat expected`;
63 my $endTime = time();
57 my $endTime = time();
@@ -95,15 +89,19 @@ sub runtest {
96 if ($got eq $exp) {
90 if ($got eq $exp) {
97 print "Ran $test...success\n";
91 print "Ran $test...success\n";
92+ $statsref->{'succeeded'}++;
100 if ($update == 0) {
95 if ($update == 0) {
101 $exitstatus = 1;
96 $exitstatus = 1;
102 print "Ran $test...FAILURE\n";
97 print "Ran $test...FAILURE\n";
103 system "diff output expected";
98 system "diff output expected";
99+ push @$failedref, $test;
100+ $statsref->{'failed'}++;
105 system("cp output expected");
102 system("cp output expected");
106 print "Ran $test...UPDATED\n";
103 print "Ran $test...UPDATED\n";
104+ $statsref->{'updated'}++;
109 chdir "..";
107 chdir "..";
@@ -169,6 +167,14 @@ my $show = 0;
169my $usejava = 0;
167my $usejava = 0;
170my $showTime = 0;
168my $showTime = 0;
172while (my $opt = shift @opts) {
178while (my $opt = shift @opts) {
173 if ($opt eq "-u") { $update = 1; }
179 if ($opt eq "-u") { $update = 1; }
174 elsif ($opt eq "-d") { $diff = 1; }
180 elsif ($opt eq "-d") { $diff = 1; }
@@ -177,15 +183,22 @@ while (my $opt = shift @opts) {
177 else { push(@idrOpts, $opt); }
183 else { push(@idrOpts, $opt); }
180−my $idris = $ENV{IDRIS};
186+my $idris = $ENV{IDRIS};
181−my $path = $ENV{PATH};
187+
182−$ENV{PATH} = cwd() . "/" . $idris . ":" . $path;
188+if (defined $ENV{IDRIS} && -e $idris ) {
189+ $ENV{IDRIS} = abs_path($idris);
190+ print "Using $idris\n";
184my $startTime = time();
196my $startTime = time();
186foreach my $test (@tests) {
198foreach my $test (@tests) {
187 if ($diff == 0 && $show == 0) {
199 if ($diff == 0 && $show == 0) {
188− runtest($test,$update,$showTime);
201+ runtest($test,$update,$showTime, \@failed, \%stats);
191 chdir $test;
204 chdir $test;
@@ -207,6 +220,19 @@ foreach my $test (@tests) {
207my $endTime = time();
220my $endTime = time();
208my $elapsedTime = $endTime - $startTime;
221my $elapsedTime = $endTime - $startTime;
225+printf("%d tests run: %d succeeded, %d failed, %d updated.\n\n",
226+ $stats{'total'}, $stats{'succeeded'}, $stats{'failed'}, $stats{'updated'} );
229+ print "Failed tests:\n";
230+ foreach my $failure (@failed) {
210if ($showTime == 1) {
236if ($showTime == 1) {
211 printf("Duration of Entire Test Suite was %d\n", $elapsedTime);
237 printf("Duration of Entire Test Suite was %d\n", $elapsedTime);