exclude_ops <- list(exclude_pattern = "#TeSt_NoLiNt",
exclude_start = "#TeSt_NoLiNt_StArT",
exclude_end = "#TeSt_NoLiNt_EnD")
context("parse_exclusions")
test_that("it returns an empty vector if there are no exclusions", {
t1 <- c("this",
"is",
"a",
"test")
expect_equal(do.call(parse_exclusions, c(list(t1), exclude_ops, recursive = F)), numeric(0))
})
test_that("it returns the line if one line is excluded", {
t1 <- c("this",
"is #TeSt_NoLiNt",
"a",
"test")
expect_equal(do.call(parse_exclusions, c(list(t1), exclude_ops)), c(2))
t2 <- c("this",
"is #TeSt_NoLiNt",
"a",
"test #TeSt_NoLiNt")
expect_equal(do.call(parse_exclusions, c(list(t2), exclude_ops)), c(2, 4))
})
test_that("it returns all lines between start and end", {
t1 <- c("this #TeSt_NoLiNt_StArT",
"is",
"a #TeSt_NoLiNt_EnD",
"test")
expect_equal(do.call(parse_exclusions, c(list(t1), exclude_ops)), c(1, 2, 3))
t2 <- c("this #TeSt_NoLiNt_StArT",
"is",
"a #TeSt_NoLiNt_EnD",
"test",
"of",
"the #TeSt_NoLiNt_StArT",
"emergency #TeSt_NoLiNt_EnD",
"broadcast",
"system")
expect_equal(do.call(parse_exclusions, c(list(t2), exclude_ops)), c(1, 2, 3, 6, 7))
})
test_that("it ignores exclude coverage lines within start and end", {
t1 <- c("this #TeSt_NoLiNt_StArT",
"is #TeSt_NoLiNt",
"a #TeSt_NoLiNt_EnD",
"test")
expect_equal(do.call(parse_exclusions, c(list(t1), exclude_ops)), c(1, 2, 3))
})
test_that("it throws an error if start and end are unpaired", {
t1 <- c("this #TeSt_NoLiNt_StArT",
"is #TeSt_NoLiNt",
"a",
"test")
expect_error(do.call(parse_exclusions, c(list(t1), exclude_ops)), "but only")
})
context("normalize_exclusions")
expect_equal_vals <- function(x, y) {
testthat::expect_equal(unname(x), unname(y))
}
test_that("it merges two NULL or empty objects as an empty list", {
expect_equal(normalize_exclusions(c(NULL, NULL)), list())
expect_equal(normalize_exclusions(c(NULL, list())), list())
expect_equal(normalize_exclusions(c(list(), NULL)), list())
expect_equal(normalize_exclusions(c(list(), list())), list())
})
test_that("it returns the object if the other is NULL", {
t1 <- list(a = 1:10)
expect_equal_vals(normalize_exclusions(c(t1, NULL)), t1)
expect_equal_vals(normalize_exclusions(c(NULL, t1)), t1)
})
test_that("it returns the union of two non-overlapping lists", {
t1 <- list(a = 1:10)
t2 <- list(a = 20:30)
expect_equal_vals(normalize_exclusions(c(t1, t2)), list(a = c(1:10, 20:30)))
})
test_that("it returns the union of two overlapping lists", {
t1 <- list(a = 1:10)
t2 <- list(a = 5:15)
expect_equal_vals(normalize_exclusions(c(t1, t2)), list(a = 1:15))
})
test_that("it adds names if needed", {
t1 <- list(a = 1:10)
t2 <- list(b = 5:15)
expect_equal_vals(normalize_exclusions(c(t1, t2)), list(a = 1:10, b = 5:15))
})
test_that("it handles full file exclusions", {
expect_equal_vals(normalize_exclusions(list("a")), list(a = Inf))
expect_equal_vals(normalize_exclusions(list("a", b = 1)), list(a = Inf, b = 1))
})
test_that("it handles redundant lines", {
expect_equal_vals(normalize_exclusions(list(a = c(1, 1, 1:10))), list(a = 1:10))
expect_equal_vals(normalize_exclusions(list(a = c(1, 1, 1:10), b = 1:10)), list(a = 1:10, b = 1:10))
})
test_that("it handles redundant files", {
expect_equal_vals(normalize_exclusions(list(a = c(1:10), a = c(10:20))), list(a = 1:20))
})
cov <- package_coverage("TestSummary")
context("exclude")
test_that("it excludes lines", {
expect_equal(length(cov), 4)
expect_equal(length(exclude(cov, list("R/TestSummary.R" = 5), path = "TestSummary")), 3)
expect_equal(length(exclude(cov, list("R/TestSummary.R" = 13), path = "TestSummary")), 3)
})
test_that("it preserves the class", {
expect_equal(class(exclude(cov, NULL, path = "TestSummary")), class(cov))
expect_equal(class(exclude(cov, list("R/TestSummary.R" = 3), path = "TestSummary")), class(cov))
})
test_that("function exclusions work", {
expect_equal(length(exclude(cov, NULL, "^test")), 1)
expect_equal(length(exclude(cov, NULL, c("^test", "dont"))), 0)
})
test_that("it excludes properly", {
t1 <- package_coverage("TestExclusion")
expect_equal(length(t1), 3)
t1 <- package_coverage("TestExclusion", line_exclusions = "R/TestExclusion.R")
expect_equal(length(t1), 0)
})
context("file_exclusions")
test_that("it returns NULL if empty or no file exclusions", {
expect_equal(file_exclusions(NULL, ""), NULL)
expect_equal(file_exclusions(list("a" = c(1, 2))), NULL)
expect_equal(file_exclusions(list("a" = c(1, 2), "b" = c(3, 4))), NULL)
})
test_that("it returns a normalizedPath if the file can be found", {
expect_match(file_exclusions(list("test-exclusions.R"), "."), "test-exclusions.R")
expect_match(
file_exclusions(list("testthat/test-exclusions.R", "testthat.R"), ".."),
rex::rex(or("test-exclusions.R", "testthat.R")))
})
describe("covrignore", {
it("returns NULL if empty or no file exclusions", {
withr::with_options(list(covr.covrignore = ""),
expect_equal(parse_covr_ignore(), NULL)
)
withr::with_envvar(list("COVR_COVRIGNORE" = ""),
expect_equal(parse_covr_ignore(), NULL)
)
tf <- tempfile()
on.exit(unlink(tf))
writeLines("", tf)
withr::with_options(list(covr.covrignore = tf),
expect_equal(parse_covr_ignore(), NULL)
)
withr::with_envvar(list("COVR_COVRIGNORE" = tf),
expect_equal(parse_covr_ignore(), NULL)
)
})
it("returns the file if file exists", {
td <- tempfile()
on.exit(unlink(td, recursive = TRUE))
dir.create(td)
writeLines("foo.c", file.path(td, ".covrignore"))
writeLines("", file.path(td, "foo.c"))
withr::with_dir(td, {
expect_equal(parse_covr_ignore(), "foo.c")
})
})
it("handles globs correctly", {
td <- tempfile()
on.exit(unlink(td, recursive = TRUE))
dir.create(td)
writeLines("foo.*", file.path(td, ".covrignore"))
writeLines("", file.path(td, "foo.c"))
writeLines("", file.path(td, "foo.o"))
withr::with_dir(td, {
expect_equal(parse_covr_ignore(), c("foo.c", "foo.o"))
})
})
it("handles directories correctly", {
td <- tempfile()
on.exit(unlink(td, recursive = TRUE))
dir.create(td)
dir.create(file.path(td, "src"))
writeLines("src", file.path(td, ".covrignore"))
writeLines("", file.path(td, "src", "foo.c"))
writeLines("", file.path(td, "src", "foo.o"))
withr::with_dir(td, {
expect_equal(gsub("//", "/", parse_covr_ignore()), c("src/foo.c", "src/foo.o"))
})
})
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.