meta test: Assert that malformed dates are rejected
[ikiwiki] / t / inline.t
1 #!/usr/bin/perl
2 use warnings;
3 use strict;
4 use Cwd qw(getcwd);
5 use Test::More;
6 use IkiWiki;
7
8 my $installed = $ENV{INSTALLED_TESTS};
9
10 my @command;
11 if ($installed) {
12         @command = qw(ikiwiki);
13 }
14 else {
15         ok(! system("make -s ikiwiki.out"));
16         @command = ("perl", "-I".getcwd, qw(./ikiwiki.out
17                 --underlaydir=underlays/basewiki
18                 --set underlaydirbase=underlays
19                 --templatedir=templates));
20 }
21
22 push @command, qw(--set usedirs=0 --plugin inline
23         --url=http://example.com --cgiurl=http://example.com/ikiwiki.cgi
24         --rss --atom t/tmp/in t/tmp/out --verbose);
25
26 my $blob;
27
28 my $add_new_post = gettext("Add a new post titled:");
29
30 ok(! system("rm -rf t/tmp"));
31 ok(! system("mkdir t/tmp"));
32
33 sub write_old_file {
34         my $name = shift;
35         my $content = shift;
36
37         writefile($name, "t/tmp/in", $content);
38         ok(utime(333333333, 333333333, "t/tmp/in/$name"));
39 }
40
41 write_old_file("protagonists.mdwn",
42         '[[!inline pages="protagonists/*" rootpage="protagonists/new"]]');
43 write_old_file("friends.mdwn",
44         '[[!inline pages="friends/*" postform=yes sort=title limit=2]]');
45 write_old_file("antagonists.mdwn",
46         '[[!inline pages="antagonists/*"]]');
47 # using old spelling of "limit" ("show") to verify backwards compat
48 write_old_file("enemies.mdwn",
49         '[[!inline pages="enemies/*" postform=no rootpage=enemies sort=title reverse=yes show=2]]');
50 # to test correct processing of ../
51 write_old_file("blah/blah/enemies.mdwn",
52         '[[!inline pages="enemies/*" postform=no rootpage=enemies sort=title reverse=yes show=2]]');
53 foreach my $page (qw(protagonists/shepard protagonists/link
54                 antagonists/saren antagonists/ganondorf
55                 friends/garrus friends/liara friends/midna friends/telma
56                 enemies/benezia enemies/geth enemies/rachni
57                 enemies/zant)) {
58         write_old_file("$page.mdwn", "this page is {$page}");
59 }
60 # test cross-linking between pages as rendered in RSS
61 write_old_file("enemies/zant.mdwn", "this page is {enemies/zant}\n\n".
62         "Zant hates [[friends/Midna]].");
63
64 ok(! system(@command));
65 ok(! system(@command, "--refresh"));
66
67 $blob = readfile("t/tmp/out/protagonists.html");
68 like($blob, qr{\Q$add_new_post\E}, 'rootpage=yes gives postform');
69 like($blob, qr{<input type="hidden" name="from" value="protagonists/new"},
70         'explicit rootpage is /protagonists/new');
71
72 $blob = readfile("t/tmp/out/friends.html");
73 like($blob, qr{\Q$add_new_post\E}, 'postform=yes forces postform');
74 like($blob, qr{<input type="hidden" name="from" value="friends"},
75         'implicit rootpage is /friends');
76 like($blob, qr[this page is \{friends/garrus}.*this page is \{friends/liara}]s,
77         'first two pages in desired sort order are present');
78 unlike($blob, qr{friends/(?:midna|telma)},
79         'pages excluded by limit should not be present');
80
81 $blob = readfile("t/tmp/out/antagonists.html");
82 unlike($blob, qr{\Q$add_new_post\E}, 'default is no postform');
83
84 $blob = readfile("t/tmp/out/enemies.html");
85 unlike($blob, qr{\Q$add_new_post\E}, 'postform=no forces no postform');
86 like($blob, qr[this page is \{enemies/zant}.*this page is \{enemies/rachni}]s,
87         'first two pages in reversed sort order are present');
88 unlike($blob, qr{enemies/(?:benezia|geth)},
89         'pages excluded by show should not be present');
90
91 $blob = readfile("t/tmp/out/enemies.rss");
92 like($blob, qr[this page is \{enemies/zant}.*this page is \{enemies/rachni}]s,
93         'first two pages in reversed sort order are present');
94 like($blob,
95         qr[Zant hates &lt;a href=(?:['"]|&quot;)http://example\.com/friends/midna.html(?:['"]|&quot;)&gt;Midna&lt;/a&gt;]s,
96         'link is correctly relative');
97
98 $blob = readfile("t/tmp/out/blah/blah/enemies.rss");
99 like($blob, qr[this page is \{enemies/zant}.*this page is \{enemies/rachni}]s,
100         'first two pages in reversed sort order are present');
101 like($blob,
102         qr[Zant hates &lt;a href=(?:['"]|&quot;)http://example\.com/friends/midna.html(?:['"]|&quot;)&gt;Midna&lt;/a&gt;]s,
103         'link is correctly relative');
104
105 done_testing;