start_app(.auto_close = TRUE)
test_that_cli("add/remove/list themes", {
withr::local_rng_version("3.3.0")
set.seed(24)
start_app(.auto_close = TRUE)
id <- default_app()$add_theme(list(".green" = list(color = "green")))
expect_true(id %in% names(default_app()$list_themes()))
expect_snapshot({
cli_par(class = "green")
cli_text(lorem_ipsum())
cli_end()
})
default_app()$remove_theme(id)
expect_false(id %in% names(default_app()$list_themes()))
})
test_that("default theme is valid", {
expect_error({
id <- default_app()$add_theme(builtin_theme())
default_app()$remove_theme(id)
}, NA)
})
test_that("explicit formatter is used, and combined", {
id <- default_app()$add_theme(list(
"span.emph" = list(
fmt = function(x) paste0("(((", x, ")))"),
before = "<<", after = ">>")
))
on.exit(default_app()$remove_theme(id), add = TRUE)
expect_snapshot(
cli_text("this is {.emph it}, really")
)
})
test_that("simple theme", {
def <- simple_theme()
expect_true(is.list(def))
expect_false(is.null(names(def)))
expect_true(all(names(def) != ""))
expect_true(all(vlapply(def, is.list)))
})
test_that("user's override", {
custom <- list(".alert" = list(before = "custom:"))
override <- list(".alert" = list(after = "override:"))
expect_snapshot(local({
start_app(theme = custom, .auto_close = FALSE)
cli_alert("Alert!")
stop_app()
withr::local_options(cli.user_theme = override)
start_app(theme = custom, .auto_close = FALSE)
cli_alert("Alert!")
stop_app()
}))
})
test_that("theme does not precompute Unicode symbols", {
withr::local_options(cli.unicode = TRUE, cli.num_colors = 256L)
start_app()
msg <- NULL
withCallingHandlers(
cli_alert_success("ok"),
cliMessage = function(m) {
msg <<- m
invokeRestart("muffleMessage")
}
)
expect_true(ansi_has_any(msg$message))
msg2 <- NULL
withr::local_options(cli.unicode = FALSE, cli.num_colors = 1L)
withCallingHandlers(
cli_alert_success("ok2"),
cliMessage = function(m) {
msg2 <<- m
invokeRestart("muffleMessage")
}
)
expect_equal(msg2$message, "v ok2\n")
})
test_that("NULL will undo a style property", {
expect_snapshot(local({
cli_alert("this has an arrow")
cli_div(theme = list(.alert = list(before = NULL)))
cli_alert("this does not")
}))
})
test_that_cli(configs = "ansi", "NULL will undo color", {
expect_snapshot(local({
cli_alert("{.emph {.val this is blue}}")
cli_div(theme = list(span.val = list(color = NULL)))
cli_alert("{.emph {.val this is not}}")
}))
expect_snapshot(local({
cli_alert("{.emph {.val this is blue}}")
cli_div(theme = list(span.val = list(color = "none")))
cli_alert("{.emph {.val this is not}}")
}))
})
withr::local_options(cli.theme = NULL, cli.user_theme = NULL)
withr::local_options(cli.theme_dark = FALSE, cli.num_colors = 256)
start_app()
on.exit(stop_app(), add = TRUE)
test_that_cli(configs = "ansi", "NULL will undo background color", {
skip_if_not_installed("testthat", "3.1.2")
expect_snapshot(local({
cli_alert("{.emph {.code this has bg color}}")
cli_div(theme = list(span = list("background-color" = NULL)))
cli_alert("{.emph {.code this does not}}")
}))
expect_snapshot(local({
cli_alert("{.emph {.code this has bg color}}")
cli_div(theme = list(span = list("background-color" = "none")))
cli_alert("{.emph {.code this does not}}")
}))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.