File Coverage

blib/lib/HTTP/WebTest/Plugin/TextMatchTest.pm
Criterion Covered Total %
statement 39 39 100.0
branch 10 10 100.0
condition n/a
subroutine 4 4 100.0
pod 1 2 50.0
total 54 55 98.1


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;