]>
Dogcows Code - chaz/git-codeowners/blob - t/file-codeowners.t
11 subtest
'parse CODEOWNERS files', sub {
12 my @basic_arr = ('#wat', '* @whatever');
13 my $basic_str = "#wat\n* \@whatever\n";
16 {pattern
=> '*', owners
=> ['@whatever']},
20 my $file = File
::Codeowners-
>parse_from_filepath("$Bin/samples/basic.CODEOWNERS");
21 is_deeply
($r = $file->_lines, $expected, 'parse from filepath') or diag explain
$r;
23 $file = File
::Codeowners-
>parse_from_array(\
@basic_arr);
24 is_deeply
($r = $file->_lines, $expected, 'parse from array') or diag explain
$r;
26 $file = File
::Codeowners-
>parse_from_string(\
$basic_str);
27 is_deeply
($r = $file->_lines, $expected, 'parse from string') or diag explain
$r;
29 open(my $fh, '<', \
$basic_str) or die "open failed: $!";
30 $file = File
::Codeowners-
>parse_from_fh($fh);
31 is_deeply
($r = $file->_lines, $expected, 'parse from filehandle') or diag explain
$r;
35 subtest
'query information from CODEOWNERS', sub {
36 my $file = File
::Codeowners-
>parse("$Bin/samples/kitchensink.CODEOWNERS");
39 is_deeply
($r = $file->owners, [
46 'alfred@waynecorp.example.com',
47 ], 'list all owners') or diag explain
$r;
49 is_deeply
($r = $file->owners('tricks/Grinning/'), [qw(
52 )], 'list owners matching pattern') or diag explain
$r;
54 is_deeply
($r = $file->patterns, [qw(
57 /vehicles/**/batmobile.cad
61 )], 'list all patterns') or diag explain
$r;
63 is_deeply
($r = $file->patterns('@joker'), [qw(
66 )], 'list patterns matching owner') or diag explain
$r;
68 is_deeply
($r = $file->unowned, [qw(
70 )], 'list unowned') or diag explain
$r;
72 is_deeply
($r = $file->match('whatever'), {
73 owners
=> [qw(@batman @robin)],
75 }, 'match solitary wildcard') or diag explain
$r;
76 is_deeply
($r = $file->match('subdir/mansion.txt'), {
77 owners
=> ['alfred@waynecorp.example.com'],
78 pattern
=> 'mansion.txt',
79 }, 'match filename') or diag explain
$r;
80 is_deeply
($r = $file->match('vehicles/batmobile.cad'), {
81 owners
=> ['@"Lucius Fox"'],
82 pattern
=> '/vehicles/**/batmobile.cad',
83 project
=> 'Transportation',
84 }, 'match double asterisk') or diag explain
$r;
85 is_deeply
($r = $file->match('vehicles/extra/batmobile.cad'), {
86 owners
=> ['@"Lucius Fox"'],
87 pattern
=> '/vehicles/**/batmobile.cad',
88 project
=> 'Transportation',
89 }, 'match double asterisk again') or diag explain
$r;
92 subtest
'parse errors', sub {
93 eval { File
::Codeowners-
>parse(\
q{meh}) };
94 like
($@, qr/^Parse error on line 1/, 'parse error');
97 subtest
'handling projects', sub {
98 my $file = File
::Codeowners-
>parse("$Bin/samples/kitchensink.CODEOWNERS");
101 is_deeply
($r = $file->projects, [
103 ], 'projects listed') or diag explain
$r;
105 $file->rename_project('Transportation', 'Getting Around');
106 is_deeply
($r = $file->projects, [
108 ], 'project renamed') or diag explain
$r;
110 is_deeply
($r = [@{$file->_lines}[-3 .. -1]], [
111 {comment
=> ' Project: Getting Around', project
=> 'Getting Around'},
113 {pattern
=> '/vehicles/**/batmobile.cad', 'owners' => ['@"Lucius Fox"'], project
=> 'Getting Around'},
114 ], 'renaming project properly modifies lines') or diag explain
$r;
116 $file->update_owners_by_project('Getting Around', '@twoface');
117 ok
( scalar grep { $_ eq '@twoface' } @{$file->owners}, 'updating owner adds new owner');
118 ok
(!scalar grep { $_ eq '@"Lucius Fox"' } @{$file->owners}, 'updating owner removes old owner');
121 subtest
'editing and writing files', sub {
122 my $file = File
::Codeowners-
>parse("$Bin/samples/basic.CODEOWNERS");
125 $file->update_owners('*' => [qw(@foo @bar @baz)]);
126 is_deeply
($r = $file->_lines, [
128 {pattern
=> '*', owners
=> [qw(@foo @bar @baz)]},
129 ], 'update owners for a pattern') or diag explain
$r;
130 is_deeply
($r = $file->owners, [qw(@bar @baz @foo)], 'got updated owners') or diag explain
$r;
132 $file->update_owners('no/such/pattern' => [qw(@wuf)]);
133 is_deeply
($r = $file->_lines, [
135 {pattern
=> '*', owners
=> [qw(@foo @bar @baz)]},
136 ], 'no change when updating nonexistent pattern') or diag explain
$r;
138 $file->prepend(comment
=> 'start');
139 $file->append(pattern
=> 'end', owners
=> ['@qux']);
140 is_deeply
($r = $file->_lines, [
141 {comment
=> 'start'},
143 {pattern
=> '*', owners
=> [qw(@foo @bar @baz)]},
144 {pattern
=> 'end', owners
=> [qw(@qux)]},
145 ], 'prepand and append') or diag explain
$r;
147 $file->add_unowned('lonely', 'afraid');
148 is_deeply
($r = $file->unowned, [qw(afraid lonely)], 'set unowned files') or diag explain
$r;
150 $file->remove_unowned('afraid');
151 is_deeply
($r = $file->unowned, [qw(lonely)], 'remove unowned files') or diag explain
$r;
153 is_deeply
($r = $file->write_to_array, [
159 '### UNOWNED (File::Codeowners)',
161 ], 'format file') or diag explain
$r;
163 $file->clear_unowned;
164 is_deeply
($r = $file->unowned, [], 'clear unowned files') or diag explain
$r;
This page took 0.047613 seconds and 4 git commands to generate.