# -*- perl -*- # Basic object creation tests use strict; use warnings; use Test; use Games::Object; use Games::Object::Manager; BEGIN { $| = 1; plan tests => 25 } # Create manager. my $man = Games::Object::Manager->new(); ok( defined($man) ); # Basic object creation with specific IDs my $obj1 = Games::Object->new(-id => "ThisObject"); ok( defined($obj1) && $man->add($obj1) ); my $obj2 = Games::Object->new(-id => "ThatObject"); ok( defined($obj2) && $man->add($obj2) ); ok( $obj1->id() eq 'ThisObject' && $obj2->id() eq 'ThatObject' ); # Using the manager id() method. ok( $man->id('ThisObject') eq 'ThisObject' && $man->id('ThatObject') eq 'ThatObject' ); ok( !defined($man->id('NoObject')) ); # id() method with assertion ok( $man->id('ThisObject', 1) eq 'ThisObject' ); eval('$man->id("NoObject", 1);'); ok( $@ =~ /Assertion failed: 'NoObject' is not a valid\/managed object/ ); # The manager find() method my $find1 = $man->find('ThisObject'); ok( defined($find1) && ref($find1) eq 'Games::Object' && $find1->id() eq 'ThisObject' ); my $find2 = $man->find('ThatObject'); ok( defined($find2) && ref($find2) eq 'Games::Object' && $find2->id() eq 'ThatObject' ); ok ( !$man->find('BogusObject') ); # The manager find() method with assertion my $find3; ok( !defined(eval('$find3 = $man->find("BogusObject", 1);')) ); ok( $@ =~ /Assertion failed: 'BogusObject' is not a valid\/managed object ID/ ); # Basic object creation with derived IDs. my $obj3 = Games::Object->new(); ok( defined($obj3) && defined($man->add($obj3)) ); my $obj4 = Games::Object->new(); ok( defined($obj4) && defined($man->add($obj4)) ); ok( defined($obj3->id()) && defined($obj4->id()) && $obj3->id() ne $obj4->id() ); # Defining object IDs at time of add. my $obj5 = Games::Object->new(); my $obj6 = Games::Object->new(); eval('$man->add($obj5, "DefineOnAdd1");'); ok( $@ eq '' ); print "# DEBUG: \$@ = $@" if ($@); eval('$man->add($obj6, "DefineOnAdd2");'); ok( $@ eq '' ); print "# DEBUG: \$@ = $@" if ($@); ok( $obj5->id() eq 'DefineOnAdd1' && $obj6->id() eq 'DefineOnAdd2' ); # Override object IDs already defined on object when added. my $obj7 = Games::Object->new(-id => "MyId1"); my $obj8 = Games::Object->new(-id => "MyId2"); ok( $obj7 && $obj7->id() eq 'MyId1' && $obj8 && $obj8->id() eq 'MyId2' ); eval('$man->add($obj7, "NewId1");'); ok( $@ eq '' ); print "# DEBUG: \$@ = $@" if ($@); eval('$man->add($obj8, "NewId2");'); ok( $@ eq '' ); print "# DEBUG: \$@ = $@" if ($@); ok( $obj7->id() eq 'NewId1' && $obj8->id() eq 'NewId2' ); # Final test of add(): Make sure we can find all objects added (and not find # the ones that we didn't or overrided) ok( defined($man->find('DefineOnAdd1')) && $man->find('DefineOnAdd1')->id() eq 'DefineOnAdd1' && defined($man->find('DefineOnAdd2')) && $man->find('DefineOnAdd2')->id() eq 'DefineOnAdd2' && defined($man->find('NewId1')) && $man->find('NewId1')->id() eq 'NewId1' && defined($man->find('NewId2')) && $man->find('NewId2')->id() eq 'NewId2' && !defined($man->find('MyId1')) && !defined($man->find('MyId2')) ); # Error check: Duplicate IDs. my $obj9 = Games::Object->new(-id => "ThatObject"); eval('$man->add($obj9, "ThatObject");'); ok ( $@ =~ /Attempt to add duplicate object/ ); exit (0);