summaryrefslogtreecommitdiff
path: root/test/-ext-/test_abi.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/-ext-/test_abi.rb')
-rw-r--r--test/-ext-/test_abi.rb47
1 files changed, 47 insertions, 0 deletions
diff --git a/test/-ext-/test_abi.rb b/test/-ext-/test_abi.rb
new file mode 100644
index 0000000000..d3ea6bb9b1
--- /dev/null
+++ b/test/-ext-/test_abi.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+return unless RUBY_PATCHLEVEL < 0
+
+class TestABI < Test::Unit::TestCase
+ def test_require_lib_with_incorrect_abi_on_dev_ruby
+ omit "ABI is not checked" unless abi_checking_supported?
+
+ assert_separately [], <<~RUBY
+ err = assert_raise(LoadError) { require "-test-/abi" }
+ assert_match(/incompatible ABI version/, err.message)
+ assert_include err.message, "/-test-/abi."
+ RUBY
+ end
+
+ def test_disable_abi_check_using_environment_variable
+ omit "ABI is not checked" unless abi_checking_supported?
+
+ assert_separately [{ "RUBY_ABI_CHECK" => "0" }], <<~RUBY
+ assert_nothing_raised { require "-test-/abi" }
+ RUBY
+ end
+
+ def test_enable_abi_check_using_environment_variable
+ omit "ABI is not checked" unless abi_checking_supported?
+
+ assert_separately [{ "RUBY_ABI_CHECK" => "1" }], <<~RUBY
+ err = assert_raise(LoadError) { require "-test-/abi" }
+ assert_match(/incompatible ABI version/, err.message)
+ assert_include err.message, "/-test-/abi."
+ RUBY
+ end
+
+ def test_require_lib_with_incorrect_abi_on_release_ruby
+ omit "ABI is enforced" if abi_checking_supported?
+
+ assert_separately [], <<~RUBY
+ assert_nothing_raised { require "-test-/abi" }
+ RUBY
+ end
+
+ private
+
+ def abi_checking_supported?
+ !(RUBY_PLATFORM =~ /mswin|mingw/)
+ end
+end