@@ -9,39 +9,35 @@ my $exitstatus = 0;
99my @idrOpts = ();
1010
1111
12−# Determines how idris was built locally, returning a PATH modifier.
12+# Sets the PATH if there's a sandbox or stack present
1313#
1414# Order of checking is:
1515#
1616# 1. Cabal Sandboxing
1717# 2. Stack
18−# 3. Pure cabal.
1918#
20−sub sandbox_path {
19+sub set_path {
2120 my ($test_dir,) = @_;
22− my $sandbox = "$test_dir/../../.cabal-sandbox/bin";
21+ my $sandbox = "../.cabal-sandbox/bin";
2322
2423 my $stack_bin_path = `stack path --dist-dir`;
2524 $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};
2727
2828 if ( -d $sandbox ) {
29−
3029 my $sandbox_abs = abs_path($sandbox);
3130 print "Using Cabal Sandbox\n";
3231 printf("Sandbox located at: %s\n", $sandbox_abs);
33− return "PATH=\"$sandbox_abs:$PATH\"";
32+ $ENV{PATH} = $sandbox_abs . ":" . $path;
3433
3534 } elsif ( -d $stack_work_dir ) {
3635
3736 my $stack_work_abs = abs_path($stack_work_dir);
3837 print "Using Stack Work\n";
3938 printf("Stack work located at: %s\n", $stack_work_abs);
40− return "PATH=\"$stack_work_abs:$PATH\"";
39+ $ENV{PATH} = $stack_work_abs . ":" . $path;
4140
42− } else {
43− print "Using Default Cabal.\n";
44− return "";
4541 }
4642}
4743
@@ -49,15 +45,13 @@ sub sandbox_path {
4945# output and report results.
5046#
5147sub runtest {
52− my ($test, $update, $showTime) = @_;
53−
54− my $sandbox = sandbox_path($test);
48+ my ($test, $update, $showTime, $failedref, $statsref) = @_;
5549
5650 chdir($test);
5751
5852 my $startTime = time();
5953 print "Running $test...\n";
60− my $got = `$sandbox ./run @idrOpts`;
54+ my $got = `./run @idrOpts`;
6155 my $exp = `cat expected`;
6256
6357 my $endTime = time();
@@ -95,15 +89,19 @@ sub runtest {
9589
9690 if ($got eq $exp) {
9791 print "Ran $test...success\n";
92+ $statsref->{'succeeded'}++;
9893 }
9994 else {
10095 if ($update == 0) {
10196 $exitstatus = 1;
10297 print "Ran $test...FAILURE\n";
10398 system "diff output expected";
99+ push @$failedref, $test;
100+ $statsref->{'failed'}++;
104101 } else {
105102 system("cp output expected");
106103 print "Ran $test...UPDATED\n";
104+ $statsref->{'updated'}++;
107105 }
108106 }
109107 chdir "..";
@@ -169,6 +167,14 @@ my $show = 0;
169167my $usejava = 0;
170168my $showTime = 0;
171169
170+my @failed;
171+my %stats = (
172+ total => 0,
173+ succeeded => 0,
174+ failed => 0,
175+ updated => 0
176+);
177+
172178while (my $opt = shift @opts) {
173179 if ($opt eq "-u") { $update = 1; }
174180 elsif ($opt eq "-d") { $diff = 1; }
@@ -177,15 +183,22 @@ while (my $opt = shift @opts) {
177183 else { push(@idrOpts, $opt); }
178184}
179185
180−my $idris = $ENV{IDRIS};
181−my $path = $ENV{PATH};
182−$ENV{PATH} = cwd() . "/" . $idris . ":" . $path;
186+my $idris = $ENV{IDRIS};
187+
188+if (defined $ENV{IDRIS} && -e $idris ) {
189+ $ENV{IDRIS} = abs_path($idris);
190+ print "Using $idris\n";
191+} else {
192+ delete $ENV{IDRIS};
193+ set_path();
194+}
183195
184196my $startTime = time();
185197
186198foreach my $test (@tests) {
187199 if ($diff == 0 && $show == 0) {
188− runtest($test,$update,$showTime);
200+ ++$stats{'total'};
201+ runtest($test,$update,$showTime, \@failed, \%stats);
189202 }
190203 else {
191204 chdir $test;
@@ -207,6 +220,19 @@ foreach my $test (@tests) {
207220my $endTime = time();
208221my $elapsedTime = $endTime - $startTime;
209222
223+
224+print "----\n";
225+printf("%d tests run: %d succeeded, %d failed, %d updated.\n\n",
226+ $stats{'total'}, $stats{'succeeded'}, $stats{'failed'}, $stats{'updated'} );
227+
228+if (@failed) {
229+ print "Failed tests:\n";
230+ foreach my $failure (@failed) {
231+ print "$failure\n";
232+ }
233+}
234+
235+
210236if ($showTime == 1) {
211237 printf("Duration of Entire Test Suite was %d\n", $elapsedTime);
212238}