File: recursive.t

package info (click to toggle)
grepmail 5.3111-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,420 kB
  • sloc: perl: 8,724; makefile: 6
file content (132 lines) | stat: -rwxr-xr-x 3,645 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/usr/bin/perl

use strict;

use Test::More;
use lib 't';
use Test::Utils;
use File::Spec::Functions qw( :ALL );
use ExtUtils::Command;

my %tests = (
"grepmail -Rq Handy $TEMPDIR/directory"
  => ['recursive','none'],
"grepmail -Rq -E $single_quote\$email =~ /Handy/$single_quote $TEMPDIR/directory"
  => ['recursive','none'],
"grepmail -Lq Handy $TEMPDIR/directory_with_links"
  => ['recursive2','none'],
"grepmail -Rq Handy $TEMPDIR/directory_with_links"
  => ['recursive','none'],
);

my %expected_errors = (
);

# Copy over the files so that there are no version control directories in our
# search directory. I could use File::Copy, but it doesn't support globbing
# and multiple-file copying. :(
{
  my @old_argv = @ARGV;
  mkdir "$TEMPDIR/directory", 0700;
  @ARGV = ('t/mailboxes/directory/*txt*', "$TEMPDIR/directory");
  cp();
  mkdir "$TEMPDIR/directory_with_links", 0700;

  # Ignore the failed links. We'll let SetSkip deal with the test cases for
  # systems that don't support it.
  eval {
    symlink("$TEMPDIR/directory", "$TEMPDIR/directory_with_links/symlink");
    mkdir "$TEMPDIR/directory_with_links/subdir", 0700;
    link("$TEMPDIR/directory/mailarc-2.txt", "$TEMPDIR/directory_with_links/subdir/link.txt");
  };
  @ARGV = @old_argv;
}

plan tests => scalar (keys %tests) * 2;

my %skip = SetSkip(\%tests);

foreach my $test (sort keys %tests) 
{
  print "Running test:\n  $test\n";

  SKIP:
  {
    skip("$skip{$test}",2) if exists $skip{$test};

    TestIt($test, $tests{$test}, $expected_errors{$test});
  }
}

# ---------------------------------------------------------------------------

sub TestIt
{
  my $test = shift;
  my ($stdout_file,$stderr_file) = @{ shift @_ };
  my $error_expected = shift;

  my $testname = [splitdir($0)]->[-1];
  $testname =~ s#\.t##;

  my $perl = perl_with_inc();

  $test =~ s#\bgrepmail\s#$perl blib/script/grepmail -C $TEMPDIR/cache #g;

  my $test_stdout = catfile($TEMPDIR,"${testname}_$stdout_file.stdout");
  my $test_stderr = catfile($TEMPDIR,"${testname}_$stderr_file.stderr");

  system "$test 1>$test_stdout 2>$test_stderr";

  if (!$? && defined $error_expected)
  {
    ok(0,"Did not encounter an error executing the test when one was expected.\n\n");
    return;
  }

  if ($? && !defined $error_expected)
  {
    ok(0, "Encountered an error executing the test when one was not expected.\n" .
      "See $test_stdout and $test_stderr.\n\n");
    return;
  }

  my $real_stdout = catfile('t','results',$stdout_file);
  my $real_stderr = catfile('t','results',$stderr_file);

  # Compare STDERR first on the assumption that if STDOUT is different, STDERR
  # is too and contains something useful.
  Do_Diff($test_stderr,$real_stderr);
  Do_Diff($test_stdout,$real_stdout);
}

# ---------------------------------------------------------------------------

sub SymlinksAndLinksWork
{
  return (-e 'directory_with_links/symlink/mailarc-1.txt') && 
      (-s 'directory_with_links/symlink/mailarc-1.txt' == 64865) && 
      (-e 'directory_with_links/subdir/link.txt') &&
      (-s 'directory_with_links/subdir/link.txt' == 64865);
}

# ---------------------------------------------------------------------------

sub SetSkip
{
  my %tests = %{ shift @_ };

  my %skip;

  unless ( SymlinksAndLinksWork() ) {
    $skip{"grepmail -Lq Handy $TEMPDIR/directory_with_links"} =
      'Links or symbolic links are not supported on this platform';
    $skip{"grepmail -Rq Handy $TEMPDIR/directory_with_links"} =
      'Links or symbolic links are not supported on this platform';
  }

  return %skip;
}

# ---------------------------------------------------------------------------