mirror of
https://github.com/ruby/ruby.git
synced 2025-08-23 21:14:23 +02:00

This is a C API for extensions to resolve and get function symbols of other extensions. Extensions can check the expected symbol is correctly loaded and accessible, and use it if it is available. Otherwise, extensions can raise their own error to guide users to setup their environments correctly and what's missing.
35 lines
1.3 KiB
Ruby
35 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
require 'test/unit'
|
|
|
|
class Test_Load_stringify_symbols < Test::Unit::TestCase
|
|
def test_load_stringify_symbol_required_extensions
|
|
require '-test-/load/stringify_symbols'
|
|
require '-test-/load/stringify_target'
|
|
r1 = StringifySymbols.stringify_symbol("-test-/load/stringify_target", "stt_any_method")
|
|
assert_not_nil r1
|
|
r2 = StringifySymbols.stringify_symbol("-test-/load/stringify_target.so", "stt_any_method")
|
|
assert_equal r1, r2, "resolved symbols should be equal even with or without .so suffix"
|
|
end
|
|
|
|
def test_load_stringify_symbol_statically_linked
|
|
require '-test-/load/stringify_symbols'
|
|
# "complex.so" is actually not a statically linked extension.
|
|
# But it is registered in $LOADED_FEATURES, so it can be a target of this test.
|
|
r1 = StringifySymbols.stringify_symbol("complex", "rb_complex_minus")
|
|
assert_not_nil r1
|
|
r2 = StringifySymbols.stringify_symbol("complex.so", "rb_complex_minus")
|
|
assert_equal r1, r2
|
|
end
|
|
|
|
def test_load_stringify_symbol_missing_target
|
|
require '-test-/load/stringify_symbols'
|
|
r1 = assert_nothing_raised {
|
|
StringifySymbols.stringify_symbol("something_missing", "unknown_method")
|
|
}
|
|
assert_nil r1
|
|
r2 = assert_nothing_raised {
|
|
StringifySymbols.stringify_symbol("complex.so", "unknown_method")
|
|
}
|
|
assert_nil r2
|
|
end
|
|
end
|