# Need a simple data frame to test with
iris2 <- iris %>%
mutate_all(as.character)
test_that("All columns must be character", {
expect_snapshot_error(add_column_headers(iris, "header_text"))
})
test_that("Nested headers are not allowed", {
header_string = "TEXT | TEXT {TEXT {TEXT} TEXT } | TEXT"
expect_snapshot_error(add_column_headers(iris2, header_string))
})
test_that("Header strings must have the same number of columns as the data frame", {
# Create different header strings
good_no_spanner <- "Sepal Length | Sepal Width | Petal Length | Petal Width | Species"
less_no_spanner <- "Sepal Length | Sepal Width | Petal Length | Petal Width"
more_no_spanner <- "Sepal Length | Sepal Width | Petal Length | Petal Width | Species | More"
good_spanner <- "Sepal {Length | Width} | Petal {Length | Width} | Species"
less_spanner <- "Sepal {Length | Width} | Petal {Length | Width}"
more_spanner <- "Sepal {Length | Width} | Petal {Length | Width} | Species | More"
nested_less <- "Sepal {Length | Width} | Petal {Length} | Species"
nested_more <- "Sepal {Length | Width} | Petal {Length | Width | More} | Species"
# Test the results
expect_silent(add_column_headers(iris2, good_no_spanner))
expect_silent(add_column_headers(iris2, good_spanner))
expect_snapshot_error(add_column_headers(iris2, less_no_spanner))
expect_snapshot_error(add_column_headers(iris2, more_no_spanner))
expect_snapshot_error(add_column_headers(iris2, less_spanner))
expect_snapshot_error(add_column_headers(iris2, more_spanner))
expect_snapshot_error(add_column_headers(iris2, nested_less))
expect_snapshot_error(add_column_headers(iris2, nested_more))
})
test_that("Unmatched spanner brackers", {
header_string = "TEXT | TEXT {TEXT {TEXT} TEXT | TEXT"
expect_snapshot_error(add_column_headers(iris2, header_string))
})
test_that("Spanning headers produce correctly", {
# Header text with no spanner
header_text_no_spanner <- "Sepal Length | Sepal Width | Petal Length | Petal Width | Species"
# manually construct the expected data frame for the headers
header_df_no_spanner <- data.frame(
Sepal.Length = c("Sepal Length"),
Sepal.Width = c("Sepal Width"),
Petal.Length = c("Petal Length"),
Petal.Width = c("Petal Width"),
Species = c("Species"),
stringsAsFactors = FALSE)
# Header text with a spanner
header_text_with_spanner <- "Sepal {Length | Width} | Petal {Length | Width} | Species"
# manually construct the expected data frame for the headers
header_df_with_spanner <- data.frame(
Sepal.Length = c("Sepal", "Length"),
Sepal.Width = c("", "Width"),
Petal.Length = c("Petal", "Length"),
Petal.Width = c("", "Width"),
Species = c("", "Species"),
stringsAsFactors = FALSE)
# Assume that all columns should match
expect_true(all(add_column_headers(iris2, header_text_no_spanner) == bind_rows(header_df_no_spanner, iris2)))
expect_true(all(add_column_headers(iris2, header_text_with_spanner) == bind_rows(header_df_with_spanner, iris2)))
})
test_that("add_column_headers throws an error when you use a token and don't pass header_n", {
expect_snapshot_error({
mtcars2 <- mtcars %>%
mutate_all(as.character)
t <- tplyr_table(mtcars2, am) %>%
add_layer(
group_count(cyl)
)
b_t <- build(t) %>% mutate_all(as.character)
count_string <- "Rows | am0 **0** | am1 **1**"
add_column_headers(b_t, count_string)
})
})
test_that("add_column_headers returns the expected result when tokens are passed", {
mtcars2 <- mtcars %>%
mutate_all(as.character)
t <- tplyr_table(mtcars2, vs, cols = am) %>%
add_layer(
group_count(cyl)
)
b_t <- build(t) %>%
select(starts_with("row_label1") | starts_with("var1_"))
count_string <- "Rows | V N=**0** {auto N=**0_0** | man N=**0_1**} | S N=**1** {auto N=**1_0** | man N=**1_1**}"
tab <- add_column_headers(b_t, count_string, header_n(t))
# The strucutre was visually checked
expect_equal(tab, structure(list(row_label1 = c("", "Rows", "4", "6", "8"),
var1_0_0 = c("V N=18", "auto N=12", " 0 ( 0.0%)", " 0 ( 0.0%)", "12 (100.0%)"),
var1_0_1 = c("", "man N=6", " 1 ( 16.7%)", " 3 ( 50.0%)", " 2 ( 33.3%)"),
var1_1_0 = c("S N=14", "auto N=7", " 3 ( 42.9%)", " 4 ( 57.1%)", " 0 ( 0.0%)"),
var1_1_1 = c("", "man N=7", " 7 (100.0%)", " 0 ( 0.0%)", " 0 ( 0.0%)")),
row.names = c(NA, -5L),
class = c("tbl_df", "tbl", "data.frame")))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.