Blame t/2-static_functional_interface_fake.t

Packit 82cce8
#!/usr/bin/perl
Packit 82cce8

Packit 82cce8
use strict;
Packit 82cce8
use warnings;
Packit 82cce8

Packit 82cce8
use Test::More tests => 304;
Packit 82cce8
use lib qw(t t/data/static);
Packit 82cce8
use Utils;
Packit 82cce8
use version;
Packit 82cce8

Packit 82cce8

Packit 82cce8
##############################################################
Packit 82cce8
# Tests compilation of Module::ScanDeps
Packit 82cce8
##############################################################
Packit 82cce8
BEGIN { use_ok( 'Module::ScanDeps' ); }
Packit 82cce8

Packit 82cce8

Packit 82cce8
##############################################################
Packit 82cce8
# Static dependency check of a script that doesn't use
Packit 82cce8
# anything
Packit 82cce8
##############################################################
Packit 82cce8
my @roots1 = qw(t/data/static/null.pl);
Packit 82cce8
my $expected_rv1 =
Packit 82cce8
{
Packit 82cce8
  "null.pl" => {
Packit 82cce8
                 file => generic_abs_path("t/data/static/null.pl"),
Packit 82cce8
                 key => "null.pl",
Packit 82cce8
                 type => "data",
Packit 82cce8
               },
Packit 82cce8
};
Packit 82cce8

Packit 82cce8
# Functional i/f
Packit 82cce8
my $rv1 = scan_deps(@roots1);
Packit 82cce8
compare_scandeps_rvs($rv1, $expected_rv1, \@roots1);
Packit 82cce8

Packit 82cce8

Packit 82cce8
##############################################################
Packit 82cce8
# Static dependency check of a circular dependency:
Packit 82cce8
#        ___
Packit 82cce8
#     |/_   \
Packit 82cce8
#     M     _M
Packit 82cce8
#      \____/|
Packit 82cce8
#
Packit 82cce8
##############################################################
Packit 82cce8
my @roots2 = qw(t/data/static/egg.pm);
Packit 82cce8
my $expected_rv2 =
Packit 82cce8
{
Packit 82cce8
  "chicken.pm" => {
Packit 82cce8
                    file    => generic_abs_path("t/data/static/chicken.pm"),
Packit 82cce8
                    key     => "chicken.pm",
Packit 82cce8
                    type    => "module",
Packit 82cce8
                    used_by => ["egg.pm"],
Packit 82cce8
                    uses    => ["egg.pm"],
Packit 82cce8
                  },
Packit 82cce8
  "egg.pm"     => {
Packit 82cce8
                    file    => generic_abs_path("t/data/static/egg.pm"),
Packit 82cce8
                    key     => "egg.pm",
Packit 82cce8
                    type    => "module",
Packit 82cce8
                    used_by => ["chicken.pm"],
Packit 82cce8
                    uses    => ["chicken.pm"],
Packit 82cce8
                  },
Packit 82cce8
};
Packit 82cce8

Packit 82cce8
# Functional i/f
Packit 82cce8
my $rv2 = scan_deps(@roots2);
Packit 82cce8
compare_scandeps_rvs($rv2, $expected_rv2, \@roots2);
Packit 82cce8

Packit 82cce8

