#!/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(8);

$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;
        }
        location /x5 {
            xslt_stylesheet %%TESTDIR%%/test.xslt
                            param1='$server_name';
        }
    }
}

EOF

$t->write_file('test.xslt', <<'EOF');

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html"/>

<xsl:param name="param1"/>
<xsl:param name="param2"/>
<xsl:param name="param3"/>

<xsl:template match="/">
test xslt result
param1=<xsl:value-of select="$param1"/>
param2=<xsl:value-of select="$param2"/>
param3=<xsl:value-of select="$param3"/>
data=<xsl:value-of select="/root"/>
</xsl:template>

</xsl:stylesheet>

EOF

$t->write_file('first.xslt', <<'EOF');

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<root>other <xsl:value-of select="/root"/></root>
</xsl:template>

</xsl:stylesheet>

EOF

$t->write_file('entities.dtd', '<!ENTITY test "test entity">' . "\n");
$t->write_file('x1', '<empty/>');
$t->write_file('x2', '<root>data</root>');
$t->write_file('x3', '<!DOCTYPE root><root>&test;</root>');
$t->write_file('x4', '<root>data</root>');
$t->write_file('x5', '<root>data</root>');

$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');
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');

TODO: {
todo_skip 'heap-buffer-overflow', 1 unless $t->has_version('1.17.2')
	or $ENV{TEST_NGINX_UNSAFE};

like(http_get("/x5"), qr!200 OK.*param1=localhost!ms, 'params variable');

}

# xslt and ranges

TODO: {
local $TODO = 'not yet' unless $t->has_version('1.19.2');

unlike(http_get("/x1"), qr!Accept-Ranges!, 'no Accept-Ranges');
like(http(<<EOF), qr!200 OK.*test xslt result!ms, 'no ranges');
GET /x1 HTTP/1.1
Host: localhost
Connection: close
Range: bytes=-10

EOF

}

###############################################################################
