You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In my recent PR igraph/rigraph#1021 to igraph, the coverage tests said that the testing didn't include the changed code, even though it did.
I put together a simple package with the same structure of running functions that have been assigned into a list, and covr::package_coverage(type="examples") also claimed there was no coverage.
The example package had this code:
test1 <- function() {
x <- 1 +
2 +
3 +
4
}
test <- list(test1)
and it exported test. The example for the help page for test ran this:
test[[1]]()
A version of the package that simply assigned test <- test1 and ran test() showed 100% coverage.
Put the onus on the package writer: Allow a hook that (re)populates any lists or other containers after covr has installed its tracing code, and again when the code is removed.
Modify covr to recursively handle lists.
2 is relatively straightforward, by adding a new type of record into the$replacements. The new type handles lists, not closures. A simple structure for it saves the environment where the list was found and the name of the list, and then has a list of replacements to make within that list, indexed by number rather than name since lists aren't always named.
A disadvantage of this is that lists aren't the only places where functions can be hidden -- packages could have environment objects, functions could be assigned as attributes of other objects, etc. Handling attributes wouldn't be hard if lists were handled, but handling environments recursively would have to watch out for infinite loops. Still, it's probably doable.
A disadvantage of 1 is that packages might need to be reorganized to do it, and it would be hard for the package writers to maintain.
In my recent PR igraph/rigraph#1021 to
igraph
, the coverage tests said that the testing didn't include the changed code, even though it did.I put together a simple package with the same structure of running functions that have been assigned into a list, and
covr::package_coverage(type="examples")
also claimed there was no coverage.The example package had this code:
and it exported
test
. The example for the help page fortest
ran this:A version of the package that simply assigned
test <- test1
and rantest()
showed 100% coverage.The full package is available here: https://github.com/dmurdoch/testpkg/tree/test_coverage .
Here's my session info:
The text was updated successfully, but these errors were encountered: