PPIx-Utilities
view release on metacpan or search on metacpan
t/split-ppi-node-by-namespace.t view on Meta::CPAN
[ 10, 1, 1 ] PPI::Token::Whitespace ' '
[ 20, 6, 6 ] PPI::Token::Whitespace '\n'
END_EXPECTED_FOO
<<'END_EXPECTED_FOO',
PPI::Document::Fragment
PPI::Statement::Package
[ 12, 13, 13 ] PPI::Token::Word 'package'
[ 12, 20, 20 ] PPI::Token::Whitespace ' '
[ 12, 21, 21 ] PPI::Token::Word 'Foo'
[ 12, 24, 24 ] PPI::Token::Structure ';'
[ 12, 25, 25 ] PPI::Token::Whitespace '\n'
[ 13, 1, 1 ] PPI::Token::Whitespace ' '
PPI::Statement::Package
[ 14, 13, 13 ] PPI::Token::Word 'package'
[ 14, 20, 20 ] PPI::Token::Whitespace ' '
[ 14, 21, 21 ] PPI::Token::Word 'Foo'
[ 14, 24, 24 ] PPI::Token::Structure ';'
[ 14, 25, 25 ] PPI::Token::Whitespace '\n'
[ 15, 1, 1 ] PPI::Token::Whitespace ' '
END_EXPECTED_FOO
<<'END_EXPECTED_FOO',
PPI::Document::Fragment
PPI::Statement::Package
[ 17, 17, 17 ] PPI::Token::Word 'package'
[ 17, 24, 24 ] PPI::Token::Whitespace ' '
[ 17, 25, 25 ] PPI::Token::Word 'Foo'
[ 17, 28, 28 ] PPI::Token::Structure ';'
[ 17, 29, 29 ] PPI::Token::Whitespace '\n'
[ 18, 1, 1 ] PPI::Token::Whitespace ' '
END_EXPECTED_FOO
],
Bar => [ <<'END_EXPECTED_BAR' ],
PPI::Document::Fragment
PPI::Statement::Package
[ 13, 13, 13 ] PPI::Token::Word 'package'
[ 13, 20, 20 ] PPI::Token::Whitespace ' '
[ 13, 21, 21 ] PPI::Token::Word 'Bar'
[ 13, 24, 24 ] PPI::Token::Structure ';'
[ 13, 25, 25 ] PPI::Token::Whitespace '\n'
[ 14, 1, 1 ] PPI::Token::Whitespace ' '
END_EXPECTED_BAR
);
_test(
$source,
\%expected,
'Heavilly nested namespaces.',
);
} # end scope block
sub _test {
my ($source, $expected_ref, $test_name) = @_;
my $document = PPI::Document->new(\$source);
my %expanded_expected;
while ( my ($namespace, $strings) = each %{$expected_ref} ) {
$expanded_expected{$namespace} =
[ map { [ split m/ \n /xms ] } @{$strings} ];
} # end while
my $got = split_ppi_node_by_namespace($document);
my %got_expanded;
while ( my ($namespace, $ppi_doms) = each %{$got} ) {
$got_expanded{$namespace} =
[
map {
[ map { _expand_tabs($_) } _new_dumper($_)->list() ]
}
@{$ppi_doms}
];
} # end while
cmp_deeply(\%got_expanded, \%expanded_expected, $test_name)
or diag(
Data::Dumper->Dump(
[\%got_expanded, \%expanded_expected],
[ qw<got_expanded expanded_expected> ],
)
);
return;
} # end _test()
sub _new_dumper {
my ($node) = @_;
return PPI::Dumper->new($node, indent => $DUMP_INDENT, locations => 1);
} # end _new_dumper()
# Why Adam had to put @#$^@#$&^ hard tabs in his dumper output, I don't know.
sub _expand_tabs {
my ($string) = @_;
while (
$string =~
s< \A ( [^\t]* ) ( \t+ ) >
<$1 . ( ' ' x (length($2) * $DUMP_INDENT - length($1) % $DUMP_INDENT) )>xmse
) {
# Nothing here.
} # end while
return $string;
} # end _expand_tabs()
# $URL: http://perlcritic.tigris.org/svn/perlcritic/trunk/distributions/PPIx-Utilities/t/split-ppi-node-by-namespace.t $
# $Date: 2010-11-13 14:25:12 -0600 (Sat, 13 Nov 2010) $
# $Author: clonezone $
# $Revision: 3990 $
# Local Variables:
# mode: cperl
# cperl-indent-level: 4
# fill-column: 78
# indent-tabs-mode: nil
# c-indentation-style: bsd
( run in 0.419 second using v1.01-cache-2.11-cpan-71847e10f99 )