fixing the UI
[gitmo/Moose.git] / t / 003_basic.t
CommitLineData
e5ebe4ce 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
a15dff8d 6use Test::More tests => 21;
e5ebe4ce 7use Test::Exception;
8
a15dff8d 9use Scalar::Util 'isweak';
10
e5ebe4ce 11BEGIN {
12 use_ok('Moose');
13}
14
15{
16 package BinaryTree;
17 use strict;
18 use warnings;
19 use Moose;
20
a15dff8d 21 has 'parent' => (
29db16a9 22 isa => 'BinaryTree',
23 predicate => 'has_parent',
24 accessor => 'parent',
25 weak_ref => 1,
e5ebe4ce 26 );
27
a15dff8d 28 has 'left' => (
29db16a9 29 isa => 'BinaryTree',
30 predicate => 'has_left',
31 accessor => 'left',
e5ebe4ce 32 );
33
a15dff8d 34 has 'right' => (
29db16a9 35 isa => 'BinaryTree',
36 predicate => 'has_right',
37 accessor => 'right',
e5ebe4ce 38 );
39
40 before 'right', 'left' => sub {
41 my ($self, $tree) = @_;
42 $tree->parent($self) if defined $tree;
43 };
44}
45
46my $root = BinaryTree->new();
47isa_ok($root, 'BinaryTree');
48
49is($root->left, undef, '... no left node yet');
50is($root->right, undef, '... no right node yet');
51
52ok(!$root->has_left, '... no left node yet');
53ok(!$root->has_right, '... no right node yet');
54
a15dff8d 55ok(!$root->has_parent, '... no parent for root node');
56
e5ebe4ce 57my $left = BinaryTree->new();
58isa_ok($left, 'BinaryTree');
59
60ok(!$left->has_parent, '... left does not have a parent');
61
62$root->left($left);
63
64is($root->left, $left, '... got a left node now (and it is $left)');
65ok($root->has_left, '... we have a left node now');
66
67ok($left->has_parent, '... lefts has a parent');
68is($left->parent, $root, '... lefts parent is the root');
69
a15dff8d 70ok(isweak($left->{parent}), '... parent is a weakened ref');
71
e5ebe4ce 72my $right = BinaryTree->new();
73isa_ok($right, 'BinaryTree');
74
75ok(!$right->has_parent, '... right does not have a parent');
76
77$root->right($right);
78
79is($root->right, $right, '... got a right node now (and it is $right)');
80ok($root->has_right, '... we have a right node now');
81
82ok($right->has_parent, '... rights has a parent');
83is($right->parent, $root, '... rights parent is the root');
a15dff8d 84
85ok(isweak($right->{parent}), '... parent is a weakened ref');