Skip to content

Commit 5a9ab4f

Browse files
aardvark179eregon
authored andcommitted
Add specs for rb_eval_cmd_kw.
1 parent 50d330e commit 5a9ab4f

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

spec/ruby/optional/capi/ext/kernel_spec.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,10 @@ VALUE kernel_spec_rb_eval_string(VALUE self, VALUE str) {
112112
return rb_eval_string(RSTRING_PTR(str));
113113
}
114114

115+
VALUE kernel_spec_rb_eval_cmd_kw(VALUE self, VALUE cmd, VALUE args, VALUE kw_splat) {
116+
return rb_eval_cmd_kw(cmd, args, NUM2INT(kw_splat));
117+
}
118+
115119
VALUE kernel_spec_rb_raise(VALUE self, VALUE hash) {
116120
rb_hash_aset(hash, ID2SYM(rb_intern("stage")), ID2SYM(rb_intern("before")));
117121
if (self != Qundef)
@@ -361,6 +365,7 @@ void Init_kernel_spec(void) {
361365
rb_define_method(cls, "rb_frame_this_func_test_again", kernel_spec_rb_frame_this_func, 0);
362366
rb_define_method(cls, "rb_ensure", kernel_spec_rb_ensure, 4);
363367
rb_define_method(cls, "rb_eval_string", kernel_spec_rb_eval_string, 1);
368+
rb_define_method(cls, "rb_eval_cmd_kw", kernel_spec_rb_eval_cmd_kw, 3);
364369
rb_define_method(cls, "rb_raise", kernel_spec_rb_raise, 1);
365370
rb_define_method(cls, "rb_throw", kernel_spec_rb_throw, 1);
366371
rb_define_method(cls, "rb_throw_obj", kernel_spec_rb_throw_obj, 2);

spec/ruby/optional/capi/kernel_spec.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,25 @@ def proc_caller
504504
end
505505
end
506506

507+
describe "rb_eval_cmd_kw" do
508+
it "evaluates a string of ruby code" do
509+
@s.rb_eval_cmd_kw("1+1", [], 0).should == 2
510+
end
511+
512+
it "calls a proc with the supplied arguments" do
513+
@s.rb_eval_cmd_kw(-> (*x) { x.map { |i| i + 1 } }, [1, 3, 7], 0).should == [2, 4, 8]
514+
end
515+
516+
it "calls a proc with keyword arguments if kw_splat is non zero" do
517+
a_proc = -> (*x, **y) {
518+
res = x.map { |i| i + 1 }
519+
y.each { |k, v| res << k; res << v }
520+
res
521+
}
522+
@s.rb_eval_cmd_kw(a_proc, [1, 3, 7, {a: 1, b: 2, c: 3}], 1).should == [2, 4, 8, :a, 1, :b, 2, :c, 3]
523+
end
524+
end
525+
507526
describe "rb_block_proc" do
508527
it "converts the implicit block into a proc" do
509528
proc = @s.rb_block_proc { 1+1 }

0 commit comments

Comments
 (0)