File: regexp_valid.t

package info (click to toggle)
spamassassin 3.1.7-2
  • links: PTS
  • area: main
  • in suites: etch-m68k
  • size: 5,376 kB
  • ctags: 2,123
  • sloc: perl: 39,706; ansic: 3,133; sh: 1,344; sql: 170; makefile: 168
file content (94 lines) | stat: -rwxr-xr-x 2,172 bytes parent folder | download | duplicates (8)
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
#!/usr/bin/perl -w
# test regexp validation

BEGIN {
  if (-e 't/test_dir') { # if we are running "t/rule_names.t", kluge around ...
    chdir 't';
  }
  if (-e 'test_dir') {            # running from test directory, not ..
    unshift(@INC, '../blib/lib');
  }
}

my $prefix = '.';
if (-e 'test_dir') {            # running from test directory, not ..
  $prefix = '..';
}

use strict;
use SATest; sa_t_init("regexp_valid");
use Test;

# settings
plan tests => 24;

# initialize SpamAssassin
use Mail::SpamAssassin;
my $sa = create_saobj({'dont_copy_prefs' => 1});
$sa->init(0); # parse rules


# make a _copy_ of the STDERR file descriptor
# (so we can restore it after redirecting it)
open(OLDERR, ">&STDERR") || die "Cannot copy STDERR file handle";

# create a file descriptior for logging STDERR
# (we do not want warnings for regexps we know are invalid)
my $fh = IO::File->new_tmpfile();
open(LOGERR, ">&".fileno($fh)) || die "Cannot create LOGERR temp file";

# quiet "used only once" warnings
1 if *OLDERR;
1 if *LOGERR;


sub tryone {
  my $re = shift;
  return $sa->{conf}->{parser}->is_regexp_valid('test', $re);
}

# test valid regexps with this sub
sub goodone {
  my $re = shift;
  open(STDERR, ">&=OLDERR") || die "Cannot reopen STDERR";
  return tryone $re;
}

# test invalid regexps with this sub
sub badone {
  my $re = shift;
  open(STDERR, ">&=LOGERR") || die "Cannot reopen STDERR (for logging)";
  return !tryone $re;
}


ok goodone qr/foo bar/;
ok goodone qr/foo bar/i;
ok goodone qr/foo bar/is;
ok goodone qr/foo bar/im;
ok goodone qr!foo bar!im;

ok goodone 'qr/foo bar/';
ok goodone 'qr/foo bar/im';
ok goodone 'qr!foo bar!';
ok goodone 'qr!foo bar!im';
ok goodone '/^foo bar$/';

ok goodone '/foo bar/';
ok goodone '/foo bar/im';
ok goodone 'm!foo bar!is';
ok goodone 'm{foo bar}is';
ok goodone 'm(foo bar)is';

ok goodone 'm<foo bar>is';
ok goodone 'foo bar';
ok goodone 'foo/bar';
ok badone 'foo(bar';
ok badone 'foo(?{1})bar';

ok badone '/foo(?{1})bar/';
ok badone 'm!foo(?{1})bar!';
# ok badone '/test//';          # removed for bug 4700
ok goodone '.*';
ok goodone 'm*<a[^<]{0,60} onMouseMove=(?:3D)?"window.status=(?:3D)?\'https?://*';