xref: /openbsd-src/gnu/usr.bin/perl/t/comp/package_block.t (revision 898184e3e61f9129feb5978fad5a8c6865f00b92)
1*898184e3Ssthen#!./perl
2*898184e3Ssthen
3*898184e3Ssthenprint "1..7\n";
4*898184e3Ssthen
5*898184e3Ssthen$main::result = "";
6*898184e3Sstheneval q{
7*898184e3Ssthen    $main::result .= "a(".__PACKAGE__."/".eval("__PACKAGE__").")";
8*898184e3Ssthen    package Foo {
9*898184e3Ssthen	$main::result .= "b(".__PACKAGE__."/".eval("__PACKAGE__").")";
10*898184e3Ssthen	package Bar::Baz {
11*898184e3Ssthen	    $main::result .= "c(".__PACKAGE__."/".eval("__PACKAGE__").")";
12*898184e3Ssthen	}
13*898184e3Ssthen	$main::result .= "d(".__PACKAGE__."/".eval("__PACKAGE__").")";
14*898184e3Ssthen    }
15*898184e3Ssthen    $main::result .= "e(".__PACKAGE__."/".eval("__PACKAGE__").")";
16*898184e3Ssthen};
17*898184e3Ssthenprint $main::result eq
18*898184e3Ssthen	"a(main/main)b(Foo/Foo)c(Bar::Baz/Bar::Baz)d(Foo/Foo)e(main/main)" ?
19*898184e3Ssthen    "ok 1\n" : "not ok 1\n";
20*898184e3Ssthen
21*898184e3Ssthen$main::result = "";
22*898184e3Sstheneval q{
23*898184e3Ssthen    $main::result .= "a($Foo::VERSION)";
24*898184e3Ssthen    $main::result .= "b($Bar::VERSION)";
25*898184e3Ssthen    package Foo 11 { ; }
26*898184e3Ssthen    package Bar 22 {
27*898184e3Ssthen	$main::result .= "c(".__PACKAGE__."/".eval("__PACKAGE__").")";
28*898184e3Ssthen    }
29*898184e3Ssthen};
30*898184e3Ssthenprint $main::result eq "a(11)b(22)c(Bar/Bar)" ? "ok 2\n" : "not ok 2\n";
31*898184e3Ssthen
32*898184e3Ssthen$main::result = "";
33*898184e3Sstheneval q{
34*898184e3Ssthen    $main::result .= "a(".__PACKAGE__."/".eval("__PACKAGE__").")";
35*898184e3Ssthen    package Foo { }
36*898184e3Ssthen    $main::result .= "b(".__PACKAGE__."/".eval("__PACKAGE__").")";
37*898184e3Ssthen};
38*898184e3Ssthenprint $main::result eq "a(main/main)b(main/main)" ? "ok 3\n" : "not ok 3\n";
39*898184e3Ssthen
40*898184e3Sstheneval q[package Foo {];
41*898184e3Ssthenprint $@ =~ /\AMissing right curly / ? "ok 4\n" : "not ok 4\n";
42*898184e3Ssthen
43*898184e3Ssthen$main::result = "";
44*898184e3Sstheneval q{
45*898184e3Ssthen    $main::result .= "a(".__LINE__.")";
46*898184e3Ssthen    package Foo {
47*898184e3Ssthen	$main::result .= "b(".__LINE__.")";
48*898184e3Ssthen	package Bar::Baz {
49*898184e3Ssthen	    $main::result .= "c(".__LINE__.")";
50*898184e3Ssthen	}
51*898184e3Ssthen	$main::result .= "d(".__LINE__.")";
52*898184e3Ssthen    }
53*898184e3Ssthen    $main::result .= "e(".__LINE__.")";
54*898184e3Ssthen    package Quux { }
55*898184e3Ssthen    $main::result .= "f(".__LINE__.")";
56*898184e3Ssthen};
57*898184e3Ssthenprint $main::result eq "a(2)b(4)c(6)d(8)e(10)f(12)" ? "ok 5\n" : "not ok 5\n";
58*898184e3Ssthen
59*898184e3Ssthen$main::result = "";
60*898184e3Ssthen$main::warning = "";
61*898184e3Ssthen$SIG{__WARN__} = sub { $main::warning .= $_[0]; };
62*898184e3Sstheneval q{
63*898184e3Ssthen    $main::result .= "a(".__PACKAGE__."/".eval("__PACKAGE__").")";
64*898184e3Ssthen    goto l0;
65*898184e3Ssthen    $main::result .= "b(".__PACKAGE__."/".eval("__PACKAGE__").")";
66*898184e3Ssthen    package Foo {
67*898184e3Ssthen	$main::result .= "c(".__PACKAGE__."/".eval("__PACKAGE__").")";
68*898184e3Ssthen	l0:
69*898184e3Ssthen	$main::result .= "d(".__PACKAGE__."/".eval("__PACKAGE__").")";
70*898184e3Ssthen	goto l1;
71*898184e3Ssthen	$main::result .= "e(".__PACKAGE__."/".eval("__PACKAGE__").")";
72*898184e3Ssthen    }
73*898184e3Ssthen    $main::result .= "f(".__PACKAGE__."/".eval("__PACKAGE__").")";
74*898184e3Ssthen    l1:
75*898184e3Ssthen    $main::result .= "g(".__PACKAGE__."/".eval("__PACKAGE__").")";
76*898184e3Ssthen    goto l2;
77*898184e3Ssthen    $main::result .= "h(".__PACKAGE__."/".eval("__PACKAGE__").")";
78*898184e3Ssthen    package Bar {
79*898184e3Ssthen	l2:
80*898184e3Ssthen	$main::result .= "i(".__PACKAGE__."/".eval("__PACKAGE__").")";
81*898184e3Ssthen    }
82*898184e3Ssthen    $main::result .= "j(".__PACKAGE__."/".eval("__PACKAGE__").")";
83*898184e3Ssthen};
84*898184e3Ssthenprint $main::result eq
85*898184e3Ssthen	"a(main/main)d(Foo/Foo)g(main/main)i(Bar/Bar)j(main/main)" ?
86*898184e3Ssthen    "ok 6\n" : "not ok 6\n";
87*898184e3Ssthenprint $main::warning =~ /\A
88*898184e3Ssthen	Use\ of\ "goto"\ [^\n]*\ line\ 3\.\n
89*898184e3Ssthen	Use\ of\ "goto"\ [^\n]*\ line\ 15\.\n
90*898184e3Ssthen    \z/x ? "ok 7\n" : "not ok 7\n";
91*898184e3Ssthen
92*898184e3Ssthen1;
93