From 11b9dd8ccb26a091b99230640494540ad0cc4e48 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Tue, 7 Jun 2022 15:24:48 +0900 Subject: Manually merged https://github.com/ruby/did_you_mean/pull/177 --- .../core_ext/test_name_error_extension.rb | 16 ++++++++++----- test/did_you_mean/helper.rb | 10 +++++++++ .../spell_checking/test_key_name_check.rb | 14 ++++++------- .../spell_checking/test_method_name_check.rb | 20 +++++++++--------- .../spell_checking/test_pattern_key_name_check.rb | 2 +- .../spell_checking/test_require_path_check.rb | 6 +++--- .../spell_checking/test_variable_name_check.rb | 24 +++++++++++----------- test/did_you_mean/test_ractor_compatibility.rb | 8 ++++---- 8 files changed, 58 insertions(+), 42 deletions(-) (limited to 'test/did_you_mean') diff --git a/test/did_you_mean/core_ext/test_name_error_extension.rb b/test/did_you_mean/core_ext/test_name_error_extension.rb index 91871cda9a..1fdbd4510f 100644 --- a/test/did_you_mean/core_ext/test_name_error_extension.rb +++ b/test/did_you_mean/core_ext/test_name_error_extension.rb @@ -1,6 +1,8 @@ require_relative '../helper' class NameErrorExtensionTest < Test::Unit::TestCase + include DidYouMean::TestHelper + SPELL_CHECKERS = DidYouMean.spell_checkers class TestSpellChecker @@ -20,8 +22,12 @@ class NameErrorExtensionTest < Test::Unit::TestCase end def test_message - assert_match(/Did you mean\? does_exist/, @error.to_s) - assert_match(/Did you mean\? does_exist/, @error.message) + if Exception.method_defined?(:detailed_message) + assert_match(/Did you mean\? does_exist/, @error.detailed_message) + else + assert_match(/Did you mean\? does_exist/, @error.to_s) + assert_match(/Did you mean\? does_exist/, @error.message) + end end def test_to_s_does_not_make_disruptive_changes_to_error_message @@ -29,8 +35,8 @@ class NameErrorExtensionTest < Test::Unit::TestCase raise NameError, "uninitialized constant Object" end - error.to_s - assert_equal 1, error.to_s.scan("Did you mean?").count + get_message(error) + assert_equal 1, get_message(error).scan("Did you mean?").count end def test_correctable_error_objects_are_dumpable @@ -41,7 +47,7 @@ class NameErrorExtensionTest < Test::Unit::TestCase e end - error.to_s + get_message(error) assert_equal "undefined method `sizee' for #", Marshal.load(Marshal.dump(error)).original_message diff --git a/test/did_you_mean/helper.rb b/test/did_you_mean/helper.rb index 7cb7b10282..d40d58d95d 100644 --- a/test/did_you_mean/helper.rb +++ b/test/did_you_mean/helper.rb @@ -29,5 +29,15 @@ module DidYouMean def assert_correction(expected, array) assert_equal Array(expected), array, "Expected #{array.inspect} to only include #{expected.inspect}" end + + def get_message(err) + if err.respond_to?(:detailed_message) + err.detailed_message(highlight: false) + else + err.to_s + end + end + + module_function :get_message end end diff --git a/test/did_you_mean/spell_checking/test_key_name_check.rb b/test/did_you_mean/spell_checking/test_key_name_check.rb index ea05ff69e4..2f246f04d7 100644 --- a/test/did_you_mean/spell_checking/test_key_name_check.rb +++ b/test/did_you_mean/spell_checking/test_key_name_check.rb @@ -8,11 +8,11 @@ class KeyNameCheckTest < Test::Unit::TestCase error = assert_raise(KeyError) { hash.fetch(:bax) } assert_correction ":bar", error.corrections - assert_match "Did you mean? :bar", error.to_s + assert_match "Did you mean? :bar", get_message(error) error = assert_raise(KeyError) { hash.fetch("fooo") } assert_correction %("foo"), error.corrections - assert_match %(Did you mean? "foo"), error.to_s + assert_match %(Did you mean? "foo"), get_message(error) end def test_corrects_hash_key_name_with_fetch_values @@ -20,11 +20,11 @@ class KeyNameCheckTest < Test::Unit::TestCase error = assert_raise(KeyError) { hash.fetch_values("foo", :bar, :bax) } assert_correction ":bar", error.corrections - assert_match "Did you mean? :bar", error.to_s + assert_match "Did you mean? :bar", get_message(error) error = assert_raise(KeyError) { hash.fetch_values("foo", :bar, "fooo") } assert_correction %("foo"), error.corrections - assert_match %(Did you mean? "foo"), error.to_s + assert_match %(Did you mean? "foo"), get_message(error) end def test_correct_symbolized_hash_keys_with_string_value @@ -32,13 +32,13 @@ class KeyNameCheckTest < Test::Unit::TestCase error = assert_raise(KeyError) { hash.fetch('foo_1') } assert_correction %(:foo_1), error.corrections - assert_match %(Did you mean? :foo_1), error.to_s + assert_match %(Did you mean? :foo_1), get_message(error) end def test_corrects_sprintf_key_name error = assert_raise(KeyError) { sprintf("%d", {fooo: 1}) } assert_correction ":fooo", error.corrections - assert_match "Did you mean? :fooo", error.to_s + assert_match "Did you mean? :fooo", get_message(error) end def test_corrects_env_key_name @@ -46,7 +46,7 @@ class KeyNameCheckTest < Test::Unit::TestCase ENV["BAR"] = "2" error = assert_raise(KeyError) { ENV.fetch("BAX") } assert_correction %("BAR"), error.corrections - assert_match %(Did you mean? "BAR"), error.to_s + assert_match %(Did you mean? "BAR"), get_message(error) ensure ENV.delete("FOO") ENV.delete("BAR") diff --git a/test/did_you_mean/spell_checking/test_method_name_check.rb b/test/did_you_mean/spell_checking/test_method_name_check.rb index 6e14e6acc4..d2e46d58f3 100644 --- a/test/did_you_mean/spell_checking/test_method_name_check.rb +++ b/test/did_you_mean/spell_checking/test_method_name_check.rb @@ -41,28 +41,28 @@ class MethodNameCheckTest < Test::Unit::TestCase error = assert_raise(NoMethodError){ @user.flrst_name } assert_correction :first_name, error.corrections - assert_match "Did you mean? first_name", error.to_s + assert_match "Did you mean? first_name", get_message(error) end def test_corrections_include_private_method error = assert_raise(NoMethodError){ @user.friend } assert_correction :friends, error.corrections - assert_match "Did you mean? friends", error.to_s + assert_match "Did you mean? friends", get_message(error) end def test_corrections_include_method_from_module error = assert_raise(NoMethodError){ @user.fr0m_module } assert_correction :from_module, error.corrections - assert_match "Did you mean? from_module", error.to_s + assert_match "Did you mean? from_module", get_message(error) end def test_corrections_include_class_method error = assert_raise(NoMethodError){ User.l0ad } assert_correction :load, error.corrections - assert_match "Did you mean? load", error.to_s + assert_match "Did you mean? load", get_message(error) end def test_private_methods_should_not_be_suggested @@ -77,7 +77,7 @@ class MethodNameCheckTest < Test::Unit::TestCase error = assert_raise(NoMethodError){ @user.call_incorrect_private_method } assert_correction :raise, error.corrections - assert_match "Did you mean? raise", error.to_s + assert_match "Did you mean? raise", get_message(error) end def test_exclude_methods_on_nil @@ -104,7 +104,7 @@ class MethodNameCheckTest < Test::Unit::TestCase end end - assert_equal 1, error.to_s.scan(/Did you mean/).count + assert_equal 1, get_message(error).scan(/Did you mean/).count end def test_does_not_append_suggestions_three_times @@ -116,7 +116,7 @@ class MethodNameCheckTest < Test::Unit::TestCase end end - assert_equal 1, error.to_s.scan(/Did you mean/).count + assert_equal 1, get_message(error).scan(/Did you mean/).count end def test_suggests_corrections_on_nested_error @@ -128,20 +128,20 @@ class MethodNameCheckTest < Test::Unit::TestCase end end - assert_equal 1, error.to_s.scan(/Did you mean/).count + assert_equal 1, get_message(error).scan(/Did you mean/).count end def test_suggests_yield error = assert_raise(NoMethodError) { yeild(1) } assert_correction :yield, error.corrections - assert_match "Did you mean? yield", error.to_s + assert_match "Did you mean? yield", get_message(error) end def test_does_not_suggest_yield error = assert_raise(NoMethodError) { 1.yeild } assert_correction [], error.corrections - assert_not_match(/Did you mean\? +yield/, error.to_s) + assert_not_match(/Did you mean\? +yield/, get_message(error)) end if RUBY_ENGINE != "jruby" end diff --git a/test/did_you_mean/spell_checking/test_pattern_key_name_check.rb b/test/did_you_mean/spell_checking/test_pattern_key_name_check.rb index 2b0752a56a..10f973802b 100644 --- a/test/did_you_mean/spell_checking/test_pattern_key_name_check.rb +++ b/test/did_you_mean/spell_checking/test_pattern_key_name_check.rb @@ -15,6 +15,6 @@ class PatternKeyNameCheckTest < Test::Unit::TestCase end assert_correction ":foo", error.corrections - assert_match "Did you mean? :foo", error.to_s + assert_match "Did you mean? :foo", get_message(error) end end diff --git a/test/did_you_mean/spell_checking/test_require_path_check.rb b/test/did_you_mean/spell_checking/test_require_path_check.rb index f67fab0568..d6c06e9999 100644 --- a/test/did_you_mean/spell_checking/test_require_path_check.rb +++ b/test/did_you_mean/spell_checking/test_require_path_check.rb @@ -11,7 +11,7 @@ class RequirePathCheckTest < Test::Unit::TestCase end assert_correction 'ostruct', error.corrections - assert_match "Did you mean? ostruct", error.to_s + assert_match "Did you mean? ostruct", get_message(error) end def test_load_error_from_require_for_nested_files_has_suggestions @@ -20,13 +20,13 @@ class RequirePathCheckTest < Test::Unit::TestCase end assert_correction 'net/http', error.corrections - assert_match "Did you mean? net/http", error.to_s + assert_match "Did you mean? net/http", get_message(error) error = assert_raise LoadError do require 'net-http' end assert_correction ['net/http', 'net/https'], error.corrections - assert_match "Did you mean? net/http", error.to_s + assert_match "Did you mean? net/http", get_message(error) end end diff --git a/test/did_you_mean/spell_checking/test_variable_name_check.rb b/test/did_you_mean/spell_checking/test_variable_name_check.rb index 193e2b7520..9d8b86eb5b 100644 --- a/test/did_you_mean/spell_checking/test_variable_name_check.rb +++ b/test/did_you_mean/spell_checking/test_variable_name_check.rb @@ -39,7 +39,7 @@ class VariableNameCheckTest < Test::Unit::TestCase end assert_correction :first_name, error.corrections - assert_match "Did you mean? first_name", error.to_s + assert_match "Did you mean? first_name", get_message(error) end def test_corrections_include_method_from_module @@ -48,7 +48,7 @@ class VariableNameCheckTest < Test::Unit::TestCase end assert_correction :from_module, error.corrections - assert_match "Did you mean? from_module", error.to_s + assert_match "Did you mean? from_module", get_message(error) end def test_corrections_include_local_variable_name @@ -57,7 +57,7 @@ class VariableNameCheckTest < Test::Unit::TestCase error = (eprson rescue $!) # Do not use @assert_raise here as it changes a scope. assert_correction :person, error.corrections - assert_match "Did you mean? person", error.to_s + assert_match "Did you mean? person", get_message(error) end end @@ -81,30 +81,30 @@ class VariableNameCheckTest < Test::Unit::TestCase end assert_correction :false, false_error.corrections - assert_match "Did you mean? false", false_error.to_s + assert_match "Did you mean? false", get_message(false_error) assert_correction :true, true_error.corrections - assert_match "Did you mean? true", true_error.to_s + assert_match "Did you mean? true", get_message(true_error) assert_correction :nil, nil_error.corrections - assert_match "Did you mean? nil", nil_error.to_s + assert_match "Did you mean? nil", get_message(nil_error) assert_correction :__FILE__, file_error.corrections - assert_match "Did you mean? __FILE__", file_error.to_s + assert_match "Did you mean? __FILE__", get_message(file_error) end def test_suggests_yield error = assert_raise(NameError) { yeild } assert_correction :yield, error.corrections - assert_match "Did you mean? yield", error.to_s + assert_match "Did you mean? yield", get_message(error) end def test_corrections_include_instance_variable_name error = assert_raise(NameError){ @user.to_s } assert_correction :@email_address, error.corrections - assert_match "Did you mean? @email_address", error.to_s + assert_match "Did you mean? @email_address", get_message(error) end def test_corrections_include_private_method @@ -113,7 +113,7 @@ class VariableNameCheckTest < Test::Unit::TestCase end assert_correction :cia_codename, error.corrections - assert_match "Did you mean? cia_codename", error.to_s + assert_match "Did you mean? cia_codename", get_message(error) end @@does_exist = true @@ -122,7 +122,7 @@ class VariableNameCheckTest < Test::Unit::TestCase error = assert_raise(NameError){ @@doesnt_exist } assert_correction :@@does_exist, error.corrections - assert_match "Did you mean? @@does_exist", error.to_s + assert_match "Did you mean? @@does_exist", get_message(error) end def test_struct_name_error @@ -130,7 +130,7 @@ class VariableNameCheckTest < Test::Unit::TestCase error = assert_raise(NameError){ value[:doesnt_exist] } assert_correction [:does_exist, :does_exist=], error.corrections - assert_match "Did you mean? does_exist", error.to_s + assert_match "Did you mean? does_exist", get_message(error) end def test_exclude_typical_incorrect_suggestions diff --git a/test/did_you_mean/test_ractor_compatibility.rb b/test/did_you_mean/test_ractor_compatibility.rb index f66a1a9d62..7385f10612 100644 --- a/test/did_you_mean/test_ractor_compatibility.rb +++ b/test/did_you_mean/test_ractor_compatibility.rb @@ -35,7 +35,7 @@ class RactorCompatibilityTest < Test::Unit::TestCase }.take assert_correction ":bar", error.corrections - assert_match "Did you mean? :bar", error.to_s + assert_match "Did you mean? :bar", get_message(error) CODE end @@ -52,7 +52,7 @@ class RactorCompatibilityTest < Test::Unit::TestCase }.take assert_correction :to_s, error.corrections - assert_match "Did you mean? to_s", error.to_s + assert_match "Did you mean? to_s", get_message(error) CODE end @@ -74,7 +74,7 @@ class RactorCompatibilityTest < Test::Unit::TestCase }.take assert_correction ":foo", error.corrections - assert_match "Did you mean? :foo", error.to_s + assert_match "Did you mean? :foo", get_message(error) CODE end end @@ -111,7 +111,7 @@ class RactorCompatibilityTest < Test::Unit::TestCase }.take assert_correction :in_ractor, error.corrections - assert_match "Did you mean? in_ractor", error.to_s + assert_match "Did you mean? in_ractor", get_message(error) CODE end end -- cgit v1.2.3