Web::Chain project: Web/t/Web-Node.t
# Test file created outside of h2xs framework.
# Run this like so: `perl Web-Node.t'
# doom@kzsu.stanford.edu 2004/08/27 09:05:17
#########################
# change 'tests => 1' to 'tests => last_test_to_print';
use warnings;
use strict;
$|=1;
use Test::More;
BEGIN { plan tests => 24 };
use Web::Node;
ok(1); # If we made it this far, we're ok.
#########################
#--------
# The following tests use the now-deprecated mutators.
# (Tests for the new setter/getters are below.)
{ # (sealing the old tests off in their own namespace.)
my $given_name = "ZERO";
my $node0 = Web::Node->new($given_name);
my $returned_name = $node0->name;
is($given_name, $returned_name, "Newly created node remembers it's name: $returned_name");
my @browse = qw (WUN TEW THU-REE FOAH FAHV SEAX SEVEN_LEAVEN ATE_DATE NEIN_FEIN_McLYIN HUP123 23SKIDROW UM1_HUH2-NUH3);
# build chain manually using the above array
my $last_node = $node0; # initialize
foreach my $name (@browse) {
my $current_node = Web::Node->new($name);
# last points forward at this one, and this one points back at last one
$last_node->next($current_node);
$current_node->prev($last_node);
$last_node = $current_node;
}
my $node1 = $node0->next;
my $node1_name = $node1->name;
is($node1_name, $browse[0], "Stepping forward: right name for node 1: $browse[0]");
my $node2 = $node1->next;
my $node2_name = $node2->name();
is($node2_name, $browse[1], "Stepping forward: right name for node 2: $browse[1]");
my $node1_again = $node2->prev;
my $node1_name_again = $node1_again->name;
is($node1_name_again, $browse[0], "Stepping backward: right name for node 1 again: $browse[0]");
my $check_name = $node1->next->next->next->name;
is ($check_name, "$browse[3]", "Chained next access of name");
my $test_body = <<TESTES;
This is some random
unstructured text with
nothing much of interest
in it, though later it
might have doomfiles oriented
text, and possibly some
html markup, e.g. links.
This depends on some design
decisions I need to make
soon.
TESTES
my $null_body = $node1->body();
is($null_body, undef, "Content (body) defaults to undef");
$node1->body(\$test_body);
my $check_body = ${ $node1->body() };
is($check_body, $test_body, "Content (body) set and returned correctly later");
###
# Testing doomfile node name pattern check
$given_name = "Zero";
eval {
my $bad_node = Web::Node->new($given_name);
my $bad_name = $bad_node->name();
print "Actually created node with bad name: $bad_name\n";
};
like($@,
qr/^Web::Node::new: $given_name is not in doomfiles node name format \(e.g. all caps with underscores\)/,
"Refuses to create node with invalid name: $given_name");
$given_name = "#SINGULARITY#";
eval {
my $bad_node = Web::Node->new($given_name);
my $bad_name = $bad_node->name();
print "Actually created node with bad name: $bad_name\n";
};
like($@,
qr/^Web::Node::new: $given_name is not in doomfiles node name format \(e.g. all caps with underscores\)/,
"Refuses to create node with invalid name: $given_name");
$given_name = "MORGANuBACKOFF";
eval {
my $bad_node = Web::Node->new($given_name);
my $bad_name = $bad_node->name();
print "Actually created node with bad name: $bad_name\n";
};
like($@,
qr/^Web::Node::new: $given_name is not in doomfiles node name format \(e.g. all caps with underscores\)/,
"Refuses to create node with invalid name: $given_name");
}
##############BOOKMARK
#--------
# Tests for the newer set/get methods
{ # (providing a new namespace to avoid needing new variable names)
my $given_name = "ZEROZERO_ISLAND";
my $node0 = Web::Node->new($given_name);
my $returned_name = $node0->get_name;
is($given_name, $returned_name, "Newly created node remembers it's name: $returned_name");
my @browse = qw (WUN_ISLAND
TEW_ISLAND
THU-REE_ISLAND
FOAH_ISLAND
FAHV_ISLAND
SEAX_ISLAND
SEVEN_LEAVEN_ISLAND
ATE_DATE_ISLAND
NEIN_FEIN_McLYIN_ISLAND
HUP123_ISLAND
23SKIDROW_ISLAND
UM1_HUH2-NUH3_ISLAND);
# build chain manually using the above array
my $last_node = $node0; # initialize
foreach my $name (@browse) {
my $current_node = Web::Node->new($name);
# last points forward at this one, and this one points back at last one
$last_node->set_next($current_node);
$current_node->set_prev($last_node);
$last_node = $current_node;
}
my $node1 = $node0->get_next;
my $node1_name = $node1->get_name;
is($node1_name, $browse[0], "Stepping forward: right name for node 1: $browse[0]");
my $node2 = $node1->get_next;
my $node2_name = $node2->get_name();
is($node2_name, $browse[1], "Stepping forward: right name for node 2: $browse[1]");
my $node1_again = $node2->get_prev;
my $node1_name_again = $node1_again->get_name;
is($node1_name_again, $browse[0], "Stepping backward: right name for node 1 again: $browse[0]");
my $check_name = $node1->get_next->get_next->get_next->name; ### A clear case where eliding "get_" on getters is clearer.
is ($check_name, "$browse[3]", "Chained next access of name");
my $test_body = <<TESTES;
This is some random
unstructured text with
nothing much of interest
in it, though later it
might have doomfiles oriented
text, and possibly some
html markup, e.g. links.
This depends on some design
decisions I need to make
soon: e.g. I may standardize
on using xml for this.
TESTES
my $null_body = $node1->get_body();
is($null_body, undef, "Content (body) defaults to undef");
$node1->set_body(\$test_body);
my $check_body = ${ $node1->get_body() };
is($check_body, $test_body, "Content (body) set and returned correctly later");
###
# Testing doomfile node name pattern check
my @bad_name = ('Zero',
'#SINGULARITY#',
'MORGANuBACKOFF',
'TWO WORDS',
'MacDONALD',
'AA',
);
foreach $given_name (@bad_name) {
eval {
my $bad_node = Web::Node->new($given_name);
my $bad_name = $bad_node->get_name();
print "Actually created node with bad name: $bad_name\n";
};
like($@,
qr/^Web::Node::new: $given_name is not in doomfiles node name format \(e.g. all caps with underscores\)/,
"Refuses to create node with invalid name: $given_name");
}
}
Joseph Brenner,
Sat Nov 6 17:04:11 2004