use strict;
use Wiki::Toolkit::TestLib;
use Test::More;
if ( scalar @Wiki::Toolkit::TestLib::wiki_info == 0 ) {
plan skip_all => "no backends configured";
} else {
plan tests => ( 7 * scalar @Wiki::Toolkit::TestLib::wiki_info );
}
my $iterator = Wiki::Toolkit::TestLib->new_wiki_maker;
while ( my $wiki = $iterator->new_wiki ) {
# Put some test data in. All these nodes have some node linking
# to them except "HomePage".
$wiki->write_node("HomePage", "the home node")
or die "Can't write node";
$wiki->write_node("BacklinkTestOne",
"This is some text. It contains a link to BacklinkTestTwo.")
or die "Can't write node";
$wiki->write_node("BacklinkTestTwo",
# don't break this line to pretty-indent it or the formatter will
# think the second line is code and not pick up the link.
"This is some text. It contains a link to BacklinkTestThree and one to BacklinkTestOne.")
or die "Can't write node";
$wiki->write_node("BacklinkTestThree",
"This is some text. It contains a link to BacklinkTestOne.")
or die "Can't write node";
my @links = $wiki->list_backlinks( node => "BacklinkTestTwo" );
is_deeply( \@links, [ "BacklinkTestOne" ],
"backlinks work on nodes linked to once" );
@links = $wiki->list_backlinks( node => "BacklinkTestOne" );
is_deeply( [ sort @links],
[ "BacklinkTestThree", "BacklinkTestTwo" ],
"...and nodes linked to twice" );
@links = $wiki->list_backlinks( node => "NonexistentNode" );
is_deeply( \@links, [],
"...returns empty list for nonexistent node not linked to" );
@links = $wiki->list_backlinks( node => "HomePage" );
is_deeply( \@links, [],
"...returns empty list for existing node not linked to" );
$wiki->delete_node("BacklinkTestOne") or die "Couldn't delete node";
@links = $wiki->list_backlinks( node => "BacklinkTestTwo" );
is_deeply( \@links, [],
"...returns empty list when the only node linking to this one has been deleted" );
eval { $wiki->write_node("MultipleBacklinkTest", "This links to NodeOne and again to NodeOne"); };
is( $@, "",
"doesn't die when writing a node that links to the same place twice" );
# Now test that we don't get tripped up by case-sensitivity.
my $content = "CleanupNode CleanUpNode";
my @warnings;
eval {
local $SIG{__WARN__} = sub { push @warnings, $_[0]; };
$wiki->write_node( "TestNode", $content );
};
is( $@, "", "->write_node doesn't die when content links to nodes differing only in case" );
print "# ...but it does warn: " . join(" ", @warnings ) . "\n"
if scalar @warnings;
}