summaryrefslogtreecommitdiff
path: root/t/Eval.pm
blob: bbd49e566c070443438540454d5345a5a2d28de9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package t::Eval;

use warnings;
use strict;

use Test::More;

sub _ok_no_eval() {
	my $lastsub = "";
	my $i = 0;
	while(1) {
		my @c = caller($i);
		unless(@c) {
			ok 0;
			diag "failed to find main program in stack trace";
			return;
		}
		my $sub = $c[3];
		if($sub eq "main::eval_test") {
			ok 1;
			return;
		}
		my $type = $sub ne "(eval)" ? "subroutine" :
			$c[7] ? "require" :
			defined($c[6]) ? "string eval" : "block eval";
		if($type =~ /eval/ && !($lastsub eq "t::Eval::BEGIN" &&
					$type eq "block eval")) {
			ok 0;
			diag "have $type between module and main program";
			return;
		}
		$lastsub = $sub;
		$i++;
	}
}

BEGIN { _ok_no_eval(); }
_ok_no_eval();
sub import { _ok_no_eval(); }

1;