From 21cae8c8d7c4dc4bea5281e91e4e9ef90648eb28 Mon Sep 17 00:00:00 2001 From: ksss Date: Wed, 20 Dec 2023 23:26:11 +0900 Subject: [PATCH] Fix klass name if klass is singleton_class --- lib/rbs/test/errors.rb | 7 ++++++- test/rbs/test/type_check_test.rb | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/lib/rbs/test/errors.rb b/lib/rbs/test/errors.rb index aa88a913f..a20d2de0d 100644 --- a/lib/rbs/test/errors.rb +++ b/lib/rbs/test/errors.rb @@ -41,7 +41,12 @@ def self.inspect_(obj) end def self.to_string(error) - method = "#{error.klass.name}#{error.method_name}" + name = if error.klass.singleton_class? + inspect_(error.klass).sub(/\A#\z/, '\1') + else + error.klass.name + end + method = "#{name}#{error.method_name}" case error when ArgumentTypeError "[#{method}] ArgumentTypeError: expected #{format_param error.param} but given `#{inspect_(error.value)}`" diff --git a/test/rbs/test/type_check_test.rb b/test/rbs/test/type_check_test.rb index acc000d1a..783ca740e 100644 --- a/test/rbs/test/type_check_test.rb +++ b/test/rbs/test/type_check_test.rb @@ -231,6 +231,32 @@ def test_typecheck_return end end + def test_typecheck_return_singleton + SignatureManager.new do |manager| + manager.build do |env| + typecheck = Test::TypeCheck.new( + self_class: Object.singleton_class, + builder: DefinitionBuilder.new(env: env), + sample_size: 100, + unchecked_classes: [] + ) + + parse_method_type("() -> Integer").tap do |method_type| + errors = [] + typecheck.return ".foo", + method_type, + method_type.type, + Test::ArgumentsReturn.return(arguments: [], value: 'a'), + errors, + return_error: Test::Errors::ReturnTypeError + + assert_equal 1, errors.size + assert_equal "[Object.foo] ReturnTypeError: expected `Integer` but returns `\"a\"`", RBS::Test::Errors.to_string(errors.first) + end + end + end + end + def test_type_check_record SignatureManager.new do |manager| manager.files[Pathname("foo.rbs")] = <