some other (similar) failure cases
[ikiwiki] / t / conflicts.t
1 #!/usr/bin/perl
2 # Tests for bugs relating to conflicting files in the srcdir
3 use warnings;
4 use strict;
5 use Test::More tests => 48;
6
7 # setup
8 my $srcdir="t/tmp/src";
9 my $destdir="t/tmp/dest";
10 ok(! system("make -s ikiwiki.out"));
11
12 # runs ikiwiki to build test site
13 sub runiki {
14         my $testdesc=shift;
15         ok((! system("perl -I. ./ikiwiki.out -plugin txt -plugin rawhtml -underlaydir=underlays/basewiki -set underlaydirbase=underlays -templatedir=templates $srcdir $destdir @_")),
16                 $testdesc);
17 }
18 sub refreshiki {
19         runiki(shift);
20 }
21 sub setupiki {
22         ok(! system("rm -rf $srcdir/.ikiwiki $destdir"));
23         runiki(shift, "--rebuild");
24 }
25 sub newsrcdir {
26         ok(! system("rm -rf $srcdir $destdir"));
27         ok(! system("mkdir -p $srcdir"));
28 }
29
30 # At one point, changing the extension of the source file of a page caused
31 # ikiwiki to fail.
32 newsrcdir();
33 ok(! system("touch $srcdir/foo.mdwn"));
34 setupiki("initial setup");
35 ok(! system("mv $srcdir/foo.mdwn $srcdir/foo.txt"));
36 refreshiki("changed extension of source file of page");
37 ok(! system("mv $srcdir/foo.txt $srcdir/foo.mdwn"));
38 refreshiki("changed extension of source file of page 2");
39
40 # Conflicting page sources is sorta undefined behavior,
41 # but should not crash ikiwiki.
42 # Added when refreshing
43 ok(! system("touch $srcdir/foo.txt"));
44 refreshiki("conflicting page sources in refresh");
45 # Present during setup
46 newsrcdir();
47 ok(! system("touch $srcdir/foo.mdwn"));
48 ok(! system("touch $srcdir/foo.txt"));
49 setupiki("conflicting page sources in setup");
50
51 # Page and non-page file with same pagename.
52 newsrcdir();
53 ok(! system("touch $srcdir/foo.mdwn"));
54 ok(! system("touch $srcdir/foo"));
55 setupiki("conflicting page and non-page in setup");
56 newsrcdir();
57 ok(! system("touch $srcdir/foo.mdwn"));
58 setupiki("initial setup");
59 ok(! system("touch $srcdir/foo"));
60 refreshiki("conflicting page added (non-page already existing) in refresh");
61 newsrcdir();
62 ok(! system("touch $srcdir/foo"));
63 setupiki("initial setup");
64 ok(! system("touch $srcdir/foo.mdwn"));
65 refreshiki("conflicting non-page added (page already existing) in refresh");
66
67 # Changing a page file into a non-page could also cause ikiwiki to fail.
68 newsrcdir();
69 ok(! system("touch $srcdir/foo.mdwn"));
70 setupiki("initial setup");
71 ok(! system("mv $srcdir/foo.mdwn $srcdir/foo"));
72 refreshiki("page file turned into non-page");
73
74 # Changing a non-page file into a page could also cause ikiwiki to fail.
75 newsrcdir();
76 ok(! system("touch $srcdir/foo"));
77 setupiki("initial setup");
78 ok(! system("mv $srcdir/foo $srcdir/foo.mdwn"));
79 refreshiki("non-page file turned into page");
80
81 # What if a page renders to the same html file that a rawhtml file provides?
82 # Added when refreshing
83 newsrcdir();
84 ok(! system("touch $srcdir/foo.mdwn"));
85 setupiki("initial setup");
86 ok(! system("mkdir -p $srcdir/foo"));
87 ok(! system("touch $srcdir/foo/index.html"));
88 refreshiki("rawhtml file rendered same as existing page in refresh");
89 # Inverse added when refreshing
90 newsrcdir();
91 ok(! system("mkdir -p $srcdir/foo"));
92 ok(! system("touch $srcdir/foo/index.html"));
93 setupiki("initial setup");
94 ok(! system("touch $srcdir/foo.mdwn"));
95 refreshiki("page rendered same as existing rawhtml file in refresh");
96 # Present during setup
97 newsrcdir();
98 ok(! system("touch $srcdir/foo.mdwn"));
99 ok(! system("mkdir -p $srcdir/foo"));
100 ok(! system("touch $srcdir/foo/index.html"));
101 setupiki("rawhtml file rendered same as existing page in setup");
102
103 # cleanup
104 ok(! system("rm -rf t/tmp"));