Packit 82cce8
##############################################################
Packit 82cce8
# Static dependency check of the following dependency tree
Packit 82cce8
#
Packit 82cce8
#                            M
Packit 82cce8
#                           /|\
Packit 82cce8
#                          / | \
Packit 82cce8
#                         /  |  \
Packit 82cce8
#                        /   M   \
Packit 82cce8
#                       /   / \   \
Packit 82cce8
#                      /   /   \   \
Packit 82cce8
#                     M   M     M   M
Packit 82cce8
#                      \   \   /   /
Packit 82cce8
#                       \   \ /   /
Packit 82cce8
#                        \   M   /
Packit 82cce8
#                         \  |  /
Packit 82cce8
#                          \ | /
Packit 82cce8
#                            M
Packit 82cce8
#
Packit 82cce8
#   With dependencies always going from the top downwards
Packit 82cce8
##############################################################
Packit 82cce8
my @roots3 = qw(t/data/static/outer_diamond_N.pm);
Packit 82cce8
my $expected_rv3 =
Packit 82cce8
{
Packit 82cce8
  "inner_diamond_E.pm" => {
Packit 82cce8
                            file    => generic_abs_path("t/data/static/inner_diamond_E.pm"),
Packit 82cce8
                            key     => "inner_diamond_E.pm",
Packit 82cce8
                            type    => "module",
Packit 82cce8
                            used_by => ["inner_diamond_N.pm"],
Packit 82cce8
                            uses    => ["inner_diamond_S.pm"],
Packit 82cce8
                          },
Packit 82cce8
  "inner_diamond_N.pm" => {
Packit 82cce8
                            file    => generic_abs_path("t/data/static/inner_diamond_N.pm"),
Packit 82cce8
                            key     => "inner_diamond_N.pm",
Packit 82cce8
                            type    => "module",
Packit 82cce8
                            used_by => ["outer_diamond_N.pm"],
Packit 82cce8
                            uses    => ["inner_diamond_E.pm", "inner_diamond_W.pm"],
Packit 82cce8
                          },
Packit 82cce8
  "inner_diamond_S.pm" => {
Packit 82cce8
                            file    => generic_abs_path("t/data/static/inner_diamond_S.pm"),
Packit 82cce8
                            key     => "inner_diamond_S.pm",
Packit 82cce8
                            type    => "module",
Packit 82cce8
                            used_by => ["inner_diamond_W.pm", "inner_diamond_E.pm"],
Packit 82cce8
                            uses    => ["outer_diamond_S.pm"],
Packit 82cce8
                          },
Packit 82cce8
  "inner_diamond_W.pm" => {
Packit 82cce8
                            file    => generic_abs_path("t/data/static/inner_diamond_W.pm"),
Packit 82cce8
                            key     => "inner_diamond_W.pm",
Packit 82cce8
                            type    => "module",
Packit 82cce8
                            used_by => ["inner_diamond_N.pm"],
Packit 82cce8
                            uses    => ["inner_diamond_S.pm"],
Packit 82cce8
                          },
Packit 82cce8
  "outer_diamond_E.pm" => {
Packit 82cce8
                            file    => generic_abs_path("t/data/static/outer_diamond_E.pm"),
Packit 82cce8
                            key     => "outer_diamond_E.pm",
Packit 82cce8
                            type    => "module",
Packit 82cce8
                            used_by => ["outer_diamond_N.pm"],
Packit 82cce8
                            uses    => ["outer_diamond_S.pm"],
Packit 82cce8
                          },
Packit 82cce8
  "outer_diamond_N.pm" => {
Packit 82cce8
                            file => generic_abs_path("t/data/static/outer_diamond_N.pm"),
Packit 82cce8
                            key  => "outer_diamond_N.pm",
Packit 82cce8
                            type => "module",
Packit 82cce8
                            uses => ["inner_diamond_N.pm", "outer_diamond_E.pm", "outer_diamond_W.pm"],
Packit 82cce8
                          },
Packit 82cce8
  "outer_diamond_S.pm" => {
Packit 82cce8
                            file    => generic_abs_path("t/data/static/outer_diamond_S.pm"),
Packit 82cce8
                            key     => "outer_diamond_S.pm",
Packit 82cce8
                            type    => "module",
Packit 82cce8
                            used_by => ["outer_diamond_E.pm", "outer_diamond_W.pm", "inner_diamond_S.pm"],
Packit 82cce8
                          },
Packit 82cce8
  "outer_diamond_W.pm" => {
Packit 82cce8
                            file    => generic_abs_path("t/data/static/outer_diamond_W.pm"),
Packit 82cce8
                            key     => "outer_diamond_W.pm",
Packit 82cce8
                            type    => "module",
Packit 82cce8
                            used_by => ["outer_diamond_N.pm"],
Packit 82cce8
                            uses    => ["outer_diamond_S.pm"],
Packit 82cce8
                          },
Packit 82cce8
};
Packit 82cce8

Packit 82cce8
# Functional i/f
Packit 82cce8
my $rv3 = scan_deps(@roots3);
Packit 82cce8
compare_scandeps_rvs($rv3, $expected_rv3, \@roots3);
Packit 82cce8

Packit 82cce8

Packit 82cce8
##############################################################
Packit 82cce8
# Static dependency check of the following dependency tree
Packit 82cce8
# (i.e. multiple inputs)
Packit 82cce8
#
Packit 82cce8
#     InputA.pl       InputB.pl   InputC.pl
Packit 82cce8
#       /  \             \           /
Packit 82cce8
#      /    \             \         /
Packit 82cce8
#     /      \             \       /
Packit 82cce8
# TestA.pm  TestB.pm   TestC.pm   /
Packit 82cce8
#                            \   /
Packit 82cce8
#                             \ /
Packit 82cce8
#                          TestD.pm
Packit 82cce8
#
Packit 82cce8
##############################################################
Packit 82cce8
my @roots4 = qw(t/data/static/InputA.pl
Packit 82cce8
                t/data/static/InputB.pl
Packit 82cce8
                t/data/static/InputC.pl);
