1use strict;
2use warnings;
3
4use Test::More;
5use Path::Tiny qw(path);
6use Test::Fatal qw( exception );
7use FindBin;
8
9sub nofatal {
10  my ( $message, $sub ) = @_;
11  my $e = exception { $sub->() };
12  return is( $e, undef, "no exceptions: $message" );
13}
14
15my $corpus_dir =
16  path($FindBin::Bin)->parent->parent->child('corpus')->child('Changelog');
17
18subtest 'corpus/Changelog' => sub {
19  return unless nofatal 'require Path::IsDev::Object' => sub {
20    require Path::IsDev::Object;
21  };
22  my $instance;
23  return unless nofatal 'instance = Path::IsDev::Object->new()' => sub {
24    $instance = Path::IsDev::Object->new();
25  };
26  return unless nofatal 'instance->set()' => sub {
27    is( $instance->set(), 'Basic', 'instance->set() == Basic' );
28  };
29  return unless nofatal 'instance->set_prefix()' => sub {
30    is( $instance->set_prefix, 'Path::IsDev::HeuristicSet', 'instance->set_prefix() == Path::IsDev::HeuristicSet' );
31  };
32  return unless nofatal 'instance->set_module()' => sub {
33    is( $instance->set_module, 'Path::IsDev::HeuristicSet::Basic', 'instance->set_module() == Path::IsDev::HeuristicSet::Basic' );
34  };
35  return unless nofatal 'instance->loaded_set_module()' => sub {
36    is(
37      $instance->set_module,
38      'Path::IsDev::HeuristicSet::Basic',
39      'instance->loaded_set_module() == Path::IsDev::HeuristicSet::Basic'
40    );
41  };
42  return unless nofatal 'instance->_matches($path_isdev_source)' => sub {
43    my $computed_root = path($FindBin::Bin)->parent->parent;
44    my $result        = $instance->_matches($computed_root);
45    ok( defined $result->result, 'instance->_matches($path_isdev_source)->result is defined' );
46    subtest "result_object" => sub {
47      return unless nofatal 'result->path' => sub {
48        my $path = $result->path;
49        ok( defined $path, '->path is defined' );
50        ok( ref $path,     '->path is a ref' );
51      };
52      return unless nofatal 'result->result' => sub {
53        my $result = $result->result;
54        ok( defined $result, '->result is defined' );
55      };
56      return unless nofatal 'result->reasons' => sub {
57        my $reasons = $result->reasons;
58        ok( defined $reasons, '->reasons is defined' );
59        ok( ref $reasons,     '->reasons is a ref' );
60        is( ref $reasons, 'ARRAY', '->reasons is ARRAY' );
61      };
62    };
63  };
64  return unless nofatal 'instance->matches($corpus_Changes_dir)' => sub {
65    my $result = $instance->matches($corpus_dir);
66    ok( defined $result, 'instance->matches($corpus_Changes_dir) is defined' );
67  };
68  return unless nofatal 'instance->matches($corpus_Changes_dir/../)' => sub {
69    my $result = $instance->matches( $corpus_dir->parent );
70    ok( !defined $result, 'instance->matches($corpus_Changes_dir/../) is not defined' );
71  };
72  return unless nofatal 'instance->_instance_id' => sub {
73    my $result = $instance->_instance_id;
74    ok( defined $result, 'instance->_instance_id is defined' );
75  };
76  return unless nofatal 'instance->_debug(testing)' => sub {
77    my $result = $instance->_debug('testing');
78    pass("_debug(testing) OK ");
79  };
80};
81
82done_testing;
83