use v6-alpha; use Test; plan 21; =pod Very basic class tests from L =cut # L class Foo {} my $foo = Foo.new(); ok($foo ~~ Foo, '... smartmatch our $foo to the Foo class'); # note that S12 says that .isa() should be called on metaclasses. # However, making it an object .isa() means that classes are free to # override the behaviour without playing with the metamodel via traits ok($foo.isa(Foo), '.isa(Foo)'); ok($foo.isa(::Foo), '.isa(::Foo)'); ok($foo.isa("Foo"), '.isa("Foo")'); ok(!$foo.isa("Bar"), '!.isa("Bar")'); my $foo_clone = $foo.clone(); ok($foo_clone ~~ Foo, '... smartmatch our $foo_clone to the Foo class'); class Foo::Bar {} my $foo_bar = Foo::Bar.new(); ok($foo_bar ~~ Foo::Bar, '... smartmatch our $foo_bar to the Foo::Bar class'); ok($foo_bar.isa(Foo::Bar), '.isa(Foo::Bar)'); ok(!$foo_bar.isa(::Foo), '!Foo::Bar.new.isa(::Foo)'); # L class Bar is Foo {} ok(Bar ~~ Foo, '... smartmatch our Bar to the Foo class'); my $bar = Bar.new(); ok($bar ~~ Bar, '... smartmatch our $bar to the Bar class'); ok($bar.isa(Bar), "... .isa(Bar)"); ok($bar ~~ Foo, '... smartmatch our $bar to the Foo class'); ok($bar.isa(Foo), "new Bar .isa(Foo)"); my $bar_clone = $bar.clone(); ok($bar_clone ~~ Bar, '... smartmatch our $bar_clone to the Bar class'); ok($bar_clone.isa(Bar), "... .isa(Bar)"); ok($bar_clone ~~ Foo, '... smartmatch our $bar_clone to the Foo class'); ok($bar_clone.isa(Foo), "... .isa(Foo)"); # Same, but with the "is Foo" declaration inlined class Baz { is Foo } ok(Baz ~~ Foo, '... smartmatch our Baz to the Foo class'); my $baz = Baz.new(); ok($baz ~~ Baz, '... smartmatch our $baz to the Baz class'); ok($baz.isa(Baz), "... .isa(Baz)");