Test :: File :: Find :: Rule проверьте, что все наши сценарии Perl используют строгий - PullRequest
1 голос
/ 24 декабря 2009
use warnings;
use Test::More;
use File::Find::Rule;
use Test::File::Find::Rule;

my $rule = File::Find::Rule->file->name('*.pl')->not_grep(qr/^\s*use\s+strict;/m, sub { 1 });
match_rule_no_result($rule, ".", 'use strict usage');
done_testing();

и вывод был:

out put :
ok 1 - use strict usage
1..1

он всегда проходит тест, даже если мой скрипт не использует строгий, как этот скрипт, который находится внутри "." каталог. тот же код доступен в качестве примера на http://metacpan.org/pod/Test::File::Find::Rule

какая-либо подсказка?

F.

Ответы [ 2 ]

10 голосов
/ 24 декабря 2009

Подумайте об использовании Perl :: Critic вместо этого, который может сделать это более надежно, настраивается и делает гораздо больше. Существует даже Test :: Perl :: Critic для его применения.

Perl :: Критик также имеет преимущество в знании таких вещей, как Лось , которые включают стриктуры.

3 голосов
/ 24 декабря 2009

Чтобы проверить use strict, просто сделайте это:

my $rule = File::Find::Rule
    ->file->name('*.pl')
    ->not_grep( qr/^\s*use\s+strict;/ )
;

Обновление

Я согласен с Шверном и jrockway: есть лучший модуль для обеспечения соблюдения use strict.

Тем не менее, вот что я смог выяснить в отношении деталей вашего вопроса.

Пример use strict, предоставленный Test :: File :: Find :: Rule , неверен.

Насколько я понимаю, метод grep в File :: Find :: Rule будет оценивать каждую строку файла, используя каждый предоставленный спецификатор, останавливаясь (т.е. сохраняя файл в своем результате установить) по первой верной оценке. File::Find::Rule дает пример того, как каждый файл начинается строкой Шебанга. Если первая строка не соответствует регулярному выражению, следующий спецификатор (анонимная подпрограмма) всегда будет возвращать true, и будет найден несоответствующий файл.

$rule->grep( qr/^#!.*\bperl/, [ sub { 1 } ] );

Однако для теста use strict вы не хотите ограничивать себя первой строкой. Кроме того, метод not_grep делает ненужными дополнительные спецификаторы: мы сохраняем файл, если ни одна из строк в файле не соответствует регулярному выражению. Надеюсь, это поможет.

...