From 2794a8fef65eb16767c2f46f8f5058c10b4591b9 Mon Sep 17 00:00:00 2001 From: yui-knk Date: Tue, 10 Oct 2023 21:06:54 +0900 Subject: [Bug #19919] Warn class variable assignment and constant declaration in condition --- test/ruby/test_parse.rb | 67 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) (limited to 'test/ruby') 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 -- cgit v1.2.3