Blame t/05prune.t

Packit 0e0e0d
#!/usr/bin/perl
Packit 0e0e0d
Packit 0e0e0d
use strict;
Packit 0e0e0d
use warnings;
Packit 0e0e0d
Packit 0e0e0d
use Test::More tests => 4;
Packit 0e0e0d
Packit 0e0e0d
BEGIN
Packit 0e0e0d
{
Packit 0e0e0d
    use File::Spec;
Packit 0e0e0d
    use lib File::Spec->catdir(File::Spec->curdir(), "t", "lib");
Packit 0e0e0d
}
Packit 0e0e0d
Packit 0e0e0d
use File::Find::Object::TreeCreate;
Packit 0e0e0d
use File::Find::Object;
Packit 0e0e0d
Packit 0e0e0d
use File::Path;
Packit 0e0e0d
Packit 0e0e0d
{
Packit 0e0e0d
    my $tree =
Packit 0e0e0d
    {
Packit 0e0e0d
        'name' => "prune--traverse-2/",
Packit 0e0e0d
        'subs' =>
Packit 0e0e0d
        [
Packit 0e0e0d
            {
Packit 0e0e0d
                'name' => "b.doc",
Packit 0e0e0d
                'contents' => "This file was spotted in the wild.",
Packit 0e0e0d
            },
Packit 0e0e0d
            {
Packit 0e0e0d
                'name' => "a/",
Packit 0e0e0d
            },
Packit 0e0e0d
            {
Packit 0e0e0d
                'name' => "foo/",
Packit 0e0e0d
                'subs' =>
Packit 0e0e0d
                [
Packit 0e0e0d
                    {
Packit 0e0e0d
                        'name' => "please-prune-me/",
Packit 0e0e0d
                        'subs' =>
Packit 0e0e0d
                        [
Packit 0e0e0d
                            {
Packit 0e0e0d
                                'name' => "a-non-reachable-dir/",
Packit 0e0e0d
                                'subs' =>
Packit 0e0e0d
                                [
Packit 0e0e0d
                                    {
Packit 0e0e0d
                                        'name' => "dir1/",
Packit 0e0e0d
                                    },
Packit 0e0e0d
                                    {
Packit 0e0e0d
                                        'name' => "dir2/",
Packit 0e0e0d
                                    },
Packit 0e0e0d
                                    {
Packit 0e0e0d
                                        'name' =>
Packit 0e0e0d
                                            "if-we-get-this-its-wrong.txt",
Packit 0e0e0d
                                        'content' => "Hi ho!",
Packit 0e0e0d
                                    },
Packit 0e0e0d
                                ],
Packit 0e0e0d
                            },
Packit 0e0e0d
                            {
Packit 0e0e0d
                                'name' => "h.rnd",
Packit 0e0e0d
                                'contents' => "This file is empty.",
Packit 0e0e0d
                            },
Packit 0e0e0d
                            {
Packit 0e0e0d
                                'name' => "lambda.calculus",
Packit 0e0e0d
                                'contents' => '\f \x (f (f x))'
Packit 0e0e0d
                            },
Packit 0e0e0d
                        ],
Packit 0e0e0d
                    },
Packit 0e0e0d
                ],
Packit 0e0e0d
            },
Packit 0e0e0d
        ],
Packit 0e0e0d
    };
Packit 0e0e0d
Packit 0e0e0d
    my $t = File::Find::Object::TreeCreate->new();
Packit 0e0e0d
    $t->create_tree("./t/sample-data/", $tree);
Packit 0e0e0d
    my $ff =
Packit 0e0e0d
        File::Find::Object->new(
Packit 0e0e0d
            {},
Packit 0e0e0d
            $t->get_path("./t/sample-data/prune--traverse-2")
Packit 0e0e0d
        );
Packit 0e0e0d
    my @results;
Packit 0e0e0d
    for my $i (1 .. 7)
Packit 0e0e0d
    {
Packit 0e0e0d
        my $file = $ff->next();
Packit 0e0e0d
        # We're doing that because get_current_node_files_list() used to
Packit 0e0e0d
        # call ->_recurse() which caused some subtle bugs.
Packit 0e0e0d
        my $files_in_node = $ff->get_current_node_files_list();
Packit 0e0e0d
Packit 0e0e0d
        if ($file eq
Packit 0e0e0d
            $t->get_path("t/sample-data/prune--traverse-2/foo/please-prune-me")
Packit 0e0e0d
           )
Packit 0e0e0d
        {
Packit 0e0e0d
            $ff->set_traverse_to(
Packit 0e0e0d
                [
Packit 0e0e0d
                    grep { $_ !~ /non-reachable/ }
Packit 0e0e0d
                    @{$ff->get_current_node_files_list()}
Packit 0e0e0d
                ]
Packit 0e0e0d
            );
Packit 0e0e0d
Packit 0e0e0d
            # TEST
Packit 0e0e0d
            is_deeply ($ff->get_traverse_to(), ["h.rnd", "lambda.calculus"],
Packit 0e0e0d
                "Testing ->get_traverse_to()"
Packit 0e0e0d
            );
Packit 0e0e0d
        }
Packit 0e0e0d
        push @results, $file;
Packit 0e0e0d
    }
Packit 0e0e0d
    # TEST
Packit 0e0e0d
    is_deeply(
Packit 0e0e0d
        \@results,
Packit 0e0e0d
        [(map { $t->get_path("t/sample-data/prune--traverse-2/$_") }
Packit 0e0e0d
            ("",
Packit 0e0e0d
            qw(
Packit 0e0e0d
                a
Packit 0e0e0d
                b.doc
Packit 0e0e0d
                foo
Packit 0e0e0d
                foo/please-prune-me
Packit 0e0e0d
                foo/please-prune-me/h.rnd
Packit 0e0e0d
                foo/please-prune-me/lambda.calculus
Packit 0e0e0d
            )))
Packit 0e0e0d
        ],
Packit 0e0e0d
        "Checking for regular, lexicographically sorted order",
Packit 0e0e0d
    );
Packit 0e0e0d
Packit 0e0e0d
    rmtree($t->get_path("./t/sample-data/prune--traverse-2"))
Packit 0e0e0d
}
Packit 0e0e0d
Packit 0e0e0d
{
Packit 0e0e0d
    my $tree =
Packit 0e0e0d
    {
Packit 0e0e0d
        'name' => "prune--traverse-2/",
Packit 0e0e0d
        'subs' =>
Packit 0e0e0d
        [
Packit 0e0e0d
            {
Packit 0e0e0d
                'name' => "b.doc",
Packit 0e0e0d
                'contents' => "This file was spotted in the wild.",
Packit 0e0e0d
            },
Packit 0e0e0d
            {
Packit 0e0e0d
                'name' => "a/",
Packit 0e0e0d
            },
Packit 0e0e0d
            {
Packit 0e0e0d
                'name' => "foo/",
Packit 0e0e0d
                'subs' =>
Packit 0e0e0d
                [
Packit 0e0e0d
                    {
Packit 0e0e0d
                        'name' => "please-prune-me/",
Packit 0e0e0d
                        'subs' =>
Packit 0e0e0d
                        [
Packit 0e0e0d
                            {
Packit 0e0e0d
                                'name' => "a-non-reachable-dir/",
Packit 0e0e0d
                                'subs' =>
Packit 0e0e0d
                                [
Packit 0e0e0d
                                    {
Packit 0e0e0d
                                        'name' => "dir1/",
Packit 0e0e0d
                                    },
Packit 0e0e0d
                                    {
Packit 0e0e0d
                                        'name' => "dir2/",
Packit 0e0e0d
                                    },
Packit 0e0e0d
                                    {
Packit 0e0e0d
                                        'name' =>
Packit 0e0e0d
                                            "if-we-get-this-its-wrong.txt",
Packit 0e0e0d
                                        'content' => "Hi ho!",
Packit 0e0e0d
                                    },
Packit 0e0e0d
                                ],
Packit 0e0e0d
                            },
Packit 0e0e0d
                            {
Packit 0e0e0d
                                'name' => "h.rnd",
Packit 0e0e0d
                                'contents' => "This file is empty.",
Packit 0e0e0d
                            },
Packit 0e0e0d
                            {
Packit 0e0e0d
                                'name' => "lambda.calculus",
Packit 0e0e0d
                                'contents' => '\f \x (f (f x))'
Packit 0e0e0d
                            },
Packit 0e0e0d
                        ],
Packit 0e0e0d
                    },
Packit 0e0e0d
                    {
Packit 0e0e0d
                        'name' => "zardoz/",
Packit 0e0e0d
                        'subs' =>
Packit 0e0e0d
                        [
Packit 0e0e0d
                            {
Packit 0e0e0d
                                'name' => "p.txt",
Packit 0e0e0d
                                'contents' => "Intentionally Left Boring.",
Packit 0e0e0d
                            },
Packit 0e0e0d
                        ],
Packit 0e0e0d
                    },
Packit 0e0e0d
                ],
Packit 0e0e0d
            },
Packit 0e0e0d
            {
Packit 0e0e0d
                'name' => "zardoz/",
Packit 0e0e0d
                'subs' =>
Packit 0e0e0d
                [
Packit 0e0e0d
                    {
Packit 0e0e0d
                        'name' => "p.txt",
Packit 0e0e0d
                        'contents' => "Intentionally Left Boring.",
Packit 0e0e0d
                    },
Packit 0e0e0d
                ],
Packit 0e0e0d
            },
Packit 0e0e0d
Packit 0e0e0d
        ],
Packit 0e0e0d
    };
Packit 0e0e0d
Packit 0e0e0d
    my $t = File::Find::Object::TreeCreate->new();
Packit 0e0e0d
    $t->create_tree("./t/sample-data/", $tree);
Packit 0e0e0d
    my $ff =
Packit 0e0e0d
        File::Find::Object->new(
Packit 0e0e0d
            {},
Packit 0e0e0d
            $t->get_path("./t/sample-data/prune--traverse-2")
Packit 0e0e0d
        );
Packit 0e0e0d
    my @results;
Packit 0e0e0d
    for my $i (1 .. 9)
Packit 0e0e0d
    {
Packit 0e0e0d
        my $file = $ff->next();
Packit 0e0e0d
        if ($file eq
Packit 0e0e0d
            $t->get_path("t/sample-data/prune--traverse-2/foo/please-prune-me")
Packit 0e0e0d
           )
Packit 0e0e0d
        {
Packit 0e0e0d
            $ff->prune();
Packit 0e0e0d
        }
Packit 0e0e0d
        push @results, $file;
Packit 0e0e0d
    }
Packit 0e0e0d
Packit 0e0e0d
    # TEST
Packit 0e0e0d
    ok (!defined($ff->next()), "Testing that the scan has completed.");
Packit 0e0e0d
Packit 0e0e0d
    # TEST
Packit 0e0e0d
    is_deeply(
Packit 0e0e0d
        \@results,
Packit 0e0e0d
        [(map { $t->get_path("t/sample-data/prune--traverse-2/$_") }
Packit 0e0e0d
            ("",
Packit 0e0e0d
            qw(
Packit 0e0e0d
                a
Packit 0e0e0d
                b.doc
Packit 0e0e0d
                foo
Packit 0e0e0d
                foo/please-prune-me
Packit 0e0e0d
                foo/zardoz
Packit 0e0e0d
                foo/zardoz/p.txt
Packit 0e0e0d
                zardoz
Packit 0e0e0d
                zardoz/p.txt
Packit 0e0e0d
            )))
Packit 0e0e0d
        ],
Packit 0e0e0d
        "Checking for regular, lexicographically sorted order",
Packit 0e0e0d
    );
Packit 0e0e0d
Packit 0e0e0d
    rmtree($t->get_path("./t/sample-data/prune--traverse-2"))
Packit 0e0e0d
}