updated test
[p5sagit/Filter-Keyword.git] / t / simple.t
CommitLineData
3b08744b 1use strictures 1;
a5049e16 2use Test::More;
3b08744b 3use Filter::Keyword;
4
d5503d9d 5my $shadowed_called = 0;
6sub shadowed ($&) {
7 my ($name, $sub) = @_;
8 $shadowed_called++;
9 is($name, 'fun', 'shadowed sub called with correct name');
10 is($sub->(), 'OH WHAT FUN', 'shadowed sub called with correct sub');
17022343 11}
12
3b08744b 13BEGIN {
14 (our $Kw = Filter::Keyword->new(
a5049e16 15 target_package => __PACKAGE__,
16 keyword_name => 'method',
17 parser => sub {
18 my $kw = shift;
19 if (my ($stripped, $matches) = $kw->match_source('', '{')) {
d5503d9d 20 my $name = $kw->current_match;
21 $stripped =~ s/{/sub ${name} { my \$self = shift;/;
a5049e16 22 return ($stripped, 1);
23 }
24 else {
25 return ('', 1);
26 }
27 },
28 ))->install;
29 (our $Kw2 = Filter::Keyword->new(
30 target_package => __PACKAGE__,
d5503d9d 31 keyword_name => 'shadowed',
a5049e16 32 parser => sub {
33 my $kw = shift;
34 if (my ($stripped, $matches) = $kw->match_source('', '{')) {
d5503d9d 35 my $name = $kw->current_match;
36 $stripped =~ s/{/shadowed "${name}", sub { BEGIN { Filter::Keyword::inject_after_scope(';') } /;
a5049e16 37 return ($stripped, 1);
38 }
39 else {
40 return ('', 1);
c46d1069 41 }
42 },
43 ))->install;
3b08744b 44}
45
d5503d9d 46#line 1
47method yay { is(__LINE__, 1, 'line number correct inside keyword' ); "YAY $self" } is(__LINE__, 1, 'line number correct on same line after keyword');
48is(__LINE__, 2, 'line number correct after first keyword');
a5049e16 49
d5503d9d 50#line 1
51my $x = __LINE__ . " @{[ __LINE__ ]} method foo @{[ __LINE__ ]} bar baz " . __LINE__;
52is(__LINE__, 2, 'line number correct after string with keyword');
53is($x, '1 1 method foo 1 bar baz 1', 'line numbers in constructed string are correct');
3b08744b 54
d5503d9d 55is(__PACKAGE__->yay, 'YAY ' . __PACKAGE__, 'result of keyword correct');
a5049e16 56
d5503d9d 57#line 1
a5049e16 58method spoon {
d5503d9d 59 is(__LINE__, 2, 'line number correct in multiline keyword');
a5049e16 60 'I HAZ A SPOON'
61}
62
63is(__PACKAGE__->spoon, 'I HAZ A SPOON', 'result of second method correct');
64
d5503d9d 65#line 1
66shadowed fun { is(__LINE__, 1, 'line number correct inside second keyword'); 'OH WHAT FUN' }
a5049e16 67
d5503d9d 68is($shadowed_called, 1, 'shadowed sub called only by filter output');
a5049e16 69
d5503d9d 70is(__LINE__, 5, 'line number after shadowed correct');
3b08744b 71
a5049e16 72done_testing;