Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve Warning tests #10261

Merged
merged 2 commits into from
Mar 15, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
79 changes: 23 additions & 56 deletions test/ruby/test_exception.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1064,8 +1064,7 @@ def test_message_of_name_error

def capture_warning_warn(category: false)
verbose = $VERBOSE
deprecated = Warning[:deprecated]
experimental = Warning[:experimental]
categories = Warning.categories.to_h {|cat| [cat, Warning[cat]]}
warning = []

::Warning.class_eval do
Expand All @@ -1084,15 +1083,13 @@ def capture_warning_warn(category: false)
end

$VERBOSE = true
Warning[:deprecated] = true
Warning[:experimental] = true
Warning.categories.each {|cat| Warning[cat] = true}
yield

return warning
ensure
$VERBOSE = verbose
Warning[:deprecated] = deprecated
Warning[:experimental] = experimental
categories.each {|cat, flag| Warning[cat] = flag}

::Warning.class_eval do
remove_method :warn
Expand All @@ -1111,19 +1108,13 @@ def test_warning_warn
end

def test_warn_deprecated_backwards_compatibility_category
omit "no method to test"

warning = capture_warning_warn { }

assert_match(/deprecated/, warning[0])
end

def test_warn_deprecated_category
omit "no method to test"

warning = capture_warning_warn(category: true) { }
(message, category), = capture_warning_warn(category: true) do
$; = "www"
$; = nil
end

assert_equal :deprecated, warning[0][1]
assert_include message, 'deprecated'
assert_equal :deprecated, category
end

def test_kernel_warn_uplevel
Expand Down Expand Up @@ -1195,48 +1186,24 @@ def warn(message)
def test_warning_category
assert_raise(TypeError) {Warning[nil]}
assert_raise(ArgumentError) {Warning[:XXXX]}
assert_include([true, false], Warning[:deprecated])
assert_include([true, false], Warning[:experimental])
end

def test_warning_category_deprecated
warning = EnvUtil.verbose_warning do
deprecated = Warning[:deprecated]
Warning[:deprecated] = true
Warning.warn "deprecated feature", category: :deprecated
ensure
Warning[:deprecated] = deprecated
end
assert_equal "deprecated feature", warning

warning = EnvUtil.verbose_warning do
deprecated = Warning[:deprecated]
Warning[:deprecated] = false
Warning.warn "deprecated feature", category: :deprecated
ensure
Warning[:deprecated] = deprecated
end
assert_empty warning
end
all_assertions_foreach("categories", *Warning.categories) do |cat|
value = Warning[cat]
assert_include([true, false], value)

def test_warning_category_experimental
warning = EnvUtil.verbose_warning do
experimental = Warning[:experimental]
Warning[:experimental] = true
Warning.warn "experimental feature", category: :experimental
ensure
Warning[:experimental] = experimental
end
assert_equal "experimental feature", warning

warning = EnvUtil.verbose_warning do
experimental = Warning[:experimental]
Warning[:experimental] = false
Warning.warn "experimental feature", category: :experimental
enabled = EnvUtil.verbose_warning do
Warning[cat] = true
Warning.warn "#{cat} feature", category: cat
end
disabled = EnvUtil.verbose_warning do
Warning[cat] = false
Warning.warn "#{cat} feature", category: cat
end
ensure
Warning[:experimental] = experimental
Warning[cat] = value
assert_equal "#{cat} feature", enabled
assert_empty disabled
end
assert_empty warning
end

def test_undef_Warning_warn
Expand Down