1
- plan (4 );
1
+ plan (13 );
2
2
3
3
class Foo {
4
4
has $ ! attr ;
@@ -16,3 +16,31 @@ ok(nqp::findmethod($foo, 'bar')($foo, 'baz') eq 'barfrobbaz', 'calling result of
16
16
17
17
ok (nqp :: can ($ foo , ' foo' ) == 1 , ' nqp::can with existing method' );
18
18
ok (nqp :: can ($ foo , ' no_such_method_ever' ) == 0 , ' nqp::can with missing method' );
19
+
20
+ knowhow Bar {
21
+ has $ ! attr ;
22
+ method new (: $ attr ) { my $ obj := nqp ::create(self ); $ obj . BUILD($ attr ); $ obj }
23
+ method BUILD ($ attr ) {$ ! attr := $ attr }
24
+ method foo () {
25
+ ' foo' ;
26
+ }
27
+ method bar ($ arg ) {
28
+ ' bar' ~ $ ! attr ~ $ arg ;
29
+ }
30
+ }
31
+
32
+ my $ bar := Bar. new (attr => ' frob' );
33
+ ok (nqp ::findmethod($ bar , ' foo' )($ bar ) eq ' foo' , ' calling result of findmethod only with invocant - knowhow instance' );
34
+ ok (nqp ::findmethod($ bar , ' bar' )($ bar , ' baz' ) eq ' barfrobbaz' , ' calling result of findmethod with argument - knowhow instance' );
35
+
36
+ ok (nqp :: can ($ bar , ' bar' ) == 1 , ' nqp::can with existing method - knowhow instance' );
37
+ ok (nqp :: can ($ bar , ' no_such_method_ever' ) == 0 , ' nqp::can with missing method - knowhow instance' );
38
+
39
+ ok (nqp :: can ($ bar . HOW , " methods" ), ' nqp::can on a knowhow metaobj' );
40
+ ok (! nqp :: can ($ bar . HOW , " no such method ever" ), ' nqp::can on a knowhow metaobj' );
41
+
42
+ my $ methods := nqp ::findmethod($ bar . HOW , " methods" );
43
+ ok (nqp ::existskey($ methods ($ bar . HOW , $ bar ), ' bar' ), ' findmethod on a knowhow metaobj' );
44
+
45
+ ok (nqp :: can ($ bar . HOW . HOW , " methods" ), ' can on a knowhow meta-metaobj' );
46
+ ok (! nqp :: can ($ bar . HOW . HOW , " no_such_method_ever" ), ' can on a knowhow meta-metaobj' );
0 commit comments