Privoxy-Regression-Test: Bump copyright
[privoxy.git] / tools / privoxy-regression-test.pl
index a1911c7..52e5117 100755 (executable)
@@ -7,7 +7,7 @@
 # A regression test "framework" for Privoxy. For documentation see:
 # perldoc privoxy-regression-test.pl
 #
-# $Id: privoxy-regression-test.pl,v 1.87 2013/01/06 18:16:10 fabiankeil Exp $
+# $Id: privoxy-regression-test.pl,v 1.95 2016/05/12 08:42:50 fabiankeil Exp $
 #
 # Wish list:
 #
@@ -19,7 +19,7 @@
 # - Document magic Expect Header values
 # - Internal fuzz support?
 #
-# Copyright (c) 2007-2013 Fabian Keil <fk@fabiankeil.de>
+# Copyright (c) 2007-2016 Fabian Keil <fk@fabiankeil.de>
 #
 # Permission to use, copy, modify, and distribute this software for any
 # purpose with or without fee is hereby granted, provided that the above
@@ -66,8 +66,6 @@ use constant {
     DEBUG_LEVEL_VERBOSE_SUCCESS => 0,
     DEBUG_LEVEL_STATUS          => 1,
 
-    VERBOSE_TEST_DESCRIPTION    => 1,
-
     # Internal use, don't modify
     # Available debug bits:
     LL_SOFT_ERROR       =>  1,
@@ -92,7 +90,6 @@ sub init_our_variables () {
     our $leading_log_time = LEADING_LOG_TIME;
     our $leading_log_date = LEADING_LOG_DATE;
     our $privoxy_cgi_url  = PRIVOXY_CGI_URL;
-    our $verbose_test_description = VERBOSE_TEST_DESCRIPTION;
     our $log_level = get_default_log_level();
 }
 
@@ -344,7 +341,7 @@ sub load_regression_tests_through_privoxy () {
             $privoxy_features{$feature} = $1 if defined $feature;
             $feature = undef;
 
-        } elsif (m@This is <a href="http://www.privoxy.org/">Privoxy</a> (\d+\.\d+\.\d+) on@) {
+        } elsif (m@This is <a href="https?://www.privoxy.org/">Privoxy</a> (\d+\.\d+\.\d+) on@) {
             $privoxy_version = $1;
         }
     }
