diff options
-rwxr-xr-x | t/relativity.t | 123 |
1 files changed, 23 insertions, 100 deletions
diff --git a/t/relativity.t b/t/relativity.t index 5922ec9fa..84672fecd 100755 --- a/t/relativity.t +++ b/t/relativity.t @@ -99,6 +99,19 @@ sub check_cgi_mode_bits { is($mode & 07777, 0754); } +sub check_generated_content { + my $cgiurl_regex = shift; + ok(-e "t/tmp/out/a/b/c/index.html"); + $content = readfile("t/tmp/out/a/b/c/index.html"); + # no <base> on static HTML + unlike($content, qr{<base\W}); + like($content, $cgiurl_regex); + # cross-links between static pages are relative + like($content, qr{<li>A: <a href="../../">a</a></li>}); + like($content, qr{<li>B: <a href="../">b</a></li>}); + like($content, qr{<li>E: <a href="../../d/e/">e</a></li>}); +} + ####################################################################### # site 1: a perfectly ordinary ikiwiki @@ -109,17 +122,8 @@ write_setup_file( ); thoroughly_rebuild(); check_cgi_mode_bits(); - -ok(-e "t/tmp/out/a/b/c/index.html"); -$content = readfile("t/tmp/out/a/b/c/index.html"); -# no <base> on static HTML -unlike($content, qr{<base\W}); # url and cgiurl are on the same host so the cgiurl is host-relative -like($content, qr{<a[^>]+href="/cgi-bin/ikiwiki.cgi\?do=prefs"}); -# cross-links between static pages are relative -like($content, qr{<li>A: <a href="../../">a</a></li>}); -like($content, qr{<li>B: <a href="../">b</a></li>}); -like($content, qr{<li>E: <a href="../../d/e/">e</a></li>}); +check_generated_content(qr{<a[^>]+href="/cgi-bin/ikiwiki.cgi\?do=prefs"}); run(["./t/tmp/ikiwiki.cgi"], \undef, \$content, init => sub { $ENV{REQUEST_METHOD} = 'GET'; @@ -187,17 +191,8 @@ write_setup_file( ); thoroughly_rebuild(); check_cgi_mode_bits(); - -ok(-e "t/tmp/out/a/b/c/index.html"); -$content = readfile("t/tmp/out/a/b/c/index.html"); -# no <base> on static HTML -unlike($content, qr{<base\W}); # url and cgiurl are on the same host so the cgiurl is host-relative -like($content, qr{<a[^>]+href="/cgi-bin/ikiwiki.cgi\?do=prefs"}); -# cross-links between static pages are relative -like($content, qr{<li>A: <a href="../../">a</a></li>}); -like($content, qr{<li>B: <a href="../">b</a></li>}); -like($content, qr{<li>E: <a href="../../d/e/">e</a></li>}); +check_generated_content(qr{<a[^>]+href="/cgi-bin/ikiwiki.cgi\?do=prefs"}); run(["./t/tmp/ikiwiki.cgi"], \undef, \$content, init => sub { $ENV{REQUEST_METHOD} = 'GET'; @@ -268,18 +263,9 @@ write_setup_file( ); thoroughly_rebuild(); check_cgi_mode_bits(); - -ok(-e "t/tmp/out/a/b/c/index.html"); -$content = readfile("t/tmp/out/a/b/c/index.html"); -# no <base> on static HTML -unlike($content, qr{<base\W}); # url and cgiurl are not on the same host so the cgiurl has to be # protocol-relative or absolute -like($content, qr{<a[^>]+href="(?:http:)?//cgi.example.com/ikiwiki.cgi\?do=prefs"}); -# cross-links between static pages are still relative -like($content, qr{<li>A: <a href="../../">a</a></li>}); -like($content, qr{<li>B: <a href="../">b</a></li>}); -like($content, qr{<li>E: <a href="../../d/e/">e</a></li>}); +check_generated_content(qr{<a[^>]+href="(?:http:)?//cgi.example.com/ikiwiki.cgi\?do=prefs"}); run(["./t/tmp/ikiwiki.cgi"], \undef, \$content, init => sub { $ENV{REQUEST_METHOD} = 'GET'; @@ -336,18 +322,9 @@ write_setup_file( ); thoroughly_rebuild(); check_cgi_mode_bits(); - -ok(-e "t/tmp/out/a/b/c/index.html"); -$content = readfile("t/tmp/out/a/b/c/index.html"); -# no <base> on static HTML -unlike($content, qr{<base\W}); # url and cgiurl are not on the same host so the cgiurl has to be # protocol-relative or absolute -like($content, qr{<a[^>]+href="(?:http:)?//cgi.example.com/ikiwiki.cgi\?do=prefs"}); -# cross-links between static pages are still relative -like($content, qr{<li>A: <a href="../../">a</a></li>}); -like($content, qr{<li>B: <a href="../">b</a></li>}); -like($content, qr{<li>E: <a href="../../d/e/">e</a></li>}); +check_generated_content(qr{<a[^>]+href="(?:http:)?//cgi.example.com/ikiwiki.cgi\?do=prefs"}); run(["./t/tmp/ikiwiki.cgi"], \undef, \$content, init => sub { $ENV{REQUEST_METHOD} = 'GET'; @@ -408,17 +385,8 @@ write_setup_file( ); thoroughly_rebuild(); check_cgi_mode_bits(); - -ok(-e "t/tmp/out/a/b/c/index.html"); -$content = readfile("t/tmp/out/a/b/c/index.html"); -# no <base> on static HTML -unlike($content, qr{<base\W}); # url and cgiurl are on the same host so the cgiurl is host-relative -like($content, qr{<a[^>]+href="/cgi-bin/ikiwiki.cgi\?do=prefs"}); -# cross-links between static pages are relative -like($content, qr{<li>A: <a href="../../">a</a></li>}); -like($content, qr{<li>B: <a href="../">b</a></li>}); -like($content, qr{<li>E: <a href="../../d/e/">e</a></li>}); +check_generated_content(qr{<a[^>]+href="/cgi-bin/ikiwiki.cgi\?do=prefs"}); # when accessed via HTTPS, links are secure run(["./t/tmp/ikiwiki.cgi"], \undef, \$content, init => sub { @@ -496,17 +464,8 @@ write_setup_file( ); thoroughly_rebuild(); check_cgi_mode_bits(); - -ok(-e "t/tmp/out/a/b/c/index.html"); -$content = readfile("t/tmp/out/a/b/c/index.html"); -# no <base> on static HTML -unlike($content, qr{<base\W}); # url and cgiurl are on the same host but different schemes -like($content, qr{<a[^>]+href="https://example.com/cgi-bin/ikiwiki.cgi\?do=prefs"}); -# cross-links between static pages are relative -like($content, qr{<li>A: <a href="../../">a</a></li>}); -like($content, qr{<li>B: <a href="../">b</a></li>}); -like($content, qr{<li>E: <a href="../../d/e/">e</a></li>}); +check_generated_content(qr{<a[^>]+href="https://example.com/cgi-bin/ikiwiki.cgi\?do=prefs"}); # when accessed via HTTPS, links are secure (to avoid mixed-content) run(["./t/tmp/ikiwiki.cgi"], \undef, \$content, init => sub { @@ -581,17 +540,8 @@ write_setup_file( ); thoroughly_rebuild(); check_cgi_mode_bits(); - -ok(-e "t/tmp/out/a/b/c/index.html"); -$content = readfile("t/tmp/out/a/b/c/index.html"); -# no <base> on static HTML -unlike($content, qr{<base\W}); # url and cgiurl are on the same host but different schemes -like($content, qr{<a[^>]+href="https://example.com/cgi-bin/ikiwiki.cgi\?do=prefs"}); -# cross-links between static pages are relative -like($content, qr{<li>A: <a href="../../">a</a></li>}); -like($content, qr{<li>B: <a href="../">b</a></li>}); -like($content, qr{<li>E: <a href="../../d/e/">e</a></li>}); +check_generated_content(qr{<a[^>]+href="https://example.com/cgi-bin/ikiwiki.cgi\?do=prefs"}); # when accessed via HTTPS, links are secure (to avoid mixed-content) run(["./t/tmp/ikiwiki.cgi"], \undef, \$content, init => sub { @@ -673,17 +623,8 @@ write_setup_file( ); thoroughly_rebuild(); check_cgi_mode_bits(); - -ok(-e "t/tmp/out/a/b/c/index.html"); -$content = readfile("t/tmp/out/a/b/c/index.html"); -# no <base> on static HTML -unlike($content, qr{<base\W}); # FIXME: does /$LIB/ikiwiki-w3m.cgi work under w3m? -like($content, qr{<a[^>]+href="(?:file://)?/\$LIB/ikiwiki-w3m.cgi/ikiwiki.cgi\?do=prefs"}); -# cross-links between static pages are still relative -like($content, qr{<li>A: <a href="../../">a</a></li>}); -like($content, qr{<li>B: <a href="../">b</a></li>}); -like($content, qr{<li>E: <a href="../../d/e/">e</a></li>}); +check_generated_content(qr{<a[^>]+href="(?:file://)?/\$LIB/ikiwiki-w3m.cgi/ikiwiki.cgi\?do=prefs"}); run(["./t/tmp/ikiwiki.cgi"], \undef, \$content, init => sub { $ENV{REQUEST_METHOD} = 'GET'; @@ -705,17 +646,8 @@ write_setup_file( ); thoroughly_rebuild(); check_cgi_mode_bits(); - -ok(-e "t/tmp/out/a/b/c/index.html"); -$content = readfile("t/tmp/out/a/b/c/index.html"); -# no <base> on static HTML -unlike($content, qr{<base\W}); # FIXME: does /$LIB/ikiwiki-w3m.cgi work under w3m? -like($content, qr{<a[^>]+href="(?:file://)?/\$LIB/ikiwiki-w3m.cgi/ikiwiki.cgi\?do=prefs"}); -# cross-links between static pages are still relative -like($content, qr{<li>A: <a href="../../">a</a></li>}); -like($content, qr{<li>B: <a href="../">b</a></li>}); -like($content, qr{<li>E: <a href="../../d/e/">e</a></li>}); +check_generated_content(qr{<a[^>]+href="(?:file://)?/\$LIB/ikiwiki-w3m.cgi/ikiwiki.cgi\?do=prefs"}); run(["./t/tmp/ikiwiki.cgi"], \undef, \$content, init => sub { $ENV{REQUEST_METHOD} = 'GET'; @@ -740,17 +672,8 @@ write_setup_file( ); thoroughly_rebuild(); check_cgi_mode_bits(); - -ok(-e "t/tmp/out/a/b/c/index.html"); -$content = readfile("t/tmp/out/a/b/c/index.html"); -# no <base> on static HTML -unlike($content, qr{<base\W}); # url and cgiurl are on the same host so the cgiurl is host-relative -like($content, qr{<a[^>]+href="/cgi-bin/ikiwiki.cgi\?do=prefs"}); -# cross-links between static pages are relative -like($content, qr{<li>A: <a href="../../">a</a></li>}); -like($content, qr{<li>B: <a href="../">b</a></li>}); -like($content, qr{<li>E: <a href="../../d/e/">e</a></li>}); +check_generated_content(qr{<a[^>]+href="/cgi-bin/ikiwiki.cgi\?do=prefs"}); # because we are behind a reverse-proxy we must assume that # we're being accessed by the configured cgiurl |