PPIx-Utils
view release on metacpan or search on metacpan
t/split_ppi_node_by_namespace.t view on Meta::CPAN
[ 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.',
);
}
sub _test {
my ($source, $expected_ref, $test_name) = @_;
my $document = PPI::Document->new(\$source);
my %expanded_expected;
foreach my $namespace ( keys %{$expected_ref} ) {
my $strings = $expected_ref->{$namespace};
$expanded_expected{$namespace} =
[ map { [ split m/ \n /x ] } @{$strings} ];
}
my $got = split_ppi_node_by_namespace($document);
my %got_expanded;
foreach my $namespace ( keys %{$got} ) {
my $ppi_doms = $got->{$namespace};
$got_expanded{$namespace} =
[
map {
[ map { _expand_tabs($_) } _new_dumper($_)->list() ]
}
@{$ppi_doms}
];
}
is_deeply(\%got_expanded, \%expanded_expected, $test_name)
or diag(
Data::Dumper->Dump(
[\%got_expanded, \%expanded_expected],
[ qw<got_expanded expanded_expected> ],
)
);
return;
}
sub _new_dumper {
my ($node) = @_;
return PPI::Dumper->new($node, indent => $DUMP_INDENT, locations => 1);
}
# 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) )>xe
) {
# Nothing here.
}
return $string;
}
done_testing;
( run in 2.403 seconds using v1.01-cache-2.11-cpan-71847e10f99 )