- #!/usr/bin/perl
- package IkiWiki;
- use warnings;
- use strict;
- use Test::More tests => 5;
- BEGIN { use_ok("IkiWiki"); }
- BEGIN { use_ok("IkiWiki::Render"); }
- %config=IkiWiki::defaultconfig();
- $config{srcdir}=$config{destdir}="/dev/null";
- %oldrenderedfiles=%pagectime=();
- %pagesources=%pagemtime=%oldlinks=%links=%depends=%typedlinks=%oldtypedlinks=
- %destsources=%renderedfiles=%pagecase=%pagestate=();
- IkiWiki::checkconfig();
- foreach my $page (qw(tags/a tags/b Reorder Add Remove TypeAdd TypeRemove)) {
- $pagesources{$page} = "$page.mdwn";
- $pagemtime{$page} = $pagectime{$page} = 1000000;
- }
- $oldlinks{Reorder} = [qw{tags/a tags/b}];
- $links{Reorder} = [qw{tags/b tags/a}];
- $oldlinks{Add} = [qw{tags/b}];
- $links{Add} = [qw{tags/a tags/b}];
- $oldlinks{Remove} = [qw{tags/a}];
- $links{Remove} = [];
- $oldlinks{TypeAdd} = [qw{tags/a tags/b}];
- $links{TypeAdd} = [qw{tags/a tags/b}];
- # This causes TypeAdd to be rebuilt, but isn't a backlink change, so it doesn't
- # cause tags/b to be rebuilt.
- $oldtypedlinks{TypeAdd}{tag} = { "tags/a" => 1 };
- $typedlinks{TypeAdd}{tag} = { "tags/a" => 1, "tags/b" => 1 };
- $oldlinks{TypeRemove} = [qw{tags/a tags/b}];
- $links{TypeRemove} = [qw{tags/a tags/b}];
- # This causes TypeRemove to be rebuilt, but isn't a backlink change, so it
- # doesn't cause tags/b to be rebuilt.
- $oldtypedlinks{TypeRemove}{tag} = { "tags/a" => 1 };
- $typedlinks{TypeRemove}{tag} = { "tags/a" => 1, "tags/b" => 1 };
- my $oldlink_targets = calculate_old_links([keys %pagesources], []);
- is_deeply($oldlink_targets, {
- Reorder => { "tags/a" => "tags/a", "tags/b" => "tags/b" },
- Add => { "tags/b" => "tags/b" },
- Remove => { "tags/a" => "tags/a" },
- TypeAdd => { "tags/a" => "tags/a", "tags/b" => "tags/b" },
- TypeRemove => { "tags/a" => "tags/a", "tags/b" => "tags/b" },
- });
- my ($backlinkchanged, $linkchangers) = calculate_changed_links([keys %pagesources], [], $oldlink_targets);
- is_deeply($backlinkchanged, { "tags/a" => 1 });
- is_deeply($linkchangers, { add => 1, remove => 1, typeadd => 1, typeremove => 1 });
|