/ack-1.96/t/ack-ignore-dir.t

# · Perl · 148 lines · 122 code · 24 blank · 2 comment · 1 complexity · f6b802d930d44c6066c351edbb65c425 MD5 · raw file

  1. #!perl
  2. use warnings;
  3. use strict;
  4. use Test::More tests => 26;
  5. use File::Spec;
  6. use lib 't';
  7. use Util;
  8. prep_environment();
  9. my @files_mentioning_apples = qw(
  10. t/swamp/groceries/fruit
  11. t/swamp/groceries/junk
  12. t/swamp/groceries/another_subdir/fruit
  13. t/swamp/groceries/another_subdir/junk
  14. t/swamp/groceries/another_subdir/CVS/fruit
  15. t/swamp/groceries/another_subdir/CVS/junk
  16. t/swamp/groceries/another_subdir/RCS/fruit
  17. t/swamp/groceries/another_subdir/RCS/junk
  18. t/swamp/groceries/subdir/fruit
  19. t/swamp/groceries/subdir/junk
  20. t/swamp/groceries/CVS/fruit
  21. t/swamp/groceries/CVS/junk
  22. t/swamp/groceries/RCS/fruit
  23. t/swamp/groceries/RCS/junk
  24. );
  25. my @std_ignore = qw( RCS CVS );
  26. my( @expected, @results, $test_description );
  27. sub set_up_assertion_that_these_options_will_ignore_those_directories {
  28. my( $options, $ignored_directories, $optional_test_description ) = @_;
  29. $test_description = $optional_test_description || join( ' ', @{$options} );
  30. my $filter = join( '|', @{$ignored_directories} );
  31. @expected = grep { ! m{/(?:$filter)/} } @files_mentioning_apples;
  32. @results = run_ack( @{$options}, '--noenv', '-la', 'apple', 't/swamp' );
  33. # ignore everything in .svn directories
  34. my $svn_regex = quotemeta File::Spec->catfile( '', '.svn', '' ); # the respective filesystem equivalent of '/.svn/'
  35. @results = grep { ! m/$svn_regex/ } @results;
  36. return;
  37. }
  38. FILES_HAVE_BEEN_SET_UP_AS_EXPECTED: {
  39. set_up_assertion_that_these_options_will_ignore_those_directories(
  40. [ '-u', ],
  41. [ ],
  42. 'test data contents are as expected',
  43. );
  44. sets_match( \@results, \@expected, $test_description );
  45. }
  46. DASH_IGNORE_DIR: {
  47. set_up_assertion_that_these_options_will_ignore_those_directories(
  48. [ '--ignore-dir=subdir', ],
  49. [ @std_ignore, 'subdir', ],
  50. );
  51. sets_match( \@results, \@expected, $test_description );
  52. }
  53. DASH_IGNORE_DIR_WITH_SLASH: {
  54. set_up_assertion_that_these_options_will_ignore_those_directories(
  55. [ '--ignore-dir=subdir/', ],
  56. [ @std_ignore, 'subdir', ],
  57. );
  58. sets_match( \@results, \@expected, $test_description );
  59. }
  60. DASH_IGNORE_DIR_MULTIPLE_TIMES: {
  61. set_up_assertion_that_these_options_will_ignore_those_directories(
  62. [ '--ignore-dir=subdir', '--ignore-dir=another_subdir', ],
  63. [ @std_ignore, 'subdir', 'another_subdir', ],
  64. );
  65. sets_match( \@results, \@expected, $test_description );
  66. }
  67. DASH_NOIGNORE_DIR: {
  68. set_up_assertion_that_these_options_will_ignore_those_directories(
  69. [ '--noignore-dir=CVS', ],
  70. [ 'RCS', ],
  71. );
  72. sets_match( \@results, \@expected, $test_description );
  73. }
  74. DASH_NOIGNORE_DIR_MULTIPLE_TIMES: {
  75. set_up_assertion_that_these_options_will_ignore_those_directories(
  76. [ '--noignore-dir=CVS', '--noignore-dir=RCS', ],
  77. [ ],
  78. );
  79. sets_match( \@results, \@expected, $test_description );
  80. }
  81. DASH_IGNORE_DIR_WITH_DASH_NOIGNORE_DIR: {
  82. set_up_assertion_that_these_options_will_ignore_those_directories(
  83. [ '--noignore-dir=CVS', '--ignore-dir=subdir', ],
  84. [ 'RCS', 'subdir', ],
  85. );
  86. sets_match( \@results, \@expected, $test_description );
  87. }
  88. LAST_ONE_LISTED_WINS: {
  89. set_up_assertion_that_these_options_will_ignore_those_directories(
  90. [ '--noignore-dir=CVS', '--ignore-dir=CVS', ],
  91. [ @std_ignore, ],
  92. );
  93. sets_match( \@results, \@expected, $test_description );
  94. set_up_assertion_that_these_options_will_ignore_those_directories(
  95. [ '--noignore-dir=CVS', '--ignore-dir=CVS', '--noignore-dir=CVS', ],
  96. [ 'RCS', ],
  97. );
  98. sets_match( \@results, \@expected, $test_description );
  99. set_up_assertion_that_these_options_will_ignore_those_directories(
  100. [ '--ignore-dir=subdir', '--noignore-dir=subdir', ],
  101. [ @std_ignore, ],
  102. );
  103. sets_match( \@results, \@expected, $test_description );
  104. set_up_assertion_that_these_options_will_ignore_those_directories(
  105. [ '--ignore-dir=subdir', '--noignore-dir=subdir', '--ignore-dir=subdir', ],
  106. [ @std_ignore, 'subdir', ],
  107. );
  108. sets_match( \@results, \@expected, $test_description );
  109. }
  110. DASH_U_BEATS_THE_PANTS_OFF_IGNORE_DIR_ANY_DAY_OF_THE_WEEK: {
  111. set_up_assertion_that_these_options_will_ignore_those_directories(
  112. [ '-u', '--ignore-dir=subdir', ],
  113. [ ],
  114. );
  115. sets_match( \@results, \@expected, $test_description );
  116. }
  117. DASH_IGNORE_DIR_IGNORES_RELATIVE_PATHS: {
  118. set_up_assertion_that_these_options_will_ignore_those_directories(
  119. [ '--ignore-dir=' . File::Spec->catdir('t' ,'swamp', 'groceries' , 'another_subdir'), ],
  120. [ @std_ignore, 'another_subdir', ],
  121. 'ignore relative paths instead of just directory names',
  122. );
  123. sets_match( \@results, \@expected, $test_description );
  124. }