summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHiroshi SHIBATA <hsbt@ruby-lang.org>2023-05-10 14:15:34 +0900
committerGitHub <noreply@github.com>2023-05-10 14:15:34 +0900
commita877630ac2c3c9e498b7124e9629656fabe9bc84 (patch)
tree8e2f85df3dc065c292a430a847f134f54e0aa4c6
parent248bc5bf7ea597d7a20396a8def855a1988bf490 (diff)
parentcd8bbe56a3d0a3eca1419ae850088ce204f12ee5 (diff)
downloadjson-a877630ac2c3c9e498b7124e9629656fabe9bc84.tar.gz
Merge pull request #486 from Shopify/uk-call-super-in-includedHEADmaster
Call `super` in `included` hook
-rw-r--r--ext/json/ext/generator/generator.c1
-rw-r--r--tests/json_generator_test.rb23
2 files changed, 24 insertions, 0 deletions
diff --git a/ext/json/ext/generator/generator.c b/ext/json/ext/generator/generator.c
index 98d0ea4..8f7c57e 100644
--- a/ext/json/ext/generator/generator.c
+++ b/ext/json/ext/generator/generator.c
@@ -478,6 +478,7 @@ static VALUE mFloat_to_json(int argc, VALUE *argv, VALUE self)
*/
static VALUE mString_included_s(VALUE self, VALUE modul) {
VALUE result = rb_funcall(modul, i_extend, 1, mString_Extend);
+ rb_call_super(1, &modul);
return result;
}
diff --git a/tests/json_generator_test.rb b/tests/json_generator_test.rb
index f31b6b2..b0f9a01 100644
--- a/tests/json_generator_test.rb
+++ b/tests/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)