Tests: rewrite module tests, the "if" directive.
diff --git a/rewrite_if.t b/rewrite_if.t
new file mode 100644
index 0000000..32ef0cf
--- /dev/null
+++ b/rewrite_if.t
@@ -0,0 +1,195 @@
+#!/usr/bin/perl
+
+# (C) Sergey Kandaurov
+# (C) Nginx, Inc.
+
+# Tests for rewrite "if" condition.
+
+###############################################################################
+
+use warnings;
+use strict;
+
+use Test::More;
+
+BEGIN { use FindBin; chdir($FindBin::Bin); }
+
+use lib 'lib';
+use Test::Nginx;
+
+###############################################################################
+
+select STDERR; $| = 1;
+select STDOUT; $| = 1;
+
+my $t = Test::Nginx->new()->has(qw/http rewrite/)->plan(33)
+ ->write_file_expand('nginx.conf', <<'EOF');
+
+%%TEST_GLOBALS%%
+
+daemon off;
+
+events {
+}
+
+http {
+ %%TEST_GLOBALS_HTTP%%
+
+ server {
+ listen 127.0.0.1:8080;
+ server_name localhost;
+
+ location / {
+ if ($arg_c) {
+ return 204;
+ }
+ }
+
+ location /sp {
+ if ( $arg_c ) {
+ return 204;
+ }
+ }
+
+ location /eq {
+ if ($arg_c = 1) {
+ return 204;
+ }
+ }
+
+ location /not {
+ if ($arg_c != 2) {
+ return 204;
+ }
+ }
+
+ location /pos {
+ if ($arg_c ~ foo) {
+ return 204;
+ }
+ }
+
+ location /cpos {
+ if ($arg_c ~* foo) {
+ return 204;
+ }
+ }
+
+ location /neg {
+ if ($arg_c !~ foo) {
+ return 204;
+ }
+ }
+
+ location /cneg {
+ if ($arg_c !~* foo) {
+ return 204;
+ }
+ }
+
+ location /plain {
+ if (-f %%TESTDIR%%/$arg_c) {
+ return 204;
+ }
+ }
+
+ location /dir {
+ if (-d %%TESTDIR%%/$arg_c) {
+ return 204;
+ }
+ }
+
+ location /exist {
+ if (-e %%TESTDIR%%/$arg_c) {
+ return 204;
+ }
+ }
+
+ location /exec {
+ if (-x %%TESTDIR%%/$arg_c) {
+ return 204;
+ }
+ }
+
+ location /not_plain {
+ if (!-f %%TESTDIR%%/$arg_c) {
+ return 204;
+ }
+ }
+
+ location /not_dir {
+ if (!-d %%TESTDIR%%/$arg_c) {
+ return 204;
+ }
+ }
+
+ location /not_exist {
+ if (!-e %%TESTDIR%%/$arg_c) {
+ return 204;
+ }
+ }
+
+ location /not_exec {
+ if (!-x %%TESTDIR%%/$arg_c) {
+ return 204;
+ }
+ }
+ }
+}
+
+EOF
+
+$t->write_file('file', '');
+mkdir($t->testdir() . '/dir');
+
+$t->run();
+
+###############################################################################
+
+like(http_get('/?c=1'), qr/ 204 /, 'var');
+unlike(http_get('/?c=0'), qr/ 204 /, 'false');
+like(http_get('/sp?c=1'), qr/ 204 /, 'spaces');
+
+like(http_get('/eq?c=1'), qr/ 204 /, 'equal');
+unlike(http_get('/eq?c=2'), qr/ 204 /, 'equal false');
+like(http_get('/not?c=1'), qr/ 204 /, 'not equal');
+unlike(http_get('/not?c=2'), qr/ 204 /, 'not equal false');
+
+like(http_get('/pos?c=food'), qr/ 204 /, 'match');
+like(http_get('/cpos?c=FooD'), qr/ 204 /, 'match case');
+like(http_get('/neg?c=FooD'), qr/ 204 /, 'match negative');
+like(http_get('/cneg?c=bar'), qr/ 204 /, 'match negative case');
+
+unlike(http_get('/pos?c=FooD'), qr/ 204 /, 'mismatch');
+unlike(http_get('/cpos?c=bar'), qr/ 204 /, 'mismatch case');
+unlike(http_get('/neg?c=food'), qr/ 204 /, 'mismatch negative');
+unlike(http_get('/cneg?c=FooD'), qr/ 204 /, 'mismatch negative case');
+
+like(http_get('/plain?c=file'), qr/ 204 /, 'plain file');
+unlike(http_get('/plain?c=dir'), qr/ 204 /, 'plain dir');
+unlike(http_get('/not_plain?c=file'), qr/ 204 /, 'not plain file');
+like(http_get('/not_plain?c=dir'), qr/ 204 /, 'not plain dir');
+
+unlike(http_get('/dir/?c=file'), qr/ 204 /, 'directory file');
+like(http_get('/dir?c=dir'), qr/ 204 /, 'directory dir');
+like(http_get('/not_dir?c=file'), qr/ 204 /, 'not directory file');
+unlike(http_get('/not_dir?c=dir'), qr/ 204 /, 'not directory dir');
+
+like(http_get('/exist?c=file'), qr/ 204 /, 'exist file');
+like(http_get('/exist?c=dir'), qr/ 204 /, 'exist dir');
+unlike(http_get('/exist?c=nx'), qr/ 204 /, 'exist non-existent');
+unlike(http_get('/not_exist?c=file'), qr/ 204 /, 'not exist file');
+unlike(http_get('/not_exist?c=dir'), qr/ 204 /, 'not exist dir');
+like(http_get('/not_exist?c=nx'), qr/ 204 /, 'not exist non-existent');
+
+SKIP: {
+skip 'no exec on win32', 4 if $^O eq 'MSWin32';
+
+unlike(http_get('/exec?c=file'), qr/ 204 /, 'executable file');
+like(http_get('/exec?c=dir'), qr/ 204 /, 'executable dir');
+like(http_get('/not_exec?c=file'), qr/ 204 /, 'not executable file');
+unlike(http_get('/not_exec?c=dir'), qr/ 204 /, 'not executable dir');
+
+}
+
+###############################################################################