summaryrefslogtreecommitdiff
path: root/t/conflicts.t
blob: 4664e1b6ed4e0404cdd40449de60c5380788fac5 (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 tests => 92;
  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. # Page and non-page file with same pagename.
  47. newsrcdir();
  48. ok(! system("touch $srcdir/foo.mdwn"));
  49. ok(! system("touch $srcdir/foo"));
  50. setupiki("conflicting page and non-page in setup");
  51. newsrcdir();
  52. ok(! system("touch $srcdir/foo.mdwn"));
  53. setupiki("initial setup");
  54. ok(! system("touch $srcdir/foo"));
  55. refreshiki("conflicting page added (non-page already existing) in refresh");
  56. newsrcdir();
  57. ok(! system("touch $srcdir/foo"));
  58. setupiki("initial setup");
  59. ok(! system("touch $srcdir/foo.mdwn"));
  60. refreshiki("conflicting non-page added (page already existing) in refresh");
  61. # Changing a page file into a non-page could also cause ikiwiki to fail.
  62. newsrcdir();
  63. ok(! system("touch $srcdir/foo.mdwn"));
  64. setupiki("initial setup");
  65. ok(! system("mv $srcdir/foo.mdwn $srcdir/foo"));
  66. refreshiki("page file turned into non-page");
  67. # Changing a non-page file into a page could also cause ikiwiki to fail.
  68. newsrcdir();
  69. ok(! system("touch $srcdir/foo"));
  70. setupiki("initial setup");
  71. ok(! system("mv $srcdir/foo $srcdir/foo.mdwn"));
  72. refreshiki("non-page file turned into page");
  73. # What if a page renders to the same html file that a rawhtml file provides?
  74. # Added when refreshing
  75. newsrcdir();
  76. ok(! system("touch $srcdir/foo.mdwn"));
  77. setupiki("initial setup");
  78. ok(! system("mkdir -p $srcdir/foo"));
  79. ok(! system("touch $srcdir/foo/index.html"));
  80. refreshiki("rawhtml file rendered same as existing page in refresh");
  81. # Moved when refreshing
  82. newsrcdir();
  83. ok(! system("touch $srcdir/foo.mdwn"));
  84. setupiki("initial setup");
  85. ok(! system("mkdir -p $srcdir/foo"));
  86. ok(! system("mv $srcdir/foo.mdwn $srcdir/foo/index.html"));
  87. refreshiki("existing page moved to rawhtml file in refresh");
  88. # Inverse added when refreshing
  89. newsrcdir();
  90. ok(! system("mkdir -p $srcdir/foo"));
  91. ok(! system("touch $srcdir/foo/index.html"));
  92. setupiki("initial setup");
  93. ok(! system("touch $srcdir/foo.mdwn"));
  94. refreshiki("page rendered same as existing rawhtml file in refresh");
  95. # Inverse moved when refreshing
  96. newsrcdir();
  97. ok(! system("mkdir -p $srcdir/foo"));
  98. ok(! system("touch $srcdir/foo/index.html"));
  99. setupiki("initial setup");
  100. ok(! system("mv $srcdir/foo/index.html $srcdir/foo.mdwn"));
  101. refreshiki("rawhtml file moved to page in refresh");
  102. # Present during setup
  103. newsrcdir();
  104. ok(! system("touch $srcdir/foo.mdwn"));
  105. ok(! system("mkdir -p $srcdir/foo"));
  106. ok(! system("touch $srcdir/foo/index.html"));
  107. setupiki("rawhtml file rendered same as existing page in setup");
  108. # cleanup
  109. ok(! system("rm -rf t/tmp"));