line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
# $Id: TextMatchTest.pm,v 1.8 2003/03/02 11:52:09 m_ilya Exp $ |
2
|
|
|
|
|
|
|
|
3
|
|
|
|
|
|
|
package HTTP::WebTest::Plugin::TextMatchTest; |
4
|
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
=head1 NAME |
6
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
HTTP::WebTest::Plugin::TextMatchTest - Test the content of the HTTP response. |
8
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
=head1 SYNOPSIS |
10
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
Not Applicable |
12
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
=head1 DESCRIPTION |
14
|
|
|
|
|
|
|
|
15
|
|
|
|
|
|
|
This plugin supports test on the content of the HTTP response. You can test |
16
|
|
|
|
|
|
|
for the existence or non-existence of a literal string or a regular expression. |
17
|
|
|
|
|
|
|
|
18
|
|
|
|
|
|
|
=cut |
19
|
|
|
|
|
|
|
|
20
|
10
|
|
|
10
|
|
58
|
use strict; |
|
10
|
|
|
|
|
26
|
|
|
10
|
|
|
|
|
371
|
|
21
|
|
|
|
|
|
|
|
22
|
10
|
|
|
10
|
|
1364
|
use base qw(HTTP::WebTest::Plugin); |
|
10
|
|
|
|
|
21
|
|
|
10
|
|
|
|
|
22346
|
|
23
|
|
|
|
|
|
|
|
24
|
|
|
|
|
|
|
=head1 TEST PARAMETERS |
25
|
|
|
|
|
|
|
|
26
|
|
|
|
|
|
|
=for pod_merge copy params |
27
|
|
|
|
|
|
|
|
28
|
|
|
|
|
|
|
=head2 ignore_case |
29
|
|
|
|
|
|
|
|
30
|
|
|
|
|
|
|
Option to do case-insensitive string matching for C, |
31
|
|
|
|
|
|
|
C, C and C test parameters. |
32
|
|
|
|
|
|
|
|
33
|
|
|
|
|
|
|
=head3 Allowed values |
34
|
|
|
|
|
|
|
|
35
|
|
|
|
|
|
|
C, C |
36
|
|
|
|
|
|
|
|
37
|
|
|
|
|
|
|
=head3 Default value |
38
|
|
|
|
|
|
|
|
39
|
|
|
|
|
|
|
C |
40
|
|
|
|
|
|
|
|
41
|
|
|
|
|
|
|
=head2 text_forbid |
42
|
|
|
|
|
|
|
|
43
|
|
|
|
|
|
|
List of text strings that are forbidden to exist in the returned |
44
|
|
|
|
|
|
|
page. |
45
|
|
|
|
|
|
|
|
46
|
|
|
|
|
|
|
See also the C and C parameters. |
47
|
|
|
|
|
|
|
|
48
|
|
|
|
|
|
|
=head2 text_require |
49
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
List of text strings that are required to exist in the returned |
51
|
|
|
|
|
|
|
page. |
52
|
|
|
|
|
|
|
|
53
|
|
|
|
|
|
|
See also the C and C parameters. |
54
|
|
|
|
|
|
|
|
55
|
|
|
|
|
|
|
=head2 regex_forbid |
56
|
|
|
|
|
|
|
|
57
|
|
|
|
|
|
|
List of regular expressions that are forbidden to exist in the |
58
|
|
|
|
|
|
|
returned page. |
59
|
|
|
|
|
|
|
|
60
|
|
|
|
|
|
|
For more information, see L or see Programming |
61
|
|
|
|
|
|
|
Perl, 3rd edition, Chapter 5. |
62
|
|
|
|
|
|
|
|
63
|
|
|
|
|
|
|
See also the C and C parameters. |
64
|
|
|
|
|
|
|
|
65
|
|
|
|
|
|
|
=head2 regex_require |
66
|
|
|
|
|
|
|
|
67
|
|
|
|
|
|
|
List of regular expressions that are required to exist in the |
68
|
|
|
|
|
|
|
returned page. |
69
|
|
|
|
|
|
|
|
70
|
|
|
|
|
|
|
For more information, see L or see Programming Perl, |
71
|
|
|
|
|
|
|
3rd edition, Chapter 5. |
72
|
|
|
|
|
|
|
|
73
|
|
|
|
|
|
|
See also the C and C parameters. |
74
|
|
|
|
|
|
|
|
75
|
|
|
|
|
|
|
=cut |
76
|
|
|
|
|
|
|
|
77
|
|
|
|
|
|
|
sub param_types { |
78
|
190
|
|
|
190
|
1
|
3394
|
return q(ignore_case yesno |
79
|
|
|
|
|
|
|
text_forbid list |
80
|
|
|
|
|
|
|
text_require list |
81
|
|
|
|
|
|
|
regex_forbid list |
82
|
|
|
|
|
|
|
regex_require list); |
83
|
|
|
|
|
|
|
} |
84
|
|
|
|
|
|
|
|
85
|
|
|
|
|
|
|
sub check_response { |
86
|
190
|
|
|
190
|
0
|
384
|
my $self = shift; |
87
|
|
|
|
|
|
|
|
88
|
|
|
|
|
|
|
# response content |
89
|
190
|
|
|
|
|
8398
|
my $content = $self->webtest->current_response->content; |
90
|
|
|
|
|
|
|
|
91
|
190
|
|
|
|
|
4165
|
$self->validate_params(qw(ignore_case |
92
|
|
|
|
|
|
|
text_forbid text_require |
93
|
|
|
|
|
|
|
regex_forbid regex_require)); |
94
|
|
|
|
|
|
|
|
95
|
|
|
|
|
|
|
# ignore case or not? |
96
|
190
|
|
|
|
|
1522
|
my $ignore_case = $self->yesno_test_param('ignore_case'); |
97
|
190
|
100
|
|
|
|
740
|
my $case_re = $ignore_case ? '(?i)' : ''; |
98
|
|
|
|
|
|
|
|
99
|
|
|
|
|
|
|
# test results |
100
|
190
|
|
|
|
|
1379
|
my @results = (); |
101
|
190
|
|
|
|
|
534
|
my @ret = (); |
102
|
|
|
|
|
|
|
|
103
|
|
|
|
|
|
|
# check for forbidden text |
104
|
190
|
|
|
|
|
325
|
for my $text_forbid (@{$self->test_param('text_forbid', [])}) { |
|
190
|
|
|
|
|
731
|
|
105
|
19
|
|
|
|
|
1550
|
my $ok = $content !~ /$case_re\Q$text_forbid\E/; |
106
|
|
|
|
|
|
|
|
107
|
19
|
|
|
|
|
98
|
push @results, $self->test_result($ok, $text_forbid); |
108
|
|
|
|
|
|
|
} |
109
|
|
|
|
|
|
|
|
110
|
190
|
100
|
|
|
|
747
|
push @ret, ['Forbidden text', @results] if @results; |
111
|
190
|
|
|
|
|
416
|
@results = (); |
112
|
|
|
|
|
|
|
|
113
|
|
|
|
|
|
|
# check for required text |
114
|
190
|
|
|
|
|
1535
|
for my $text_require (@{$self->test_param('text_require', [])}) { |
|
190
|
|
|
|
|
846
|
|
115
|
101
|
|
|
|
|
4380
|
my $ok = $content =~ /$case_re\Q$text_require\E/; |
116
|
|
|
|
|
|
|
|
117
|
101
|
|
|
|
|
466
|
push @results, $self->test_result($ok, $text_require); |
118
|
|
|
|
|
|
|
} |
119
|
|
|
|
|
|
|
|
120
|
190
|
100
|
|
|
|
859
|
push @ret, ['Required text', @results] if @results; |
121
|
190
|
|
|
|
|
387
|
@results = (); |
122
|
|
|
|
|
|
|
|
123
|
|
|
|
|
|
|
# check for forbidden regex |
124
|
190
|
|
|
|
|
328
|
for my $regex_forbid (@{$self->test_param('regex_forbid', [])}) { |
|
190
|
|
|
|
|
910
|
|
125
|
12
|
|
|
|
|
2386
|
my $ok = $content !~ /$case_re$regex_forbid/; |
126
|
|
|
|
|
|
|
|
127
|
12
|
|
|
|
|
52
|
push @results, $self->test_result($ok, $regex_forbid); |
128
|
|
|
|
|
|
|
} |
129
|
|
|
|
|
|
|
|
130
|
190
|
100
|
|
|
|
659
|
push @ret, ['Forbidden regex', @results] if @results; |
131
|
190
|
|
|
|
|
374
|
@results = (); |
132
|
|
|
|
|
|
|
|
133
|
|
|
|
|
|
|
# check for required regex |
134
|
190
|
|
|
|
|
340
|
for my $regex_require (@{$self->test_param('regex_require', [])}) { |
|
190
|
|
|
|
|
798
|
|
135
|
20
|
|
|
|
|
623
|
my $ok = $content =~ /$case_re$regex_require/; |
136
|
|
|
|
|
|
|
|
137
|
20
|
|
|
|
|
74
|
push @results, $self->test_result($ok, $regex_require); |
138
|
|
|
|
|
|
|
} |
139
|
|
|
|
|
|
|
|
140
|
190
|
100
|
|
|
|
720
|
push @ret, ['Required regex', @results] if @results; |
141
|
190
|
|
|
|
|
586
|
@results = (); |
142
|
|
|
|
|
|
|
|
143
|
190
|
|
|
|
|
875
|
return @ret; |
144
|
|
|
|
|
|
|
} |
145
|
|
|
|
|
|
|
|
146
|
|
|
|
|
|
|
=head1 COPYRIGHT |
147
|
|
|
|
|
|
|
|
148
|
|
|
|
|
|
|
Copyright (c) 2000-2001 Richard Anderson. All rights reserved. |
149
|
|
|
|
|
|
|
|
150
|
|
|
|
|
|
|
Copyright (c) 2001-2003 Ilya Martynov. All rights reserved. |
151
|
|
|
|
|
|
|
|
152
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify |
153
|
|
|
|
|
|
|
it under the same terms as Perl itself. |
154
|
|
|
|
|
|
|
|
155
|
|
|
|
|
|
|
=head1 SEE ALSO |
156
|
|
|
|
|
|
|
|
157
|
|
|
|
|
|
|
L |
158
|
|
|
|
|
|
|
|
159
|
|
|
|
|
|
|
L |
160
|
|
|
|
|
|
|
|
161
|
|
|
|
|
|
|
L |
162
|
|
|
|
|
|
|
|
163
|
|
|
|
|
|
|
L |
164
|
|
|
|
|
|
|
|
165
|
|
|
|
|
|
|
=cut |
166
|
|
|
|
|
|
|
|
167
|
|
|
|
|
|
|
1; |