summaryrefslogtreecommitdiff
path: root/t/autoindex.t
blob: 2c1331da27df1d330aed9f7b967da3d44f23296f (plain)
  1. #!/usr/bin/perl
  2. package IkiWiki;
  3. use warnings;
  4. use strict;
  5. use Test::More tests => 33;
  6. BEGIN { use_ok("IkiWiki"); }
  7. BEGIN { use_ok("IkiWiki::Render"); }
  8. BEGIN { use_ok("IkiWiki::Plugin::aggregate"); }
  9. BEGIN { use_ok("IkiWiki::Plugin::autoindex"); }
  10. BEGIN { use_ok("IkiWiki::Plugin::html"); }
  11. BEGIN { use_ok("IkiWiki::Plugin::mdwn"); }
  12. ok(! system("rm -rf t/tmp; mkdir t/tmp"));
  13. $config{verbose} = 1;
  14. $config{srcdir} = 't/tmp';
  15. $config{underlaydir} = 't/tmp';
  16. $config{underlaydirbase} = '.';
  17. $config{templatedir} = 'templates';
  18. $config{usedirs} = 1;
  19. $config{htmlext} = 'html';
  20. $config{wiki_file_chars} = "-[:alnum:]+/.:_";
  21. $config{userdir} = "users";
  22. $config{tagbase} = "tags";
  23. $config{default_pageext} = "mdwn";
  24. $config{wiki_file_prune_regexps} = [qr/^\./];
  25. is(checkconfig(), 1);
  26. %oldrenderedfiles=%pagectime=();
  27. %pagesources=%pagemtime=%oldlinks=%links=%depends=%typedlinks=%oldtypedlinks=
  28. %destsources=%renderedfiles=%pagecase=%pagestate=();
  29. # pages that (we claim) were deleted in an earlier pass
  30. $wikistate{autoindex}{deleted}{deleted} = 1;
  31. $wikistate{autoindex}{deleted}{expunged} = 1;
  32. $wikistate{autoindex}{deleted}{reinstated} = 1;
  33. foreach my $page (qw(tags/numbers deleted/bar reinstated reinstated/foo gone/bar)) {
  34. # we use a non-default extension for these, so they're distinguishable
  35. # from programmatically-created pages
  36. $pagesources{$page} = "$page.html";
  37. $pagemtime{$page} = $pagectime{$page} = 1000000;
  38. writefile("$page.html", "t/tmp", "your ad here");
  39. }
  40. # a directory containing only an internal page shouldn't be indexed
  41. $pagesources{"has_internal/internal"} = "has_internal/internal._aggregated";
  42. $pagemtime{"has_internal/internal"} = 123456789;
  43. $pagectime{"has_internal/internal"} = 123456789;
  44. writefile("has_internal/internal._aggregated", "t/tmp", "this page is internal");
  45. # a directory containing only an attachment should be indexed
  46. $pagesources{"attached/pie.jpg"} = "attached/pie.jpg";
  47. $pagemtime{"attached/pie.jpg"} = 123456789;
  48. $pagectime{"attached/pie.jpg"} = 123456789;
  49. writefile("attached/pie.jpg", "t/tmp", "I lied, this isn't a real JPEG");
  50. # "gone" disappeared just before this refresh pass so it still has a mtime
  51. $pagemtime{gone} = $pagectime{gone} = 1000000;
  52. my %pages;
  53. my @del;
  54. IkiWiki::Plugin::autoindex::refresh();
  55. # these pages are still on record as having been deleted, because they have
  56. # a reason to be re-created
  57. is($wikistate{autoindex}{deleted}{deleted}, 1);
  58. is($wikistate{autoindex}{deleted}{gone}, 1);
  59. ok(! exists $autofiles{deleted});
  60. ok(! exists $autofiles{gone});
  61. ok(! -f "t/tmp/deleted.mdwn");
  62. ok(! -f "t/tmp/gone.mdwn");
  63. # this page does not exist and has no reason to be re-created, so we forget
  64. # about it - it will be re-created if it gains sub-pages
  65. ok(! exists $wikistate{autoindex}{deleted}{expunged});
  66. ok(! exists $autofiles{expunged});
  67. ok(! -f "t/tmp/expunged.mdwn");
  68. # a directory containing only an internal page shouldn't be indexed
  69. ok(! exists $wikistate{autoindex}{deleted}{has_internal});
  70. ok(! exists $autofiles{has_internal});
  71. ok(! -f "t/tmp/has_internal.mdwn");
  72. # this page was re-created, so it drops off the radar
  73. ok(! exists $wikistate{autoindex}{deleted}{reinstated});
  74. ok(! exists $autofiles{reinstated});
  75. ok(! -f "t/tmp/reinstated.mdwn");
  76. # needs creating (deferred; part of the autofile mechanism now)
  77. ok(! exists $wikistate{autoindex}{deleted}{tags});
  78. %pages = ();
  79. @del = ();
  80. is($autofiles{"tags.mdwn"}{plugin}, "autoindex");
  81. IkiWiki::gen_autofile("tags.mdwn", \%pages, \@del);
  82. is_deeply(\%pages, {"t/tmp/tags" => 1}) || diag explain \%pages;
  83. is_deeply(\@del, []) || diag explain \@del;
  84. ok(-s "t/tmp/tags.mdwn");
  85. # needs creating because of an attachment
  86. ok(! exists $wikistate{autoindex}{deleted}{attached});
  87. %pages = ();
  88. @del = ();
  89. is($autofiles{"attached.mdwn"}{plugin}, "autoindex");
  90. IkiWiki::gen_autofile("attached.mdwn", \%pages, \@del);
  91. is_deeply(\%pages, {"t/tmp/attached" => 1}) || diag explain \%pages;
  92. is_deeply(\@del, []) || diag explain \@del;
  93. ok(-s "t/tmp/attached.mdwn");
  94. 1;