X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fgit-codeowners;a=blobdiff_plain;f=t%2Ffile-codeowners.t;fp=t%2Ffile-codeowners.t;h=0000000000000000000000000000000000000000;hp=7bfb53ca9636eb48e812f137b0e435bf1b18ad7b;hb=fd8bad44a70558edb1e643ec6f86cad1650700fa;hpb=b94d5acee38ce17d5d4e5fa233cae415d5c9f52c diff --git a/t/file-codeowners.t b/t/file-codeowners.t deleted file mode 100644 index 7bfb53c..0000000 --- a/t/file-codeowners.t +++ /dev/null @@ -1,167 +0,0 @@ -#!/usr/bin/env perl - -use warnings; -use strict; - -use FindBin '$Bin'; - -use File::Codeowners; -use Test::More; - -subtest 'parse CODEOWNERS files', sub { - my @basic_arr = ('#wat', '* @whatever'); - my $basic_str = "#wat\n* \@whatever\n"; - my $expected = [ - {comment => 'wat'}, - {pattern => '*', owners => ['@whatever']}, - ]; - my $r; - - my $file = File::Codeowners->parse_from_filepath("$Bin/samples/basic.CODEOWNERS"); - is_deeply($r = $file->_lines, $expected, 'parse from filepath') or diag explain $r; - - $file = File::Codeowners->parse_from_array(\@basic_arr); - is_deeply($r = $file->_lines, $expected, 'parse from array') or diag explain $r; - - $file = File::Codeowners->parse_from_string(\$basic_str); - is_deeply($r = $file->_lines, $expected, 'parse from string') or diag explain $r; - - open(my $fh, '<', \$basic_str) or die "open failed: $!"; - $file = File::Codeowners->parse_from_fh($fh); - is_deeply($r = $file->_lines, $expected, 'parse from filehandle') or diag explain $r; - close($fh); -}; - -subtest 'query information from CODEOWNERS', sub { - my $file = File::Codeowners->parse("$Bin/samples/kitchensink.CODEOWNERS"); - my $r; - - is_deeply($r = $file->owners, [ - '@"Lucius Fox"', - '@bane', - '@batman', - '@joker', - '@robin', - '@the-penguin', - 'alfred@waynecorp.example.com', - ], 'list all owners') or diag explain $r; - - is_deeply($r = $file->owners('tricks/Grinning/'), [qw( - @joker - @the-penguin - )], 'list owners matching pattern') or diag explain $r; - - is_deeply($r = $file->patterns, [qw( - * - /a/b/c/deep - /vehicles/**/batmobile.cad - mansion.txt - tricks/Explosions.doc - tricks/Grinning/ - )], 'list all patterns') or diag explain $r; - - is_deeply($r = $file->patterns('@joker'), [qw( - tricks/Explosions.doc - tricks/Grinning/ - )], 'list patterns matching owner') or diag explain $r; - - is_deeply($r = $file->unowned, [qw( - lightcycle.cad - )], 'list unowned') or diag explain $r; - - is_deeply($r = $file->match('whatever'), { - owners => [qw(@batman @robin)], - pattern => '*', - }, 'match solitary wildcard') or diag explain $r; - is_deeply($r = $file->match('subdir/mansion.txt'), { - owners => ['alfred@waynecorp.example.com'], - pattern => 'mansion.txt', - }, 'match filename') or diag explain $r; - is_deeply($r = $file->match('vehicles/batmobile.cad'), { - owners => ['@"Lucius Fox"'], - pattern => '/vehicles/**/batmobile.cad', - project => 'Transportation', - }, 'match double asterisk') or diag explain $r; - is_deeply($r = $file->match('vehicles/extra/batmobile.cad'), { - owners => ['@"Lucius Fox"'], - pattern => '/vehicles/**/batmobile.cad', - project => 'Transportation', - }, 'match double asterisk again') or diag explain $r; -}; - -subtest 'parse errors', sub { - eval { File::Codeowners->parse(\q{meh}) }; - like($@, qr/^Parse error on line 1/, 'parse error'); -}; - -subtest 'handling projects', sub { - my $file = File::Codeowners->parse("$Bin/samples/kitchensink.CODEOWNERS"); - my $r; - - is_deeply($r = $file->projects, [ - 'Transportation', - ], 'projects listed') or diag explain $r; - - $file->rename_project('Transportation', 'Getting Around'); - is_deeply($r = $file->projects, [ - 'Getting Around', - ], 'project renamed') or diag explain $r; - - is_deeply($r = [@{$file->_lines}[-3 .. -1]], [ - {comment => ' Project: Getting Around', project => 'Getting Around'}, - {}, - {pattern => '/vehicles/**/batmobile.cad', 'owners' => ['@"Lucius Fox"'], project => 'Getting Around'}, - ], 'renaming project properly modifies lines') or diag explain $r; - - $file->update_owners_by_project('Getting Around', '@twoface'); - ok( scalar grep { $_ eq '@twoface' } @{$file->owners}, 'updating owner adds new owner'); - ok(!scalar grep { $_ eq '@"Lucius Fox"' } @{$file->owners}, 'updating owner removes old owner'); -}; - -subtest 'editing and writing files', sub { - my $file = File::Codeowners->parse("$Bin/samples/basic.CODEOWNERS"); - my $r; - - $file->update_owners('*' => [qw(@foo @bar @baz)]); - is_deeply($r = $file->_lines, [ - {comment => 'wat'}, - {pattern => '*', owners => [qw(@foo @bar @baz)]}, - ], 'update owners for a pattern') or diag explain $r; - is_deeply($r = $file->owners, [qw(@bar @baz @foo)], 'got updated owners') or diag explain $r; - - $file->update_owners('no/such/pattern' => [qw(@wuf)]); - is_deeply($r = $file->_lines, [ - {comment => 'wat'}, - {pattern => '*', owners => [qw(@foo @bar @baz)]}, - ], 'no change when updating nonexistent pattern') or diag explain $r; - - $file->prepend(comment => 'start'); - $file->append(pattern => 'end', owners => ['@qux']); - is_deeply($r = $file->_lines, [ - {comment => 'start'}, - {comment => 'wat'}, - {pattern => '*', owners => [qw(@foo @bar @baz)]}, - {pattern => 'end', owners => [qw(@qux)]}, - ], 'prepand and append') or diag explain $r; - - $file->add_unowned('lonely', 'afraid'); - is_deeply($r = $file->unowned, [qw(afraid lonely)], 'set unowned files') or diag explain $r; - - $file->remove_unowned('afraid'); - is_deeply($r = $file->unowned, [qw(lonely)], 'remove unowned files') or diag explain $r; - - is_deeply($r = $file->write_to_array, [ - '#start', - '#wat', - '* @foo @bar @baz', - 'end @qux', - '', - '### UNOWNED (File::Codeowners)', - '# lonely', - ], 'format file') or diag explain $r; - - $file->clear_unowned; - is_deeply($r = $file->unowned, [], 'clear unowned files') or diag explain $r; -}; - -done_testing;