From 86e3d77abb8a033650937710d1ab009e98647494 Mon Sep 17 00:00:00 2001 From: Yusuke Endoh Date: Mon, 25 Oct 2021 20:00:51 +0900 Subject: Make Coverage suspendable (#4856) * Make Coverage suspendable Add `Coverage.suspend`, `Coverage.resume` and some methods. [Feature #18176] [ruby-core:105321] --- test/coverage/test_coverage.rb | 146 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) (limited to 'test') diff --git a/test/coverage/test_coverage.rb b/test/coverage/test_coverage.rb index 22557bd9d8..882368363a 100644 --- a/test/coverage/test_coverage.rb +++ b/test/coverage/test_coverage.rb @@ -774,4 +774,150 @@ class TestCoverage < Test::Unit::TestCase end end; end + + def test_coverage_suspendable + Dir.mktmpdir {|tmp| + Dir.chdir(tmp) { + File.open("test.rb", "w") do |f| + f.puts <<-EOS + def foo + :ok + end + + def bar + :ok + end + + def baz + :ok + end + EOS + end + + cov1 = "[0, 0, nil, nil, 0, 1, nil, nil, 0, 0, nil]" + cov2 = "[0, 0, nil, nil, 0, 1, nil, nil, 0, 1, nil]" + assert_in_out_err(%w[-rcoverage], <<-"end;", [cov1, cov2], []) + Coverage.setup + tmp = Dir.pwd + require tmp + "/test.rb" + foo + Coverage.resume + bar + Coverage.suspend + baz + p Coverage.peek_result[tmp + "/test.rb"] + Coverage.resume + baz + p Coverage.result[tmp + "/test.rb"] + end; + + cov1 = "{:lines=>[0, 0, nil, nil, 0, 1, nil, nil, 0, 0, nil], :branches=>{}, :methods=>{[Object, :baz, 9, 12, 11, 15]=>0, [Object, :bar, 5, 12, 7, 15]=>1, [Object, :foo, 1, 12, 3, 15]=>0}}" + cov2 = "{:lines=>[0, 0, nil, nil, 0, 1, nil, nil, 0, 1, nil], :branches=>{}, :methods=>{[Object, :baz, 9, 12, 11, 15]=>1, [Object, :bar, 5, 12, 7, 15]=>1, [Object, :foo, 1, 12, 3, 15]=>0}}" + assert_in_out_err(%w[-rcoverage], <<-"end;", [cov1, cov2], []) + Coverage.setup(:all) + tmp = Dir.pwd + require tmp + "/test.rb" + foo + Coverage.resume + bar + Coverage.suspend + baz + p Coverage.peek_result[tmp + "/test.rb"] + Coverage.resume + baz + p Coverage.result[tmp + "/test.rb"] + end; + + cov1 = "{:oneshot_lines=>[6]}" + cov2 = "{:oneshot_lines=>[6, 10]}" + assert_in_out_err(%w[-rcoverage], <<-"end;", [cov1, cov2], []) + Coverage.setup(oneshot_lines: true) + tmp = Dir.pwd + require tmp + "/test.rb" + foo + Coverage.resume + bar + Coverage.suspend + baz + p Coverage.peek_result[tmp + "/test.rb"] + Coverage.resume + baz + p Coverage.result[tmp + "/test.rb"] + end; + } + } + end + + def test_coverage_state + assert_in_out_err(%w[-rcoverage], <<-"end;", [":idle", ":running", ":running", ":idle"], []) + p Coverage.state + Coverage.start + p Coverage.state + Coverage.peek_result + p Coverage.state + Coverage.result + p Coverage.state + end; + + assert_in_out_err(%w[-rcoverage], <<-"end;", [":idle", ":suspended", ":running", ":suspended", ":running", ":suspended", ":idle"], []) + p Coverage.state + Coverage.setup + p Coverage.state + Coverage.resume + p Coverage.state + Coverage.suspend + p Coverage.state + Coverage.resume + p Coverage.state + Coverage.suspend + p Coverage.state + Coverage.result + p Coverage.state + end; + end + + def test_result_without_resume + assert_in_out_err(%w[-rcoverage], <<-"end;", ["{}"], []) + Coverage.setup + p Coverage.result + end; + end + + def test_result_after_suspend + assert_in_out_err(%w[-rcoverage], <<-"end;", ["{}"], []) + Coverage.start + Coverage.suspend + p Coverage.result + end; + end + + def test_resume_without_setup + assert_in_out_err(%w[-rcoverage], <<-"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/) + Coverage.suspend + p :NG + end; + end + + def test_double_resume + assert_in_out_err(%w[-rcoverage], <<-"end;", [], /coverage measurement is already running/) + Coverage.start + Coverage.resume + p :NG + end; + end + + def test_double_suspend + assert_in_out_err(%w[-rcoverage], <<-"end;", [], /coverage measurement is not running/) + Coverage.setup + Coverage.suspend + p :NG + end; + end end -- cgit v1.2.3