summaryrefslogtreecommitdiff
path: root/t/conflicts.t
blob: 7748c105f6041bd73a75408e60b33f54fdf29a95 (plain)
  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 'no_plan';
  6. # setup
  7. my $srcdir="t/tmp/src";
  8. my $destdir="t/tmp/dest";
  9. ok(! system("make -s ikiwiki.out"));
  10. # runs ikiwiki to build test site
  11. sub runiki {
  12. my $testdesc=shift;
  13. ok((! system("perl -I. ./ikiwiki.out -plugin txt -plugin rawhtml -underlaydir=underlays/basewiki -set underlaydirbase=underlays -templatedir=templates $srcdir $destdir @_")),
  14. $testdesc);
  15. }
  16. sub refreshiki {
  17. runiki(shift);
  18. }
  19. sub setupiki {
  20. ok(! system("rm -rf $srcdir/.ikiwiki $destdir"));
  21. runiki(shift, "--rebuild");
  22. }
  23. sub newsrcdir {
  24. ok(! system("rm -rf $srcdir $destdir"));
  25. ok(! system("mkdir -p $srcdir"));
  26. }
  27. # At one point, changing the extension of the source file of a page caused
  28. # ikiwiki to fail.
  29. newsrcdir();
  30. ok(! system("touch $srcdir/foo.mdwn"));
  31. setupiki("initial setup");
  32. ok(! system("mv $srcdir/foo.mdwn $srcdir/foo.txt"));
  33. refreshiki("changed extension of source file of page");
  34. ok(! system("mv $srcdir/foo.txt $srcdir/foo.mdwn"));
  35. refreshiki("changed extension of source file of page 2");
  36. # Conflicting page sources is sorta undefined behavior,
  37. # but should not crash ikiwiki.
  38. # Added when refreshing
  39. ok(! system("touch $srcdir/foo.txt"));
  40. refreshiki("conflicting page sources in refresh");
  41. # Present during setup
  42. newsrcdir();
  43. ok(! system("touch $srcdir/foo.mdwn"));
  44. ok(! system("touch $srcdir/foo.txt"));
  45. setupiki("conflicting page sources in setup");
  46. # Changing a page file into a non-page could also cause ikiwiki to fail.
  47. newsrcdir();
  48. ok(! system("touch $srcdir/foo.mdwn"));
  49. setupiki("initial setup");
  50. ok(! system("mv $srcdir/foo.mdwn $srcdir/foo"));
  51. refreshiki("page file turned into non-page");
  52. # Changing a non-page file into a page could also cause ikiwiki to fail.
  53. newsrcdir();
  54. ok(! system("touch $srcdir/foo"));
  55. setupiki("initial setup");
  56. ok(! system("mv $srcdir/foo $srcdir/foo.mdwn"));
  57. refreshiki("non-page file turned into page");
  58. # What if a page renders to the same html file that a rawhtml file provides?
  59. # Added when refreshing
  60. newsrcdir();
  61. ok(! system("touch $srcdir/foo.mdwn"));
  62. setupiki("initial setup");
  63. ok(! system("mkdir -p $srcdir/foo"));
  64. ok(! system("touch $srcdir/foo/index.html"));
  65. refreshiki("rawhtml file rendered same as existing page in refresh");
  66. # Present during setup
  67. newsrcdir();
  68. ok(! system("touch $srcdir/foo.mdwn"));
  69. ok(! system("mkdir -p $srcdir/foo"));
  70. ok(! system("touch $srcdir/foo/index.html"));
  71. setupiki("rawhtml file rendered same as existing page in setup");
  72. # cleanup
  73. ok(! system("rm -rf t/tmp"));