work in progress for arrayref coercions
[gitmo/MooseX-Types-Path-Class.git] / t / 01.basic.t
CommitLineData
fd56ddb6 1
2use warnings FATAL => 'all';
3use strict;
4
c96c867e 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',
c96c867e 14 coerce => 1,
15 );
16
17 has 'file' => (
18 is => 'ro',
19 isa => 'Path::Class::File',
610dc043 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]',
c96c867e 32 coerce => 1,
33 );
34}
35
36{
37
38 package Bar;
39 use Moose;
40 use MooseX::Types::Path::Class qw( Dir File );
610dc043 41 use MooseX::Types::Moose qw(ArrayRef);
c96c867e 42
43 has 'dir' => (
44 is => 'ro',
45 isa => Dir,
c96c867e 46 coerce => 1,
47 );
48
49 has 'file' => (
50 is => 'ro',
51 isa => File,
610dc043 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],
c96c867e 64 coerce => 1,
65 );
66}
fd56ddb6 67
68package main;
69
70use Test::More;
9194adce 71use Path::Class;
6d4d954d 72plan tests => 10;
fd56ddb6 73
9194adce 74my $dir = dir('', 'tmp');
75my $file = file('', 'tmp', 'foo');
76
fd56ddb6 77my $check = sub {
78 my $o = shift;
79 isa_ok( $o->dir, 'Path::Class::Dir' );
9194adce 80 cmp_ok( $o->dir, 'eq', "$dir", "dir is $dir" );
fd56ddb6 81 isa_ok( $o->file, 'Path::Class::File' );
9194adce 82 cmp_ok( $o->file, 'eq', "$file", "file is $file" );
fd56ddb6 83};
84
85for my $class (qw(Foo Bar)) {
6d4d954d 86 my $o = $class->new( dir => "$dir", file => [ '', 'tmp', 'foo' ] );
fd56ddb6 87 isa_ok( $o, $class );
88 $check->($o);
89}
90
610dc043 91
92
93my @dirs = (dir('', 'tmp'), dir('', 'etc'));
94my @files = (dir('', 'tmp', 'foo'), dir('', 'etc', 'foo'));
95
96my $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
109for my $class (qw(Foo Bar)) {
110
111my %args = (
112dirs => [ map { "$_" } @dirs ],
113file => [ map { [ split('/', $_->stringify) ] } @files ],
114);
115use Data::Dumper;
116print "### 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