# HG changeset patch # User Maxim Dounin # Date 1330621217 -14400 # Node ID 6bac00bba8d4e10cd47023a82cd476b13b2704b7 # Parent 0a9e5d753fb84ac8d433256faa8e0cb29787c305 Tests: xslt filter tests. diff --git a/xslt.t b/xslt.t new file mode 100644 --- /dev/null +++ b/xslt.t @@ -0,0 +1,124 @@ +#!/usr/bin/perl + +# (C) Maxim Dounin + +# Tests for nginx xslt filter module. + +############################################################################### + +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 xslt/)->plan(5); + +$t->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; + + default_type text/xml; + + location /x1 { + xslt_stylesheet %%TESTDIR%%/test.xslt; + } + location /x2 { + xslt_stylesheet %%TESTDIR%%/test.xslt + param1='value1':param2=root param3='value%33'; + } + location /x3 { + xml_entities %%TESTDIR%%/entities.dtd; + xslt_stylesheet %%TESTDIR%%/test.xslt; + } + location /x4 { + xslt_stylesheet %%TESTDIR%%/first.xslt; + xslt_stylesheet %%TESTDIR%%/test.xslt; + } + } +} + +EOF + +$t->write_file('test.xslt', <<'EOF'); + + + + + + + + + + +test xslt result +param1= +param2= +param3= +data= + + + + +EOF + +$t->write_file('first.xslt', <<'EOF'); + + + + +other + + + + +EOF + +$t->write_file('entities.dtd', '' . "\n"); +$t->write_file('x1', ''); +$t->write_file('x2', 'data'); +$t->write_file('x3', '&test;'); +$t->write_file('x4', 'data'); + +$t->run(); + +############################################################################### + +like(http_get("/x1"), qr!200 OK.*test xslt result!ms, 'simple'); +like(http_get("/x1"), qr!200 OK.*Content-Type: text/html!ms, 'content type'); + +TODO: { +local $TODO = 'broken in 0.7.44 (r2589)'; + +like(http_get("/x2"), qr!200 OK.*param1=value1.*param2=data.*param3=value3!ms, + 'params'); + +} + +like(http_get("/x3"), qr!200 OK.*data=test entity!ms, 'entities'); +like(http_get("/x4"), qr!200 OK.*data=other data!ms, 'several stylesheets'); + +############################################################################### diff --git a/xslt_params.t b/xslt_params.t new file mode 100644 --- /dev/null +++ b/xslt_params.t @@ -0,0 +1,107 @@ +#!/usr/bin/perl + +# (C) Maxim Dounin + +# Tests for nginx xslt filter module. + +############################################################################### + +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 xslt/); + +$t->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; + + default_type text/xml; + + location /x1 { + xslt_stylesheet %%TESTDIR%%/test.xslt + param1='value1':param2=root param3='value%33'; + } + location /x2 { + xslt_stylesheet %%TESTDIR%%/test.xslt; + xslt_param param1 "'value1'"; + xslt_param param2 "root"; + xslt_string_param param3 "value3"; + } + location /x3 { + xslt_stylesheet %%TESTDIR%%/test.xslt + param1='value1':param2=root; + xslt_string_param param3 "value3"; + } + } +} + +EOF + +$t->write_file('test.xslt', <<'EOF'); + + + + + + + + + + +param1= +param2= +param3= + + + + +EOF + +$t->write_file('x1', 'data'); +$t->write_file('x2', 'data'); +$t->write_file('x3', 'data'); + +eval { + open OLDERR, ">&", \*STDERR; close STDERR; + $t->run(); + open STDERR, ">&", \*OLDERR; +}; + +plan(skip_all => 'no xslt_param') if $@; +$t->plan(3); + +############################################################################### + +like(http_get("/x1"), qr!200 OK.*param1=value1.*param2=data.*param3=value3!ms, + 'params from xslt_stylesheet'); +like(http_get("/x2"), qr!200 OK.*param1=value1.*param2=data.*param3=value3!ms, + 'params from xslt_param/xslt_string_param'); +like(http_get("/x3"), qr!200 OK.*param1=value1.*param2=data.*param3=value3!ms, + 'mixed'); + +###############################################################################