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 )