1f2a19305Safresh1#!./perl 2f2a19305Safresh1 3f2a19305Safresh1BEGIN { 4f2a19305Safresh1 chdir 't' if -d 't'; 5f2a19305Safresh1 require './test.pl'; 6f2a19305Safresh1 set_up_inc('../lib'); 7f2a19305Safresh1 require Config; 8f2a19305Safresh1} 9f2a19305Safresh1 10f2a19305Safresh1use v5.36; 11f2a19305Safresh1use feature 'class'; 12f2a19305Safresh1no warnings 'experimental::class'; 13f2a19305Safresh1 14f2a19305Safresh1{ 15*5486feefSafresh1 class Testcase1 { 16f2a19305Safresh1 method hello { return "hello, world"; } 17*5486feefSafresh1 18*5486feefSafresh1 method classname { return __CLASS__; } 19f2a19305Safresh1 } 20f2a19305Safresh1 21*5486feefSafresh1 my $obj = Testcase1->new; 22*5486feefSafresh1 isa_ok($obj, "Testcase1", '$obj'); 23f2a19305Safresh1 24f2a19305Safresh1 is($obj->hello, "hello, world", '$obj->hello'); 25*5486feefSafresh1 26*5486feefSafresh1 is($obj->classname, "Testcase1", '$obj->classname yields __CLASS__'); 27f2a19305Safresh1} 28f2a19305Safresh1 29f2a19305Safresh1# Classes are still regular packages 30f2a19305Safresh1{ 31*5486feefSafresh1 class Testcase2 { 32f2a19305Safresh1 my $ok = "OK"; 33f2a19305Safresh1 sub NotAMethod { return $ok } 34f2a19305Safresh1 } 35f2a19305Safresh1 36*5486feefSafresh1 is(Testcase2::NotAMethod(), "OK", 'Class can contain regular subs'); 37f2a19305Safresh1} 38f2a19305Safresh1 39f2a19305Safresh1# Classes accept full package names 40f2a19305Safresh1{ 41*5486feefSafresh1 class Testcase3::Foo { 42f2a19305Safresh1 method hello { return "This" } 43f2a19305Safresh1 } 44*5486feefSafresh1 is(Testcase3::Foo->new->hello, "This", 'Class supports fully-qualified package names'); 45f2a19305Safresh1} 46f2a19305Safresh1 47f2a19305Safresh1# Unit class 48f2a19305Safresh1{ 49*5486feefSafresh1 class Testcase4::A; 50f2a19305Safresh1 method m { return "unit-A" } 51f2a19305Safresh1 52*5486feefSafresh1 class Testcase4::B; 53f2a19305Safresh1 method m { return "unit-B" } 54f2a19305Safresh1 55f2a19305Safresh1 package main; 56*5486feefSafresh1 ok(eq_array([Testcase4::A->new->m, Testcase4::B->new->m], ["unit-A", "unit-B"]), 57f2a19305Safresh1 'Unit class syntax works'); 58f2a19305Safresh1} 59f2a19305Safresh1 60f2a19305Safresh1# Class {BLOCK} syntax parses like package 61f2a19305Safresh1{ 62f2a19305Safresh1 my $result = ""; 63f2a19305Safresh1 eval q{ 64f2a19305Safresh1 $result .= "a(" . __PACKAGE__ . "/" . eval("__PACKAGE__") . ")\n"; 65*5486feefSafresh1 class Testcase5 1.23 { 66f2a19305Safresh1 $result .= "b(" . __PACKAGE__ . "/" . eval("__PACKAGE__") . ")\n"; 67f2a19305Safresh1 } 68f2a19305Safresh1 $result .= "c(" . __PACKAGE__ . "/" . eval("__PACKAGE__") . ")\n"; 69f2a19305Safresh1 } or die $@; 70*5486feefSafresh1 is($result, "a(main/main)\nb(Testcase5/Testcase5)\nc(main/main)\n", 71f2a19305Safresh1 'class sets __PACKAGE__ correctly'); 72*5486feefSafresh1 is($Testcase5::VERSION, 1.23, 'class NAME VERSION { BLOCK } sets $VERSION'); 73f2a19305Safresh1} 74f2a19305Safresh1 75f2a19305Safresh1# Unit class syntax parses like package 76f2a19305Safresh1{ 77f2a19305Safresh1 my $result = ""; 78f2a19305Safresh1 eval q{ 79f2a19305Safresh1 $result .= "a(" . __PACKAGE__ . "/" . eval("__PACKAGE__") . ")\n"; 80*5486feefSafresh1 class Testcase6 4.56; 81f2a19305Safresh1 $result .= "b(" . __PACKAGE__ . "/" . eval("__PACKAGE__") . ")\n"; 82f2a19305Safresh1 package main; 83f2a19305Safresh1 $result .= "c(" . __PACKAGE__ . "/" . eval("__PACKAGE__") . ")\n"; 84f2a19305Safresh1 } or die $@; 85*5486feefSafresh1 is($result, "a(main/main)\nb(Testcase6/Testcase6)\nc(main/main)\n", 86f2a19305Safresh1 'class sets __PACKAGE__ correctly'); 87*5486feefSafresh1 is($Testcase6::VERSION, 4.56, 'class NAME VERSION; sets $VERSION'); 88f2a19305Safresh1} 89f2a19305Safresh1 90f2a19305Safresh1done_testing; 91