]>
Dogcows Code - chaz/git-codeowners/blob - t/file-codeowners.t
a50a050eb8dbebb859297879100481c7a72e80e8
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
'editing and writing files', sub {
98 my $file = File
::Codeowners-
>parse("$Bin/samples/basic.CODEOWNERS");
101 $file->update_owners('*' => [qw(@foo @bar @baz)]);
102 is_deeply
($r = $file->_lines, [
104 {pattern
=> '*', owners
=> [qw(@foo @bar @baz)]},
105 ], 'update owners for a pattern') or diag explain
$r;
106 is_deeply
($r = $file->owners, [qw(@bar @baz @foo)], 'got updated owners') or diag explain
$r;
108 $file->update_owners('no/such/pattern' => [qw(@wuf)]);
109 is_deeply
($r = $file->_lines, [
111 {pattern
=> '*', owners
=> [qw(@foo @bar @baz)]},
112 ], 'no change when updating nonexistent pattern') or diag explain
$r;
114 $file->prepend(comment
=> 'start');
115 $file->append(pattern
=> 'end', owners
=> ['@qux']);
116 is_deeply
($r = $file->_lines, [
117 {comment
=> 'start'},
119 {pattern
=> '*', owners
=> [qw(@foo @bar @baz)]},
120 {pattern
=> 'end', owners
=> [qw(@qux)]},
121 ], 'prepand and append') or diag explain
$r;
123 $file->add_unowned('lonely', 'afraid');
124 is_deeply
($r = $file->unowned, [qw(afraid lonely)], 'set unowned files') or diag explain
$r;
126 $file->remove_unowned('afraid');
127 is_deeply
($r = $file->unowned, [qw(lonely)], 'remove unowned files') or diag explain
$r;
129 is_deeply
($r = $file->write_to_array, [
135 '### UNOWNED (File::Codeowners)',
137 ], 'format file') or diag explain
$r;
139 $file->clear_unowned;
140 is_deeply
($r = $file->unowned, [], 'clear unowned files') or diag explain
$r;
This page took 0.044506 seconds and 3 git commands to generate.