summaryrefslogtreecommitdiff
path: root/test/ruby
diff options
context:
space:
mode:
authoryui-knk <spiketeika@gmail.com>2023-10-10 21:06:54 +0900
committerYuichiro Kaneko <spiketeika@gmail.com>2023-10-13 07:35:24 +0900
commit2794a8fef65eb16767c2f46f8f5058c10b4591b9 (patch)
treeeb3c9acb6133587990cb10505c234809a6d6773f /test/ruby
parentdcee3cc6ce026707e2eb142b117de445b723eecc (diff)
[Bug #19919] Warn class variable assignment and constant declaration in condition
Diffstat (limited to 'test/ruby')
-rw-r--r--test/ruby/test_parse.rb67
1 files changed, 67 insertions, 0 deletions
diff --git a/test/ruby/test_parse.rb b/test/ruby/test_parse.rb
index 959bfe8a5b..cc65f3b849 100644
--- a/test/ruby/test_parse.rb
+++ b/test/ruby/test_parse.rb
@@ -895,12 +895,14 @@ x = __ENCODING__
end
def test_assign_in_conditional
+ # multiple assignment
assert_warning(/`= literal' in conditional/) do
eval <<-END, nil, __FILE__, __LINE__+1
(x, y = 1, 2) ? 1 : 2
END
end
+ # instance variable assignment
assert_warning(/`= literal' in conditional/) do
eval <<-END, nil, __FILE__, __LINE__+1
if @x = true
@@ -910,6 +912,71 @@ x = __ENCODING__
end
END
end
+
+ # local variable assignment
+ assert_warning(/`= literal' in conditional/) do
+ eval <<-END, nil, __FILE__, __LINE__+1
+ def m
+ if x = true
+ 1
+ else
+ 2
+ end
+ end
+ END
+ end
+
+ # global variable assignment
+ assert_separately([], <<-RUBY)
+ assert_warning(/`= literal' in conditional/) do
+ eval <<-END, nil, __FILE__, __LINE__+1
+ if $x = true
+ 1
+ else
+ 2
+ end
+ END
+ end
+ RUBY
+
+ # dynamic variable assignment
+ assert_warning(/`= literal' in conditional/) do
+ eval <<-END, nil, __FILE__, __LINE__+1
+ y = 1
+
+ 1.times do
+ if y = true
+ 1
+ else
+ 2
+ end
+ end
+ END
+ end
+
+ # class variable assignment
+ assert_warning(/`= literal' in conditional/) do
+ eval <<-END, nil, __FILE__, __LINE__+1
+ c = Class.new
+ class << c
+ if @@a = 1
+ end
+ end
+ END
+ end
+
+ # constant declaration
+ assert_separately([], <<-RUBY)
+ assert_warning(/`= literal' in conditional/) do
+ eval <<-END, nil, __FILE__, __LINE__+1
+ if Const = true
+ 1
+ else
+ 2
+ end
+ END
+ end
+ RUBY
end
def test_literal_in_conditional