1#!/usr/bin/perl 2 3use strict; 4use warnings; 5 6use Test::More tests => 32; 7use Test::Exception; 8 9BEGIN { 10 use_ok('Tree::Simple::Visitor::LoadDirectoryTree'); 11 use_ok('Tree::Simple::Visitor::GetAllDescendents'); 12} 13 14use Tree::Simple; 15use File::Spec; 16 17can_ok("Tree::Simple::Visitor::LoadDirectoryTree", 'new'); 18 19my @normal = qw( 20 Changes 21 lib 22 Tree 23 Simple 24 Visitor 25 BreadthFirstTraversal.pm 26 CreateDirectoryTree.pm 27 FindByPath.pm 28 FindByUID.pm 29 FindByNodeValue.pm 30 FromNestedArray.pm 31 FromNestedHash.pm 32 GetAllDescendents.pm 33 LoadClassHierarchy.pm 34 LoadDirectoryTree.pm 35 PathToRoot.pm 36 PostOrderTraversal.pm 37 PreOrderTraversal.pm 38 Sort.pm 39 ToNestedArray.pm 40 ToNestedHash.pm 41 VariableDepthClone.pm 42 VisitorFactory.pm 43 Makefile.PL 44 MANIFEST 45 README 46 t 47 10_Tree_Simple_VisitorFactory_test.t 48 20_Tree_Simple_Visitor_PathToRoot_test.t 49 30_Tree_Simple_Visitor_FindByPath_test.t 50 32_Tree_Simple_Visitor_FindByNodeValue_test.t 51 35_Tree_Simple_Visitor_FindByUID_test.t 52 40_Tree_Simple_Visitor_GetAllDescendents_test.t 53 50_Tree_Simple_Visitor_BreadthFirstTraversal_test.t 54 60_Tree_Simple_Visitor_PostOrderTraversal_test.t 55 65_Tree_Simple_Visitor_PreOrederTraversal_test.t 56 70_Tree_Simple_Visitor_LoadDirectoryTree_test.t 57 75_Tree_Simple_Visitor_CreateDirectoryTree_test.t 58 80_Tree_Simple_Visitor_Sort_test.t 59 90_Tree_Simple_Visitor_FromNestedHash_test.t 60 91_Tree_Simple_Visitor_FromNestedArray_test.t 61 92_Tree_Simple_Visitor_ToNestedHash_test.t 62 93_Tree_Simple_Visitor_ToNestedArray_test.t 63 95_Tree_Simple_Visitor_LoadClassHierarchy_test.t 64 96_Tree_Simple_Visitor_VariableDepthClone_test.t 65 pod.t 66 pod_coverage.t 67); 68my %normal = map { $_ => undef } @normal; 69 70my $node_filter = sub { 71 my ($item) = @_; 72 return 0 unless exists $normal{$item}; 73 return 1; 74}; 75 76# normal order 77{ 78 my $dir_tree = Tree::Simple->new(File::Spec->curdir(), Tree::Simple->ROOT); 79 isa_ok($dir_tree, 'Tree::Simple'); 80 81 my $visitor = Tree::Simple::Visitor::LoadDirectoryTree->new(); 82 isa_ok($visitor, 'Tree::Simple::Visitor::LoadDirectoryTree'); 83 isa_ok($visitor, 'Tree::Simple::Visitor'); 84 85 # just examine the files in the MANIFEST 86 # not the ones created by the makefile 87 $visitor->setNodeFilter($node_filter); 88 89 $dir_tree->accept($visitor); 90 91 my $visitor_check = Tree::Simple::Visitor::GetAllDescendents->new(); 92 isa_ok($visitor_check, 'Tree::Simple::Visitor::GetAllDescendents'); 93 94 $dir_tree->accept($visitor_check); 95 96 # we have to sort these because different OSes 97 # will return the results in different orders. 98 is_deeply( 99 [ sort $visitor_check->getResults() ], 100 [ sort @normal ], 101 '... our tree is in the proper order'); 102} 103 104# file first order 105{ 106 my $dir_tree = Tree::Simple->new(File::Spec->curdir(), Tree::Simple->ROOT); 107 isa_ok($dir_tree, 'Tree::Simple'); 108 109 my $visitor = Tree::Simple::Visitor::LoadDirectoryTree->new(); 110 isa_ok($visitor, 'Tree::Simple::Visitor::LoadDirectoryTree'); 111 isa_ok($visitor, 'Tree::Simple::Visitor'); 112 113 # just examine the files in the MANIFEST 114 # not the ones created by the makefile 115 $visitor->setNodeFilter($node_filter); 116 117 can_ok($visitor, 'SORT_FILES_FIRST'); 118 $visitor->setSortStyle($visitor->SORT_FILES_FIRST); 119 120 $dir_tree->accept($visitor); 121 122 my @files_first = qw( 123 Changes 124 Makefile.PL 125 MANIFEST 126 README 127 lib 128 Tree 129 Simple 130 VisitorFactory.pm 131 Visitor 132 BreadthFirstTraversal.pm 133 CreateDirectoryTree.pm 134 FindByNodeValue.pm 135 FindByPath.pm 136 FindByUID.pm 137 FromNestedArray.pm 138 FromNestedHash.pm 139 GetAllDescendents.pm 140 LoadClassHierarchy.pm 141 LoadDirectoryTree.pm 142 PathToRoot.pm 143 PostOrderTraversal.pm 144 PreOrderTraversal.pm 145 Sort.pm 146 ToNestedArray.pm 147 ToNestedHash.pm 148 VariableDepthClone.pm 149 t 150 10_Tree_Simple_VisitorFactory_test.t 151 20_Tree_Simple_Visitor_PathToRoot_test.t 152 30_Tree_Simple_Visitor_FindByPath_test.t 153 32_Tree_Simple_Visitor_FindByNodeValue_test.t 154 35_Tree_Simple_Visitor_FindByUID_test.t 155 40_Tree_Simple_Visitor_GetAllDescendents_test.t 156 50_Tree_Simple_Visitor_BreadthFirstTraversal_test.t 157 60_Tree_Simple_Visitor_PostOrderTraversal_test.t 158 65_Tree_Simple_Visitor_PreOrederTraversal_test.t 159 70_Tree_Simple_Visitor_LoadDirectoryTree_test.t 160 75_Tree_Simple_Visitor_CreateDirectoryTree_test.t 161 80_Tree_Simple_Visitor_Sort_test.t 162 90_Tree_Simple_Visitor_FromNestedHash_test.t 163 91_Tree_Simple_Visitor_FromNestedArray_test.t 164 92_Tree_Simple_Visitor_ToNestedHash_test.t 165 93_Tree_Simple_Visitor_ToNestedArray_test.t 166 95_Tree_Simple_Visitor_LoadClassHierarchy_test.t 167 96_Tree_Simple_Visitor_VariableDepthClone_test.t 168 pod.t 169 pod_coverage.t 170 ); 171 172 my $visitor_check = Tree::Simple::Visitor::GetAllDescendents->new(); 173 isa_ok($visitor_check, 'Tree::Simple::Visitor::GetAllDescendents'); 174 175 $dir_tree->accept($visitor_check); 176 177 is_deeply( 178 [ $visitor_check->getResults() ], 179 \@files_first, 180 '... our tree is in the file first order'); 181} 182 183 184# dir first order 185{ 186 my $dir_tree = Tree::Simple->new(File::Spec->curdir(), Tree::Simple->ROOT); 187 isa_ok($dir_tree, 'Tree::Simple'); 188 189 my $visitor = Tree::Simple::Visitor::LoadDirectoryTree->new(); 190 isa_ok($visitor, 'Tree::Simple::Visitor::LoadDirectoryTree'); 191 isa_ok($visitor, 'Tree::Simple::Visitor'); 192 193 # just examine the files in the MANIFEST 194 # not the ones created by the makefile 195 $visitor->setNodeFilter($node_filter); 196 197 can_ok($visitor, 'SORT_DIRS_FIRST'); 198 $visitor->setSortStyle($visitor->SORT_DIRS_FIRST); 199 200 $dir_tree->accept($visitor); 201 202 my @dirs_first = qw( 203 lib 204 Tree 205 Simple 206 Visitor 207 BreadthFirstTraversal.pm 208 CreateDirectoryTree.pm 209 FindByNodeValue.pm 210 FindByPath.pm 211 FindByUID.pm 212 FromNestedArray.pm 213 FromNestedHash.pm 214 GetAllDescendents.pm 215 LoadClassHierarchy.pm 216 LoadDirectoryTree.pm 217 PathToRoot.pm 218 PostOrderTraversal.pm 219 PreOrderTraversal.pm 220 Sort.pm 221 ToNestedArray.pm 222 ToNestedHash.pm 223 VariableDepthClone.pm 224 VisitorFactory.pm 225 t 226 10_Tree_Simple_VisitorFactory_test.t 227 20_Tree_Simple_Visitor_PathToRoot_test.t 228 30_Tree_Simple_Visitor_FindByPath_test.t 229 32_Tree_Simple_Visitor_FindByNodeValue_test.t 230 35_Tree_Simple_Visitor_FindByUID_test.t 231 40_Tree_Simple_Visitor_GetAllDescendents_test.t 232 50_Tree_Simple_Visitor_BreadthFirstTraversal_test.t 233 60_Tree_Simple_Visitor_PostOrderTraversal_test.t 234 65_Tree_Simple_Visitor_PreOrederTraversal_test.t 235 70_Tree_Simple_Visitor_LoadDirectoryTree_test.t 236 75_Tree_Simple_Visitor_CreateDirectoryTree_test.t 237 80_Tree_Simple_Visitor_Sort_test.t 238 90_Tree_Simple_Visitor_FromNestedHash_test.t 239 91_Tree_Simple_Visitor_FromNestedArray_test.t 240 92_Tree_Simple_Visitor_ToNestedHash_test.t 241 93_Tree_Simple_Visitor_ToNestedArray_test.t 242 95_Tree_Simple_Visitor_LoadClassHierarchy_test.t 243 96_Tree_Simple_Visitor_VariableDepthClone_test.t 244 pod.t 245 pod_coverage.t 246 Changes 247 Makefile.PL 248 MANIFEST 249 README 250 ); 251 252 my $visitor_check = Tree::Simple::Visitor::GetAllDescendents->new(); 253 isa_ok($visitor_check, 'Tree::Simple::Visitor::GetAllDescendents'); 254 255 $dir_tree->accept($visitor_check); 256 257 is_deeply( 258 [ $visitor_check->getResults() ], 259 \@dirs_first, 260 '... our tree is in the dir first order'); 261} 262 263# test the errors 264{ 265 my $visitor = Tree::Simple::Visitor::LoadDirectoryTree->new(); 266 isa_ok($visitor, 'Tree::Simple::Visitor::LoadDirectoryTree'); 267 isa_ok($visitor, 'Tree::Simple::Visitor'); 268 269 # check setSortStyle 270 can_ok($visitor, 'setSortStyle'); 271 throws_ok { 272 $visitor->setSortStyle(); 273 } qr/Insufficient Arguments/, '... got the error we expected'; 274 275 throws_ok { 276 $visitor->setSortStyle("Fail"); 277 } qr/Insufficient Arguments/, '... got the error we expected'; 278 279 throws_ok { 280 $visitor->setSortStyle([]); 281 } qr/Insufficient Arguments/, '... got the error we expected'; 282 283 # check visit 284 throws_ok { 285 $visitor->visit(); 286 } qr/Insufficient Arguments/, '... got the error we expected'; 287 288 throws_ok { 289 $visitor->visit("Fail"); 290 } qr/Insufficient Arguments/, '... got the error we expected'; 291 292 throws_ok { 293 $visitor->visit([]); 294 } qr/Insufficient Arguments/, '... got the error we expected'; 295 296 throws_ok { 297 $visitor->visit(bless({}, "Fail")); 298 } qr/Insufficient Arguments/, '... got the error we expected'; 299 300 # check that tree is a leaf 301 302 my $tree = Tree::Simple->new("test")->addChild(Tree::Simple->new("test 2")); 303 304 throws_ok { 305 $visitor->visit($tree); 306 } qr/Illegal Operation/, '... got the error we expected'; 307 308 throws_ok { 309 $visitor->visit($tree->getChild(0)); 310 } qr/Incorrect Type/, '... got the error we expected'; 311 312} 313