Skip to content

Commit

Permalink
Merge pull request #1695 from ksss/fix-klass-name
Browse files Browse the repository at this point in the history
Fix klass name if klass is singleton_class
  • Loading branch information
soutaro authored Dec 21, 2023
2 parents e6abd3a + 21cae8c commit 5c360d8
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 1 deletion.
7 changes: 6 additions & 1 deletion lib/rbs/test/errors.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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#<Class:(.*)>\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)}`"
Expand Down
26 changes: 26 additions & 0 deletions test/rbs/test/type_check_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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")] = <<EOF
Expand Down

0 comments on commit 5c360d8

Please sign in to comment.