Skip to content

Commit fa7a2d5

Browse files
committed
Test nqp::can/nqp::findmethod on the knowhow instance and metainstance.
1 parent a513828 commit fa7a2d5

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

t/nqp/90-findmethod.t

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
plan(4);
1+
plan(13);
22

33
class Foo {
44
has $!attr;
@@ -16,3 +16,31 @@ ok(nqp::findmethod($foo, 'bar')($foo, 'baz') eq 'barfrobbaz', 'calling result of
1616

1717
ok(nqp::can($foo, 'foo') == 1, 'nqp::can with existing method');
1818
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

Comments
 (0)