use strict; use warnings; use Test::More; use t::tests qw( %runs ); plan tests => 25 + 3 * $runs{stats}{plan}; my $CLASS = 'Tree'; use_ok( $CLASS ) or Test::More->builder->BAILOUT( "Cannot load $CLASS" ); # Test plan: # 1) Create with an empty new(). # 2) Create with a payload passed into new(). # 3) Create with 2 parameters passed into new(). { my $tree = $CLASS->new(); isa_ok( $tree, $CLASS ); my $parent = $tree->parent; is( $parent, $tree->_null, "The root's parent is the null node" ); $runs{stats}{func}->( $tree, height => 1, width => 1, depth => 0, size => 1, is_root => 1, is_leaf => 1, ); is( $tree->root, $tree, "The root's root is itself" ); is( $tree->value, undef, "The root's value is undef" ); is( $tree->set_value( 'foobar' ), $tree, "Setting value() chains" ); is( $tree->value(), 'foobar', "Calling value() returns the value passed in" ); is_deeply( $tree->mirror, $tree, "A single-node tree's mirror is itself" ); is( $tree->root( 'foo' ), $tree, "Attempting to set the root outside the tree hierarchy acts as a getter" ); is( $tree->root, $tree, "... and doesn't change the value" ); $tree->meta->{foo} = 1; is( $tree->meta->{foo}, 1, "Meta works." ); } { my $tree = $CLASS->new( 'payload' ); isa_ok( $tree, $CLASS ); my $parent = $tree->parent; is( $parent, $tree->_null, "The root's parent is the null node" ); $runs{stats}{func}->( $tree, height => 1, width => 1, depth => 0, size => 1, is_root => 1, is_leaf => 1, ); is( $tree->root, $tree, "The root's root is itself" ); is( $tree->value, 'payload', "The root's value is undef" ); is( $tree->set_value( 'foobar' ), $tree, "Setting value() chains" ); is( $tree->value(), 'foobar', "Setting value() returns the value passed in" ); is_deeply( $tree->mirror, $tree, "A single-node tree's mirror is itself" ); } { my $tree = $CLASS->new( 'payload', 'unused value' ); isa_ok( $tree, $CLASS ); my $parent = $tree->parent; is( $parent, $tree->_null, "The root's parent is the null node" ); $runs{stats}{func}->( $tree, height => 1, width => 1, depth => 0, size => 1, is_root => 1, is_leaf => 1, ); is( $tree->root, $tree, "The root's root is itself" ); is( $tree->value, 'payload', "The root's value is undef" ); is( $tree->set_value( 'foobar' ), $tree, "Setting value() chains" ); is( $tree->value(), 'foobar', "Setting value() returns the value passed in" ); is_deeply( $tree->mirror, $tree, "A single-node tree's mirror is itself" ); }