Packit 82cce8
my $expected_rv4 =
Packit 82cce8
{
Packit 82cce8
  "InputA.pl" => {
Packit 82cce8
                   file => generic_abs_path("t/data/static/InputA.pl"),
Packit 82cce8
                   key  => "InputA.pl",
Packit 82cce8
                   type => "data",
Packit 82cce8
                   uses => ["TestA.pm", "TestB.pm"],
Packit 82cce8
                 },
Packit 82cce8
  "InputB.pl" => {
Packit 82cce8
                   file => generic_abs_path("t/data/static/InputB.pl"),
Packit 82cce8
                   key  => "InputB.pl",
Packit 82cce8
                   type => "data",
Packit 82cce8
                   uses => ["TestC.pm"],
Packit 82cce8
                 },
Packit 82cce8
  "InputC.pl" => {
Packit 82cce8
                   file => generic_abs_path("t/data/static/InputC.pl"),
Packit 82cce8
                   key  => "InputC.pl",
Packit 82cce8
                   type => "data",
Packit 82cce8
                   uses => ["TestD.pm"],
Packit 82cce8
                 },
Packit 82cce8
  "TestA.pm"  => {
Packit 82cce8
                   file    => generic_abs_path("t/data/static/TestA.pm"),
Packit 82cce8
                   key     => "TestA.pm",
Packit 82cce8
                   type    => "module",
Packit 82cce8
                   used_by => ["InputA.pl"],
Packit 82cce8
                 },
Packit 82cce8
  "TestB.pm"  => {
Packit 82cce8
                   file    => generic_abs_path("t/data/static/TestB.pm"),
Packit 82cce8
                   key     => "TestB.pm",
Packit 82cce8
                   type    => "module",
Packit 82cce8
                   used_by => ["InputA.pl"],
Packit 82cce8
                 },
Packit 82cce8
  "TestC.pm"  => {
Packit 82cce8
                   file    => generic_abs_path("t/data/static/TestC.pm"),
Packit 82cce8
                   key     => "TestC.pm",
Packit 82cce8
                   type    => "module",
Packit 82cce8
                   used_by => ["InputB.pl"],
Packit 82cce8
                   uses    => ["TestD.pm"],
Packit 82cce8
                 },
Packit 82cce8
  "TestD.pm"  => {
Packit 82cce8
                   file    => generic_abs_path("t/data/static/TestD.pm"),
Packit 82cce8
                   key     => "TestD.pm",
Packit 82cce8
                   type    => "module",
Packit 82cce8
                   used_by => ["InputC.pl", "TestC.pm"],
Packit 82cce8
                 },
Packit 82cce8
};
Packit 82cce8

Packit 82cce8
# Functional i/f
Packit 82cce8
my $rv4 = scan_deps(@roots4);
Packit 82cce8
compare_scandeps_rvs($rv4, $expected_rv4, \@roots4);
Packit 82cce8

Packit 82cce8

Packit 82cce8
##############################################################
Packit 82cce8
# Static dependency check of the following dependency tree
Packit 82cce8
# Tests the .pm only lists the .pl once in it's used_by entries
Packit 82cce8
#
Packit 82cce8
#   Duplicator.pl
Packit 82cce8
#       /  \
Packit 82cce8
#      /    \
Packit 82cce8
#     /      \
Packit 82cce8
#     \      /
Packit 82cce8
#      \    /
Packit 82cce8
#       \  /
Packit 82cce8
#   Duplicated.pm
Packit 82cce8
#
Packit 82cce8
##############################################################
Packit 82cce8
my @roots5 = qw(t/data/static/Duplicator.pl);
Packit 82cce8
my $expected_rv5 =
Packit 82cce8
{
Packit 82cce8
  "Duplicated.pm" => {
Packit 82cce8
                       file    => generic_abs_path("t/data/static/Duplicated.pm"),
Packit 82cce8
                       key     => "Duplicated.pm",
Packit 82cce8
                       type    => "module",
Packit 82cce8
                       used_by => ["Duplicator.pl"],
Packit 82cce8
                     },
Packit 82cce8
  "Duplicator.pl" => {
Packit 82cce8
                       file => generic_abs_path("t/data/static/Duplicator.pl"),
Packit 82cce8
                       key  => "Duplicator.pl",
Packit 82cce8
                       type => "data",
Packit 82cce8
                       uses => ["Duplicated.pm"],
Packit 82cce8
                     },
Packit 82cce8
};
Packit 82cce8

Packit 82cce8
# Functional i/f
Packit 82cce8
my $rv5 = scan_deps(@roots5);
Packit 82cce8
compare_scandeps_rvs($rv5, $expected_rv5, \@roots5);
Packit 82cce8

Packit 82cce8

Packit 82cce8
##############################################################
Packit 82cce8
# Static dependency check of a module that does a
Packit 82cce8
# use 5.010;
Packit 82cce8
# Note that this doesn't test as much as the other tests
Packit 82cce8
# since feature.pm ropes in all kinds of things.
Packit 82cce8
##############################################################
Packit 82cce8
SKIP: {
Packit 82cce8
  skip "Skipping 'use VERSION' tests on pre-5.10.0", 2 if version->new($]) < version->new("5.10.0");
Packit 82cce8
  my @roots1 = qw(t/data/static/useVERSION.pm);
Packit 82cce8

Packit 82cce8
  # Functional i/f
Packit 82cce8
  my $rv1 = scan_deps(@roots1);
Packit 82cce8
  ok(exists $rv1->{"useVERSION.pm"}, "use VERSION: source file included");
Packit 82cce8
  ok(exists $rv1->{"feature.pm"}, "use VERSION: feature.pm included");
Packit 82cce8
}
Packit 82cce8

Packit 82cce8

Packit 82cce8

Packit 82cce8
__END__