Issue #12220 has been updated by Tsuyoshi Sawada.


Yusuke Endoh wrote:
> It was actually intentional.  Please read the test case of #4796.
> 
> ~~~~
>         Coverage.start
>         require tmp + '/test.rb'
>         Coverage.result
>         Coverage.start
>         coverage_test_method
>         assert_equal 1, Coverage.result.size # <=== HERE
> ~~~~
> 
> It explicitly requires the second call of `Coverage.result` return non-empty hash after restarted.

That is because the method `coverage_test_method` actually executes some lines in `"/tmp/test.rb"`, and so the corresponding array should not be empty in such case. I don't see how this is relevant to the issue of whether or not to delete key-value pairs from the hash when the array value is empty.

----------------------------------------
Bug #12220: Why does Coverage keep previously-loaded files as empty arrays?
https://bugs.ruby-lang.org/issues/12220#change-57882

* Author: Benoit Daloze
* Status: Open
* Priority: Normal
* Assignee: Yusuke Endoh
* ruby -v: ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
For instance,

   ruby -e 'require "coverage"; Coverage.start; require "set"; Coverage.result; Coverage.start; require "tmpdir"; p Coverage.result'
   {".../lib/ruby/2.2.0/set.rb"=>[],
    ".../lib/ruby/2.2.0/tmpdir.rb"=>[nil, nil, nil, nil, nil, nil, 1, 1, ...]}

So Coverage.result stops coverage but also does some cleaning up.
I think the most intuitive would be that the coverage Hash would be reset to be empty, but instead it's filled with empty arrays.

As an example, this makes it fairly awkward to test and it enforces irreversible global state (https://github.com/ruby/spec/pull/219).
I also do not see how this would be useful for coverage libraries.

Is there a reason for this behavior?
If not, would it be OK to clear the Hash when calling #result?

---Files--------------------------------
0001-ext-coverage-coverage.c-Fully-reset-coverage-to-not-.patch (5.14 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>