diff options
author | Kevin Newton <[email protected]> | 2024-04-25 09:05:52 -0400 |
---|---|---|
committer | Kevin Newton <[email protected]> | 2024-04-26 12:25:45 -0400 |
commit | 6509634ebad0af34c16cfdd59181b42ac6b0519f (patch) | |
tree | 04ed5796e81a991f2652380fbf83b899f2569114 | |
parent | 94d6295b2d41227b47f44b30f3e46a666b13d7f7 (diff) |
[PRISM] Modify test_coverage to take prism into account
-rw-r--r-- | test/.excludes-prism/TestCoverage.rb | 11 | ||||
-rw-r--r-- | test/coverage/test_coverage.rb | 55 |
2 files changed, 44 insertions, 22 deletions
diff --git a/test/.excludes-prism/TestCoverage.rb b/test/.excludes-prism/TestCoverage.rb new file mode 100644 index 0000000000..92b25bc9e1 --- /dev/null +++ b/test/.excludes-prism/TestCoverage.rb @@ -0,0 +1,11 @@ +exclude(:test_clear_with_branches, "unknown") +exclude(:test_eval, "unknown") +exclude(:test_branch_coverage_for_while_statement, "branch coverage in while") +exclude(:test_coverage_optimized_branch, "branch coverage in &.") +exclude(:test_branch_coverage_for_if_statement, "branch coverage in if") +exclude(:test_branch_coverage_for_safe_method_invocation, "branch coverage in &.") +exclude(:test_branch_coverage_for_pattern_matching, "branch coverage in pattern matching") +exclude(:test_tag_break_with_branch_coverage, "branch coverage in &.") +exclude(:test_branch_coverage_for_case_statement, "branch coverage in case") +exclude(:test_coverage_ensure_if_return, "branch coverage in if") +exclude(:test_branch_coverage_in_ensure_clause, "branch coverage in ensure") diff --git a/test/coverage/test_coverage.rb b/test/coverage/test_coverage.rb index 16be47b458..4773280cae 100644 --- a/test/coverage/test_coverage.rb +++ b/test/coverage/test_coverage.rb @@ -5,22 +5,33 @@ require "tmpdir" require "envutil" class TestCoverage < Test::Unit::TestCase + # The command-line arguments that we will pass to the ruby subprocess invoked + # by assert_in_out_err. In general this is just requiring the coverage + # library, but if prism is enabled we want to additionally pass that option + # through. + ARGV = ["-rcoverage"] + + if RubyVM::InstructionSequence.compile('').to_a[4][:parser] == :prism + ARGV << "-W:no-experimental" + ARGV << "--parser=prism" + end + def test_result_without_start - assert_in_out_err(%w[-rcoverage], <<-"end;", [], /coverage measurement is not enabled/) + assert_in_out_err(ARGV, <<-"end;", [], /coverage measurement is not enabled/) Coverage.result p :NG end; end def test_peek_result_without_start - assert_in_out_err(%w[-rcoverage], <<-"end;", [], /coverage measurement is not enabled/) + assert_in_out_err(ARGV, <<-"end;", [], /coverage measurement is not enabled/) Coverage.peek_result p :NG end; end def test_result_with_nothing - assert_in_out_err(%w[-rcoverage], <<-"end;", ["{}"], []) + assert_in_out_err(ARGV, <<-"end;", ["{}"], []) Coverage.start p Coverage.result end; @@ -34,7 +45,7 @@ class TestCoverage < Test::Unit::TestCase end def test_coverage_running? - assert_in_out_err(%w[-rcoverage], <<-"end;", ["false", "true", "true", "false"], []) + assert_in_out_err(ARGV, <<-"end;", ["false", "true", "true", "false"], []) p Coverage.running? Coverage.start p Coverage.running? @@ -56,7 +67,7 @@ class TestCoverage < Test::Unit::TestCase EOS end - assert_in_out_err(%w[-rcoverage], <<-"end;", ["[1, 0, nil]", "[1, 1, nil]", "[1, 1, nil]"], []) + assert_in_out_err(ARGV, <<-"end;", ["[1, 0, nil]", "[1, 1, nil]", "[1, 1, nil]"], []) Coverage.start tmp = Dir.pwd require tmp + "/test.rb" @@ -92,7 +103,7 @@ class TestCoverage < Test::Unit::TestCase exp1 = { "#{tmp}/test.rb" => [1, 0, nil] }.inspect exp2 = {}.inspect exp3 = { "#{tmp}/test2.rb" => [1] }.inspect - assert_in_out_err(%w[-rcoverage], <<-"end;", [exp1, exp2, exp3], []) + assert_in_out_err(ARGV, <<-"end;", [exp1, exp2, exp3], []) Coverage.start tmp = Dir.pwd require tmp + "/test.rb" @@ -124,7 +135,7 @@ class TestCoverage < Test::Unit::TestCase f.puts "])" end - assert_in_out_err(%w[-rcoverage], <<-"end;", ["10003"], []) + assert_in_out_err(ARGV, <<-"end;", ["10003"], []) Coverage.start tmp = Dir.pwd require tmp + '/test.rb' @@ -153,7 +164,7 @@ class TestCoverage < Test::Unit::TestCase f.puts 'end' end - assert_in_out_err(%w[-W0 -rcoverage], <<-"end;", ["[1, 1, 1, 400, nil, nil, nil, nil, nil, nil, nil]"], [], bug13305) + assert_in_out_err(["-W0", *ARGV], <<-"end;", ["[1, 1, 1, 400, nil, nil, nil, nil, nil, nil, nil]"], [], bug13305) Coverage.start(:all) tmp = Dir.pwd require tmp + '/test.rb' @@ -165,7 +176,7 @@ class TestCoverage < Test::Unit::TestCase end def test_eval_coverage - assert_in_out_err(%w[-rcoverage], <<-"end;", ["[1, 1, 1, nil, 0, nil]"], []) + assert_in_out_err(ARGV, <<-"end;", ["[1, 1, 1, nil, 0, nil]"], []) Coverage.start(eval: true, lines: true) eval(<<-RUBY, TOPLEVEL_BINDING, "test.rb") @@ -242,7 +253,7 @@ class TestCoverage < Test::Unit::TestCase Dir.chdir(tmp) { File.write("test.rb", code) - assert_in_out_err(%w[-W0 -rcoverage], <<-"end;", stdout, []) + assert_in_out_err(["-W0", *ARGV], <<-"end;", stdout, []) Coverage.start(#{ opt }) tmp = Dir.pwd require tmp + '/test.rb' @@ -642,7 +653,7 @@ class TestCoverage < Test::Unit::TestCase "{:lines=>[0, 1, 1, nil, 0, nil, nil]}", "{:lines=>[0, 1, 0, nil, 1, nil, nil]}", ] - assert_in_out_err(%w[-rcoverage], <<-"end;", exp, []) + assert_in_out_err(ARGV, <<-"end;", exp, []) Coverage.start(lines: true) tmp = Dir.pwd f = tmp + "/test.rb" @@ -676,7 +687,7 @@ class TestCoverage < Test::Unit::TestCase "{:branches=>{[:if, 0, 2, 2, 6, 5]=>{[:then, 1, 3, 4, 3, 8]=>0, [:else, 2, 5, 4, 5, 12]=>1}}}", "{:branches=>{[:if, 0, 2, 2, 6, 5]=>{[:then, 1, 3, 4, 3, 8]=>0, [:else, 2, 5, 4, 5, 12]=>1}}}", ] - assert_in_out_err(%w[-rcoverage], <<-"end;", exp, []) + assert_in_out_err(ARGV, <<-"end;", exp, []) Coverage.start(branches: true) tmp = Dir.pwd f = tmp + "/test.rb" @@ -712,7 +723,7 @@ class TestCoverage < Test::Unit::TestCase "{:methods=>{[Object, :foo, 1, 0, 7, 3]=>1}}", "{:methods=>{[Object, :foo, 1, 0, 7, 3]=>1}}" ] - assert_in_out_err(%w[-rcoverage], <<-"end;", exp, []) + assert_in_out_err(ARGV, <<-"end;", exp, []) Coverage.start(methods: true) tmp = Dir.pwd f = tmp + "/test.rb" @@ -748,7 +759,7 @@ class TestCoverage < Test::Unit::TestCase "{:oneshot_lines=>[5]}", "{:oneshot_lines=>[]}", ] - assert_in_out_err(%w[-rcoverage], <<-"end;", exp, []) + assert_in_out_err(ARGV, <<-"end;", exp, []) Coverage.start(oneshot_lines: true) tmp = Dir.pwd f = tmp + "/test.rb" @@ -924,7 +935,7 @@ class TestCoverage < Test::Unit::TestCase end def test_coverage_state - assert_in_out_err(%w[-rcoverage], <<-"end;", [":idle", ":running", ":running", ":idle"], []) + assert_in_out_err(ARGV, <<-"end;", [":idle", ":running", ":running", ":idle"], []) p Coverage.state Coverage.start p Coverage.state @@ -934,7 +945,7 @@ class TestCoverage < Test::Unit::TestCase p Coverage.state end; - assert_in_out_err(%w[-rcoverage], <<-"end;", [":idle", ":suspended", ":running", ":suspended", ":running", ":suspended", ":idle"], []) + assert_in_out_err(ARGV, <<-"end;", [":idle", ":suspended", ":running", ":suspended", ":running", ":suspended", ":idle"], []) p Coverage.state Coverage.setup p Coverage.state @@ -952,14 +963,14 @@ class TestCoverage < Test::Unit::TestCase end def test_result_without_resume - assert_in_out_err(%w[-rcoverage], <<-"end;", ["{}"], []) + assert_in_out_err(ARGV, <<-"end;", ["{}"], []) Coverage.setup p Coverage.result end; end def test_result_after_suspend - assert_in_out_err(%w[-rcoverage], <<-"end;", ["{}"], []) + assert_in_out_err(ARGV, <<-"end;", ["{}"], []) Coverage.start Coverage.suspend p Coverage.result @@ -967,21 +978,21 @@ class TestCoverage < Test::Unit::TestCase end def test_resume_without_setup - assert_in_out_err(%w[-rcoverage], <<-"end;", [], /coverage measurement is not set up yet/) + assert_in_out_err(ARGV, <<-"end;", [], /coverage measurement is not set up yet/) Coverage.resume p :NG end; end def test_suspend_without_setup - assert_in_out_err(%w[-rcoverage], <<-"end;", [], /coverage measurement is not running/) + assert_in_out_err(ARGV, <<-"end;", [], /coverage measurement is not running/) Coverage.suspend p :NG end; end def test_double_resume - assert_in_out_err(%w[-rcoverage], <<-"end;", [], /coverage measurement is already running/) + assert_in_out_err(ARGV, <<-"end;", [], /coverage measurement is already running/) Coverage.start Coverage.resume p :NG @@ -989,7 +1000,7 @@ class TestCoverage < Test::Unit::TestCase end def test_double_suspend - assert_in_out_err(%w[-rcoverage], <<-"end;", [], /coverage measurement is not running/) + assert_in_out_err(ARGV, <<-"end;", [], /coverage measurement is not running/) Coverage.setup Coverage.suspend p :NG |