diff options
author | Yusuke Endoh <mame@ruby-lang.org> | 2021-10-25 20:00:51 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-25 20:00:51 +0900 |
commit | 86e3d77abb8a033650937710d1ab009e98647494 (patch) | |
tree | 928732b8a0bb6f9067ceb659f1d72bc32ddcb55b /test/coverage/test_coverage.rb | |
parent | 54379e3d7d297cc8b3ea61ad98c6cc337dc04882 (diff) | |
download | ruby-86e3d77abb8a033650937710d1ab009e98647494.tar.gz |
Make Coverage suspendable (#4856)
* Make Coverage suspendable
Add `Coverage.suspend`, `Coverage.resume` and some methods.
[Feature #18176] [ruby-core:105321]
Diffstat (limited to 'test/coverage/test_coverage.rb')
-rw-r--r-- | test/coverage/test_coverage.rb | 146 |
1 files changed, 146 insertions, 0 deletions
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 |