# We don't use expect_snapshot because it adds an extra ! at the
# beginning of the error message
test_that("pkg_error", {
err <- tryCatch(
throw(pkg_error(
"!" = "This is not good!",
"i" = "You should not use {.code foo}, use {.code bar} instead.",
.data = list(foo = 1:3),
call. = FALSE
)),
error = function(e) e
)
expect_snapshot(err)
expect_equal(err$foo, 1:3)
})
# We don't use expect_snapshot because it adds an extra ! at the
# beginning of the error message
test_that("stop", {
err <- tryCatch(
stop(pkg_error(
"!" = "This is not good!",
"i" = "You should not use {.code foo}, use {.code bar} instead.",
call. = FALSE
)),
error = function(e) e
)
expect_snapshot(err)
})
test_that("stop with message", {
err <- tryCatch(
stop("Ooopsie daily!"),
error = function(e) e
)
expect_snapshot(err)
})
test_that("stopifnot", {
expect_snapshot(error = TRUE, {
stopifnot(1 == 2)
})
})
test_that("zip", {
expect_snapshot({
zip(character(), character())
zip(letters[1:5], LETTERS[1:5])
zip("1", letters[1:5])
})
})
test_that("first_char", {
expect_equal(first_char("foo"), "f")
expect_equal(first_char("f"), "f")
expect_equal(first_char(letters), letters)
expect_equal(first_char(paste(letters, LETTERS)), letters)
expect_equal(first_char(""), "")
expect_equal(first_char(character()), character())
})
test_that("last_char", {
expect_equal(last_char("foo"), "o")
expect_equal(last_char("f"), "f")
expect_equal(last_char(letters), letters)
expect_equal(last_char(paste(letters, LETTERS)), LETTERS)
expect_equal(last_char(""), "")
expect_equal(last_char(character()), character())
})
test_that("unquote", {
keep <- list(
"foo",
"'foo",
"foo'",
"\"foo'",
"'foo\"",
letters,
paste0("'", letters),
paste0(letters, "'"),
character()
)
for (k in keep) expect_equal(unquote(k), k, info = k)
expect_snapshot({
unquote("'quoted'")
unquote(c("'quoted'", "not", '"quoted"'))
})
})
test_that("has_emoji", {
mockery::stub(has_emoji, "cli::is_utf8_output", FALSE)
expect_false(has_emoji())
mockery::stub(has_emoji, "cli::is_utf8_output", TRUE)
withr::local_options(pkg.emoji = TRUE)
expect_true(has_emoji())
withr::local_options(pkg.emoji = FALSE)
expect_false(has_emoji())
withr::local_options(pkg.emoji = NULL)
mockery::stub(has_emoji, "Sys.info", list(sysname = "Darwin"))
expect_true(has_emoji())
mockery::stub(has_emoji, "Sys.info", list(sysname = "Linux"))
expect_false(has_emoji())
})
test_that("parse_url", {
expect_snapshot({
parse_url("https://github.com/r-hub/rhub")
parse_url("https://user@github.com/r-hub/rhub")
parse_url("https://user:pass@github.com/r-hub/rhub")
parse_url("https://github.com/r-hub/rhub?q=foo&p=bar")
parse_url("git@github.com:/r-hub/rhub")
parse_url("git@github.com:/r-hub/rhub.git")
})
expect_snapshot(error = TRUE, {
parse_url("this is not a URL at all")
})
})
test_that("read_file", {
tmp <- tempfile()
on.exit(unlink(tmp), add = TRUE)
cnt <- as.raw(c(0xc3, 0xa9, 0xc3, 0xa1))
writeBin(cnt, tmp)
cnt2 <- read_file(tmp)
expect_equal(Encoding(cnt2), "UTF-8")
expect_equal(charToRaw(cnt2), cnt)
writeBin(cnt[1:3], tmp)
expect_error(read_file(tmp), "not UTF-8")
})
cli::test_that_cli("ansi_align_width", configs = c("plain", "ansi"), {
expect_snapshot({
paste0("--", ansi_align_width(c("foo", "bar", "foobar")), "--")
paste0(
"--",
ansi_align_width(c("foo", "bar", cli::col_red("foobar"))),
"--"
)
ansi_align_width(character())
})
})
test_that("random_id", {
expect_true(is.character(random_id()))
expect_true(nchar(random_id()) >= 5)
})
test_that("readline", {
args <- NULL
mockery::stub(
readline,
"base::readline",
function(...) args <<- list(...)
)
readline(prompt = "prompt")
expect_equal(args, list("prompt"))
})
test_that("is_interactive", {
withr::local_options(rlib_interactive = TRUE)
expect_true(is_interactive())
withr::local_options(rlib_interactive = FALSE)
expect_false(is_interactive())
withr::local_options(rlib_interactive = NULL)
withr::local_options(knitr.in.progress = TRUE)
expect_false(is_interactive())
withr::local_options(knitr.in.progress = NULL)
withr::local_options(rstudio.notebook.executing = TRUE)
expect_false(is_interactive())
withr::local_options(rstudio.notebook.executing = NULL)
withr::local_envvar(TESTTHAT = "true")
expect_false(is_interactive())
withr::local_envvar(TESTTHAT = NA_character_)
mockery::stub(is_interactive, "interactive", FALSE)
expect_false(is_interactive())
mockery::stub(is_interactive, "interactive", TRUE)
expect_true(is_interactive())
})
test_that("update", {
orig <- list(a = 1, b = 2)
expect_equal(update(orig, list()), orig)
expect_equal(update(orig, list(a = 2, c = 3)), list(a = 2, b = 2, c = 3))
})
test_that("get_maintainer_email", {
pkg <- test_path("fixtures/pkg")
expect_equal(get_maintainer_email(pkg), "first.last@example.com")
pkg2 <- test_path("fixtures/pkg_0.0.0.9000.tar.gz")
expect_equal(get_maintainer_email(pkg2), "first.last@example.com")
bad <- tempfile()
on.exit(unlink(bad, recursive = TRUE), add = TRUE)
dir.create(bad)
expect_error(get_maintainer_email(bad), "file found")
bad2 <- test_path("fixtures/bad.tar.gz")
expect_error(get_maintainer_email(bad2), "file in package")
})
test_that("is_dir", {
tmp <- tempfile()
on.exit(unlink(tmp), add = TRUE)
file.create(tmp)
expect_true(is_dir(tempdir()))
expect_false(is_dir(tmp))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.