ikiwiki/t/conflicts.t

147 lines
4.5 KiB
Perl
Executable File

#!/usr/bin/perl
# Tests for bugs relating to conflicting files in the srcdir
use warnings;
use strict;
use Cwd qw(getcwd);
use Test::More;
my $installed = $ENV{INSTALLED_TESTS};
my @command;
if ($installed) {
ok(1, "running installed");
@command = qw(ikiwiki);
}
else {
ok(! system("make -s ikiwiki.out"));
@command = ("perl", "-I".getcwd, qw(./ikiwiki.out
--underlaydir=underlays/basewiki
--set underlaydirbase=underlays
--templatedir=templates));
}
# setup
my $srcdir="t/tmp/src";
my $destdir="t/tmp/dest";
# runs ikiwiki to build test site
sub runiki {
my $testdesc=shift;
ok((! system(@command, qw(--plugin txt --plugin rawhtml),
$srcdir, $destdir, @_)),
$testdesc);
}
sub refreshiki {
runiki(shift);
}
sub setupiki {
ok(! system("rm -rf $srcdir/.ikiwiki $destdir"));
runiki(shift, "--rebuild");
}
sub newsrcdir {
ok(! system("rm -rf $srcdir $destdir"));
ok(! system("mkdir -p $srcdir"));
}
# At one point, changing the extension of the source file of a page caused
# ikiwiki to fail.
newsrcdir();
ok(! system("touch $srcdir/foo.mdwn"));
setupiki("initial setup");
ok(! system("mv $srcdir/foo.mdwn $srcdir/foo.txt"));
refreshiki("changed extension of source file of page");
ok(! system("mv $srcdir/foo.txt $srcdir/foo.mdwn"));
refreshiki("changed extension of source file of page 2");
# Conflicting page sources is sorta undefined behavior,
# but should not crash ikiwiki.
# Added when refreshing
ok(! system("touch $srcdir/foo.txt"));
refreshiki("conflicting page sources in refresh");
# Present during setup
newsrcdir();
ok(! system("touch $srcdir/foo.mdwn"));
ok(! system("touch $srcdir/foo.txt"));
setupiki("conflicting page sources in setup");
# Page and non-page file with same pagename.
newsrcdir();
ok(! system("touch $srcdir/foo.mdwn"));
ok(! system("touch $srcdir/foo"));
setupiki("conflicting page and non-page in setup");
newsrcdir();
ok(! system("touch $srcdir/foo.mdwn"));
setupiki("initial setup");
ok(! system("touch $srcdir/foo"));
refreshiki("conflicting page added (non-page already existing) in refresh");
newsrcdir();
ok(! system("touch $srcdir/foo"));
setupiki("initial setup");
ok(! system("touch $srcdir/foo.mdwn"));
refreshiki("conflicting non-page added (page already existing) in refresh");
# Page that renders to a file that is also a subdirectory holding another
# file.
newsrcdir();
ok(! system("touch $srcdir/foo.mdwn"));
ok(! system("mkdir -p $srcdir/foo/index.html"));
ok(! system("touch $srcdir/foo/index.html/bar.mdwn"));
setupiki("conflicting page file and subdirectory");
newsrcdir();
ok(! system("touch $srcdir/foo.mdwn"));
ok(! system("mkdir -p $srcdir/foo/index.html"));
ok(! system("touch $srcdir/foo/index.html/bar"));
setupiki("conflicting page file and subdirectory 2");
# Changing a page file into a non-page could also cause ikiwiki to fail.
newsrcdir();
ok(! system("touch $srcdir/foo.mdwn"));
setupiki("initial setup");
ok(! system("mv $srcdir/foo.mdwn $srcdir/foo"));
refreshiki("page file turned into non-page");
# Changing a non-page file into a page could also cause ikiwiki to fail.
newsrcdir();
ok(! system("touch $srcdir/foo"));
setupiki("initial setup");
ok(! system("mv $srcdir/foo $srcdir/foo.mdwn"));
refreshiki("non-page file turned into page");
# What if a page renders to the same html file that a rawhtml file provides?
# Added when refreshing
newsrcdir();
ok(! system("touch $srcdir/foo.mdwn"));
setupiki("initial setup");
ok(! system("mkdir -p $srcdir/foo"));
ok(! system("touch $srcdir/foo/index.html"));
refreshiki("rawhtml file rendered same as existing page in refresh");
# Moved when refreshing
newsrcdir();
ok(! system("touch $srcdir/foo.mdwn"));
setupiki("initial setup");
ok(! system("mkdir -p $srcdir/foo"));
ok(! system("mv $srcdir/foo.mdwn $srcdir/foo/index.html"));
refreshiki("existing page moved to rawhtml file in refresh");
# Inverse added when refreshing
newsrcdir();
ok(! system("mkdir -p $srcdir/foo"));
ok(! system("touch $srcdir/foo/index.html"));
setupiki("initial setup");
ok(! system("touch $srcdir/foo.mdwn"));
refreshiki("page rendered same as existing rawhtml file in refresh");
# Inverse moved when refreshing
newsrcdir();
ok(! system("mkdir -p $srcdir/foo"));
ok(! system("touch $srcdir/foo/index.html"));
setupiki("initial setup");
ok(! system("mv $srcdir/foo/index.html $srcdir/foo.mdwn"));
refreshiki("rawhtml file moved to page in refresh");
# Present during setup
newsrcdir();
ok(! system("touch $srcdir/foo.mdwn"));
ok(! system("mkdir -p $srcdir/foo"));
ok(! system("touch $srcdir/foo/index.html"));
setupiki("rawhtml file rendered same as existing page in setup");
done_testing;