summaryrefslogtreecommitdiff
path: root/test/json/json_generator_test.rb
diff options
context:
space:
mode:
authorUfuk Kayserilioglu <ufuk.kayserilioglu@shopify.com>2021-10-25 15:48:18 +0300
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2023-05-24 09:37:30 +0900
commit12dfd9d1c980d17d8a0ea10bccb9cd7eca21b568 (patch)
tree390dd14b8632a6425a4fab8ac6958eee84c78088 /test/json/json_generator_test.rb
parent28056a6d161417bd7b3aed8099f59f4ac164b351 (diff)
[flori/json] Call `super` in `included` hook
The C extension defines an `included` hook for the `JSON::Ext::Generator::GeneratorMethods::String` module but neglects to call `super` in the hook. This can break the functionality of various other code that rely on the fact that `included` on `Module` will always be called. https://github.com/flori/json/commit/cd8bbe56a3
Diffstat (limited to 'test/json/json_generator_test.rb')
-rw-r--r--test/json/json_generator_test.rb23
1 files changed, 23 insertions, 0 deletions
diff --git a/test/json/json_generator_test.rb b/test/json/json_generator_test.rb
index f31b6b290e..b0f9a01759 100644
--- a/test/json/json_generator_test.rb
+++ b/test/json/json_generator_test.rb
@@ -391,6 +391,29 @@ EOT
end
end
+ if defined?(JSON::Ext::Generator)
+ def test_string_ext_included_calls_super
+ included = false
+
+ Module.alias_method(:included_orig, :included)
+ Module.define_method(:included) do |base|
+ included_orig(base)
+ included = true
+ end
+
+ Class.new(String) do
+ include JSON::Ext::Generator::GeneratorMethods::String
+ end
+
+ assert included
+ ensure
+ if Module.private_method_defined?(:included_orig)
+ Module.alias_method(:included, :included_orig)
+ Module.remove_method(:included_orig)
+ end
+ end
+ end
+
if defined?(Encoding)
def test_nonutf8_encoding
assert_equal("\"5\u{b0}\"", "5\xb0".force_encoding("iso-8859-1").to_json)