work in progress for arrayref coercions
[gitmo/MooseX-Types-Path-Class.git] / t / 01.basic.t
1
2 use warnings FATAL => 'all';
3 use strict;
4
5 {
6
7     package Foo;
8     use Moose;
9     use MooseX::Types::Path::Class;
10
11     has 'dir' => (
12         is       => 'ro',
13         isa      => 'Path::Class::Dir',
14         coerce   => 1,
15     );
16
17     has 'file' => (
18         is       => 'ro',
19         isa      => 'Path::Class::File',
20         coerce   => 1,
21     );
22
23     has 'dirs' => (
24         is       => 'ro',
25         isa      => 'ArrayRef[Path::Class::Dir]',
26         coerce   => 1,
27     );
28
29     has 'files' => (
30         is       => 'ro',
31         isa      => 'ArrayRef[Path::Class::File]',
32         coerce   => 1,
33     );
34 }
35
36 {
37
38     package Bar;
39     use Moose;
40     use MooseX::Types::Path::Class qw( Dir File );
41     use MooseX::Types::Moose qw(ArrayRef);
42
43     has 'dir' => (
44         is       => 'ro',
45         isa      => Dir,
46         coerce   => 1,
47     );
48
49     has 'file' => (
50         is       => 'ro',
51         isa      => File,
52         coerce   => 1,
53     );
54
55     has 'dirs' => (
56         is       => 'ro',
57         isa      => ArrayRef[Dir],
58         coerce   => 1,
59     );
60
61     has 'files' => (
62         is       => 'ro',
63         isa      => ArrayRef[File],
64         coerce   => 1,
65     );
66 }
67
68 package main;
69
70 use Test::More;
71 use Path::Class;
72 plan tests => 10;
73
74 my $dir = dir('', 'tmp');
75 my $file = file('', 'tmp', 'foo');
76
77 my $check = sub {
78     my $o = shift;
79     isa_ok( $o->dir, 'Path::Class::Dir' );
80     cmp_ok( $o->dir, 'eq', "$dir", "dir is $dir" );
81     isa_ok( $o->file, 'Path::Class::File' );
82     cmp_ok( $o->file, 'eq', "$file", "file is $file" );
83 };
84
85 for my $class (qw(Foo Bar)) {
86     my $o = $class->new( dir => "$dir", file => [ '', 'tmp', 'foo' ] );
87     isa_ok( $o, $class );
88     $check->($o);
89 }
90
91
92
93 my @dirs = (dir('', 'tmp'), dir('', 'etc'));
94 my @files = (dir('', 'tmp', 'foo'), dir('', 'etc', 'foo'));
95
96 my $check_arrays = sub {
97     my $o = shift;
98
99     is(scalar($o->dirs), 2, '2 dirs');
100     isa_ok( $_, 'Path::Class::Dir') foreach $o->dirs;
101     cmp_ok( ($o->dirs)->[$_], 'eq', "$dirs[$_]", "dir is $dir" ) foreach (0 .. @dirs);
102
103 #    is(scalar($o->files), 2, '2 files');
104 #    isa_ok( $_, 'Path::Class::File' ) foreach $o->files;
105 #
106 #    cmp_ok( ($o->files)->[$_], 'eq', "$files[$_]", "file is $files[$_]" ) foreach (0.. @files);
107 };
108
109 for my $class (qw(Foo Bar)) {
110
111 my %args = (
112 dirs => [ map { "$_" } @dirs ],
113 file => [ map { [ split('/', $_->stringify) ] } @files ],
114 );
115 use Data::Dumper;
116 print "### constructing $class with args: ", Dumper(\%args);
117
118     my $o = $class->new(
119         dirs => [ map { "$_" } @dirs ],
120 #        file => [ map { [ split('/', $_->stringify) ] } @files ],
121     );
122     isa_ok( $o, $class );
123     $check_arrays->($o);
124 }
125