Nothing
m = matrix(
c(10, 20, 30, 40),
nrow = 2,
dimnames = list(c("Yes", "No"), c("A", "B"))
)
m_named = matrix(
c(10, 20, 30, 40),
nrow = 2,
dimnames = list(
c("Yes", "No"),
c("A", "B")
)
)
# ---- pct_resolver() ----
test_that("returns all FALSE when percentage = NULL", {
flags = pct_resolver(NULL)
expect_false(flags$row)
expect_false(flags$col)
expect_false(flags$total)
})
test_that("returns all FALSE when percentage = FALSE", {
flags = pct_resolver(FALSE)
expect_false(flags$row)
expect_false(flags$col)
expect_false(flags$total)
})
test_that("returns all TRUE when percentage = TRUE", {
flags = pct_resolver(TRUE)
expect_true(flags$row)
expect_true(flags$col)
expect_true(flags$total)
})
test_that("returns all TRUE for 'all'", {
flags = pct_resolver("all")
expect_true(flags$row)
expect_true(flags$col)
expect_true(flags$total)
})
test_that("handles 'by_row' correctly", {
flags = pct_resolver("by_row")
expect_true(flags$row)
expect_false(flags$col)
expect_false(flags$total)
})
test_that("handles 'by_col' correctly", {
flags = pct_resolver("by_col")
expect_false(flags$row)
expect_true(flags$col)
expect_false(flags$total)
})
test_that("handles 'by_total' correctly", {
flags = pct_resolver("by_total")
expect_false(flags$row)
expect_false(flags$col)
expect_true(flags$total)
})
test_that("handles vector of multiple options", {
flags = pct_resolver(c("by_row", "by_col"))
expect_true(flags$row)
expect_true(flags$col)
expect_false(flags$total)
})
# ---- digits_resolver() -------------------------------------------------------
test_that("expands scalar to all fields", {
resolved = digits_resolver(2)
expect_equal(resolved$ex, 2)
expect_equal(resolved$row_pct, 2)
expect_equal(resolved$col_pct, 2)
expect_equal(resolved$total_pct, 2)
})
test_that("returns defaults when digits = NULL", {
resolved = digits_resolver(NULL)
expect_type(resolved, "list")
expect_true("ex" %in% names(resolved))
})
test_that("partial list overrides only specified fields", {
defaults = getOption("tab_digits")
resolved = digits_resolver(list(ex = 3))
expect_equal(resolved$ex, 3)
expect_equal(resolved$row_pct, defaults$row_pct)
})
# ---- num_formatter_ct() ------------------------------------------------------
test_that("formats whole numbers without decimals", {
expect_equal(num_formatter_ct(5.0), "5")
expect_equal(num_formatter_ct(0), "0")
})
test_that("formats non-integer to given decimal places", {
expect_equal(num_formatter_ct(3.14159, 2), "3.14")
})
# ---- pct_formatter_ct() ------------------------------------------------------
test_that("returns NULL for 100 (total row/col suppressed)", {
expect_null(pct_formatter_ct(100, 1))
})
test_that("returns NULL for NA", {
expect_null(pct_formatter_ct(NA, 1))
})
test_that("formats a percentage correctly", {
expect_equal(pct_formatter_ct(50, 1), "50.0%")
})
# ---- cell_width_ct() ---------------------------------------------------------
test_that("returns 0 for empty string", {
expect_equal(cell_width_ct(""), 0L)
})
test_that("returns max line width for multi-line cell", {
expect_equal(cell_width_ct("10\n50.0%\n25.0%"), 5L)
})
test_that("handles single-line cell", {
expect_equal(cell_width_ct("123"), 3L)
})
# ---- cross_table() -----
test_that("returns invisible matrix", {
result = expect_invisible(cross_table(m, layout = FALSE))
expect_true(is.matrix(result))
})
test_that("accepts a table object", {
tbl = table(mtcars$cyl, mtcars$gear)
result = expect_invisible(cross_table(tbl, layout = FALSE))
expect_true(is.matrix(result))
})
test_that("output contains row names", {
out = capture.output(cross_table(m_named, layout = FALSE))
expect_true(any(grepl("Yes|No", out)))
})
test_that("output contains column names", {
out = capture.output(cross_table(m_named, layout = FALSE))
expect_true(any(grepl("A|B", out)))
})
test_that("output contains TOTAL label", {
out = capture.output(cross_table(m, layout = FALSE))
expect_true(any(grepl("TOTAL", out)))
})
test_that("output includes percentage signs when percentage = 'all'", {
out = capture.output(cross_table(m, percentage = "all", layout = FALSE))
expect_true(any(grepl("%", out)))
})
test_that("output has no percentage signs when percentage = FALSE", {
out = capture.output(cross_table(m, percentage = FALSE, layout = FALSE))
expect_false(any(grepl("%", out)))
})
test_that("expected = FALSE removes parentheses from output", {
out = capture.output(cross_table(m, expected = FALSE, layout = FALSE))
expect_false(any(grepl("\\(", out)))
})
test_that("expected = TRUE shows parenthesised values", {
out = capture.output(cross_table(m, expected = TRUE, layout = FALSE))
expect_true(any(grepl("\\(", out)))
})
test_that("layout = TRUE prints without error", {
expect_no_error(cross_table(m, layout = TRUE))
})
# ---- ct_style() --------
test_that("ct_style() with named strings runs without error", {
expect_no_error(
cross_table(
m,
layout = FALSE,
style = ct_style(observed = "blue", expected = "yellow")
)
)
})
test_that("ct_style() with lambda runs without error", {
expect_no_error(
cross_table(
m,
layout = FALSE,
style = ct_style(observed = \(ctx) cli::col_green(ctx$formatted_text))
)
)
})
test_that("ct_style() rejects non-string, non-function values", {
expect_error(ct_style(observed = 123), "must be a string or a function")
})
test_that("ct_style() returns correct class", {
s = ct_style(observed = "blue")
expect_s3_class(s, "ct_style")
expect_s3_class(s, "tabstats_style")
})
test_that("ct_style() stores entries correctly", {
fn = \(ctx) ctx$formatted_text
s = ct_style(observed = fn)
expect_identical(s$observed, fn)
})
test_that("ct_style() with all keys runs without error", {
expect_no_error(
ct_style(
observed = "blue",
expected = "yellow",
row_percentage = "green",
col_percentage = "cyan",
total_percentage = "magenta",
total = "bold",
title = "bold",
border_text = "yellow"
)
)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.