@@ -494,8 +491,7 @@ sub mark_matching_tests_for_skipping($) {
                 my $message = sprintf("Marking test %s for ignoring. Overwrite condition: %s.",
                                       $regression_tests[$s][$r]{'number'}, $overwrite_condition);
 
-                # XXX: Should eventually be downgraded to LL_FILE_LOADING.
-                log_message($message);
+                l(LL_FILE_LOADING, $message);
 
                 # XXX: Should eventually get its own key so get_skip_reason()
                 #      can tell about the overwrite condition.
@@ -529,6 +525,7 @@ sub load_action_files ($) {
         my $curl_url = quote($actionfiles[$file_number]);
         my $actionfile = undef;
         my $sticky_actions = undef;
+        my $level_offset = 0;
 
         foreach (@{get_cgi_page_or_else($curl_url)}) {
 
@@ -548,6 +545,11 @@ sub load_action_files ($) {
             next unless defined $token;
 
             # Load regression tests
+            if ($token eq 'default level offset') {
+
+                $level_offset = $value;
+                l(LL_FILE_LOADING, "Setting default level offset to " . $level_offset);
+            }
 
             if (token_starts_new_test($token)) {
 
@@ -556,6 +558,9 @@ sub load_action_files ($) {
                 $count++;
                 enlist_new_test(\@regression_tests, $token, $value, $si, $ri, $count);
                 $no_checks = 1; # Already validated by enlist_new_test().
+                if ($level_offset != 0) {
+                    $regression_tests[$si][$ri]{'level'} += $level_offset;
+                }
             }
 
             if ($token =~ /level\s+(\d+)/i) {
@@ -720,12 +725,12 @@ sub execute_regression_tests () {
             #      from different sections isn't possible.
             #      Is this worth changing the layout?
             fisher_yates_shuffle(\@regression_tests);
-            for (my $s = 0;  $s < @regression_tests; $s++) {
+            for (my $s = 0; $s < @regression_tests; $s++) {
                 fisher_yates_shuffle($regression_tests[$s]);
             }
         }
 
-        for (my $s = 0;  $s < @regression_tests; $s++) {
+        for (my $s = 0; $s < @regression_tests; $s++) {
 
             my $r = 0;
 
@@ -1546,86 +1551,81 @@ sub log_message ($) {
 
 sub log_result ($$) {
 
-    our $verbose_test_description;
     our $filtered_request;
 
     my $test = shift;
     my $result = shift;
     my $number = shift;
 
-    my $message = '';
+    my $message = sprintf("%s for test %d",
+                          interpret_result($result),
+                          $test->{'number'});
 
-    $message .= interpret_result($result);
-    $message .= " for test ";
-    $message .= $number;
-    $message .= '/';
-    $message .= $test->{'number'};
-    $message .= '/';
-    $message .= $test->{'section-id'};
-    $message .= '/';
-    $message .= $test->{'regression-test-id'};
-    $message .= '.';
+    if (cli_option_is_set('verbose')) {
+        $message .= sprintf(" (%d/%d/%d)", $number,
+                            $test->{'section-id'},
+                            $test->{'regression-test-id'});
+    }
 
-    if ($verbose_test_description) {
+    $message .= '. ';
 
-        if ($test->{'type'} == CLIENT_HEADER_TEST) {
+    if ($test->{'type'} == CLIENT_HEADER_TEST) {
 
-            $message .= ' Header ';
-            $message .= quote($test->{'data'});
-            $message .= ' and tag ';
-            $message .= quote($test->{'tag'});
+        $message .= 'Header ';
+        $message .= quote($test->{'data'});
+        $message .= ' and tag ';
+        $message .= quote($test->{'tag'});
 
-        } elsif ($test->{'type'} == SERVER_HEADER_TEST) {
+    } elsif ($test->{'type'} == SERVER_HEADER_TEST) {
 
-            $message .= ' Request Header ';
-            $message .= quote($test->{'data'});
-            $message .= ' and tag ';
-            $message .= quote($test->{'tag'});
+        $message .= 'Request Header ';
+        $message .= quote($test->{'data'});
+        $message .= ' and tag ';
+        $message .= quote($test->{'tag'});
 
-        } elsif ($test->{'type'} == DUMB_FETCH_TEST) {
+    } elsif ($test->{'type'} == DUMB_FETCH_TEST) {
 
-            $message .= ' URL ';
-            $message .= quote($test->{'data'});
-            $message .= ' and expected status code ';
-            $message .= quote($test->{'expected-status-code'});
+        $message .= 'URL ';
+        $message .= quote($test->{'data'});
+        $message .= ' and expected status code ';
+        $message .= quote($test->{'expected-status-code'});
 
-        } elsif ($test->{'type'} == TRUSTED_CGI_REQUEST) {
+    } elsif ($test->{'type'} == TRUSTED_CGI_REQUEST) {
 
-            $message .= ' CGI URL ';
-            $message .= quote($test->{'data'});
-            $message .= ' and expected status code ';
-            $message .= quote($test->{'expected-status-code'});
+        $message .= 'CGI URL ';
+        $message .= quote($test->{'data'});
+        $message .= ' and expected status code ';
+        $message .= quote($test->{'expected-status-code'});
 
-        } elsif ($test->{'type'} == METHOD_TEST) {
+    } elsif ($test->{'type'} == METHOD_TEST) {
 
-            $message .= ' HTTP method ';
-            $message .= quote($test->{'data'});
-            $message .= ' and expected status code ';
-            $message .= quote($test->{'expected-status-code'});
+        $message .= 'HTTP method ';
+        $message .= quote($test->{'data'});
+        $message .= ' and expected status code ';
+        $message .= quote($test->{'expected-status-code'});
 
-        } elsif ($test->{'type'} == BLOCK_TEST) {
+    } elsif ($test->{'type'} == BLOCK_TEST) {
 
-            $message .= ' Supposedly-blocked URL: ';
-            $message .= quote($test->{'data'});
+        $message .= 'Supposedly-blocked URL: ';
+        $message .= quote($test->{'data'});
 
-        } elsif ($test->{'type'} == STICKY_ACTIONS_TEST) {
+    } elsif ($test->{'type'} == STICKY_ACTIONS_TEST) {
 
-            $message .= ' Sticky Actions: ';
-            $message .= quote($test->{'sticky-actions'});
-            $message .= ' and URL: ';
-            $message .= quote($test->{'data'});
+        $message .= 'Sticky Actions: ';
+        $message .= quote($test->{'sticky-actions'});
+        $message .= ' and URL: ';
+        $message .= quote($test->{'data'});
 
-        } elsif ($test->{'type'} == REDIRECT_TEST) {
+    } elsif ($test->{'type'} == REDIRECT_TEST) {
 
-            $message .= ' Redirected URL: ';
-            $message .= quote($test->{'data'});
-            $message .= ' and redirect destination: ';
-            $message .= quote($test->{'redirect destination'});
+        $message .= 'Redirected URL: ';
+        $message .= quote($test->{'data'});
+        $message .= ' and redirect destination: ';
+        $message .= quote($test->{'redirect destination'});
 
-        } else {
+    } else {
 
-            die "Incomplete support for test type " . $test->{'type'} .  " detected.";
-        }
+        die "Incomplete support for test type " . $test->{'type'} .  " detected.";
     }
 
     log_message($message) if (!$result or cli_option_is_set('verbose'));
@@ -1957,6 +1957,13 @@ max-level value as failed tests will result in outgoing
 connections. Use the B<--max-level> option to run them
 as well.
 
+The "Default level offset" directive can be used to change
+the default level by a given value. This directive affects
+all tests located after it until the end of the file or a another
+"Default level offset" directive is reached. The purpose of this
+directive is to make it more convenient to skip similar tests in
+a given file without having to remove or disable the tests completely.
+
 =head1 OPTIONS
 
 B<--debug bitmask> Add the bitmask provided as integer