Skip to content

Commit

Permalink
Add C extension spec for rb_define_finalizer
Browse files Browse the repository at this point in the history
  • Loading branch information
peterzhu2118 committed Jan 14, 2025
1 parent b514a21 commit 71d37fd
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 0 deletions.
20 changes: 20 additions & 0 deletions optional/capi/ext/finalizer_spec.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#include "ruby.h"
#include "rubyspec.h"

#ifdef __cplusplus
extern "C" {
#endif

static VALUE define_finalizer(VALUE self, VALUE obj, VALUE finalizer) {
return rb_define_finalizer(obj, finalizer);
}

void Init_finalizer_spec(void) {
VALUE cls = rb_define_class("CApiFinalizerSpecs", rb_cObject);

rb_define_method(cls, "rb_define_finalizer", define_finalizer, 2);
}

#ifdef __cplusplus
}
#endif
23 changes: 23 additions & 0 deletions optional/capi/finalizer_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
require_relative "spec_helper"

extension_path = load_extension("finalizer")

describe "CApiFinalizerSpecs" do
before :each do
@s = CApiFinalizerSpecs.new
end

describe "rb_define_finalizer" do
it "defines a finalizer on the object" do
code = <<~RUBY
require #{extension_path.dump}
obj = Object.new
finalizer = Proc.new { puts "finalizer run" }
CApiFinalizerSpecs.new.rb_define_finalizer(obj, finalizer)
RUBY

ruby_exe(code).should == "finalizer run\n"
end
end
end

0 comments on commit 71d37fd

Please sign in to comment.