has_dt <- requireNamespace('data.table', quietly = TRUE) has_tibble <- requireNamespace('tibble', quietly = TRUE) test_that('unprintables get escaped', { expect_identical(repr_html('\001'), "'\\001'") }) test_that('simple LaTeX escaping works', { expect_identical(latex_escape('\\'), '\\textbackslash{}') expect_identical(latex_escape('{}'), '\\{\\}') expect_identical(latex_escape('$'), '\\$') expect_identical(latex_escape('^'), '\\textasciicircum{}') expect_identical(latex_escape('_'), '\\_') expect_identical(latex_escape('%'), '\\%') expect_identical(latex_escape('#'), '\\#') expect_identical(latex_escape('&'), '\\&') expect_identical(latex_escape('~'), '\\textasciitilde{}') expect_identical(latex_escape('|'), '\\textbar{}') expect_identical(latex_escape('[]'), '{[}{]}') }) test_that('simple HTML escaping works', { expect_identical(html_escape('&'), '&') expect_identical(html_escape('<'), '<') expect_identical(html_escape('>'), '>') }) test_that('LaTeX escaping in vectors works', { expect_identical(repr_latex('['), "'{[}'") expect_identical(repr_latex(c('[', '|')), "\\begin{enumerate*} \\item '{[}' \\item '\\textbar{}' \\end{enumerate*} ") }) test_that('HTML escaping in vectors works', { expect_identical(repr_html('<'), "'<'") expect_identical( repr_html(c('<', '&')), paste0(list_style, "
  1. '<'
  2. '&'
\n") ) }) test_that('LaTeX escaping in matrices works', { expect_identical(repr_latex(matrix(c('[', '{', '%', '#'), 2, 2, TRUE)), 'A matrix: 2 \u00D7 2 of type chr \\begin{tabular}{ll} \t {[} & \\{\\\\ \t \\% & \\#\\\\ \\end{tabular} ') expect_identical(repr_latex(matrix(c(']', '}', '&', '_'), 2, 2, TRUE, list(c('$', '#'), c('%', '|')))), 'A matrix: 2 \u00D7 2 of type chr \\begin{tabular}{r|ll} & \\% & \\textbar{}\\\\ \\hline \t\\$ & {]} & \\}\\\\ \t\\# & \\& & \\_\\\\ \\end{tabular} ') }) test_that('HTML escaping in matrices works', { expect_identical(repr_html(matrix(c('[', '{', '%', '#'), 2, 2, TRUE)), ' \t \t
A matrix: 2 \u00D7 2 of type chr
[{
%#
') expect_identical(repr_html(matrix(c(']', '}', '&', '_'), 2, 2, TRUE, list(c('$', '#'), c('%', '|')))), ' \t \t \t
A matrix: 2 \u00D7 2 of type chr
%|
$]}
#&_
') }) test_that('LaTeX escaping in lists works', { expect_identical(repr_latex(list(lbr = '[')), "\\textbf{\\$lbr} = '{[}'") expect_identical(repr_latex(list(`&` = '%')), "\\textbf{\\$`\\&`} = '\\%'") }) test_that('HTML escaping in lists works', { expect_identical(repr_html(list(lt = '<')), "$lt = '<'") expect_identical(repr_html(list(`&` = '<')), "$`&` = '<'") }) test_that('Factors are maintained in small arrays for text', { df <- data.frame(a = 1:4, b = factor(1:4, levels = 1:4, labels = c("A", "B", "C", "D"))) expected <- " a b\n1 1 A\n2 2 B\n3 3 C\n4 4 D" expect_identical(repr_text(df), expected) if (has_dt) { dt <- data.table::as.data.table(df) answer <- repr_text(dt) expect_identical(answer, expected) } if (has_tibble) { dtbl <- tibble::as_tibble(df) answer <- repr_text(dtbl) expect_identical(answer, expected) } }) test_that('Factors are maintained in small arrays for HTML', { df <- data.frame(a = 1:4, b = factor(1:4, levels = 1:4, labels = c("A", "B", "C", "D"))) expected <- ' \t \t \t \t \t \t
A data.frame: 4 \u00D7 2
ab
<int><fct>
1A
2B
3C
4D
' expect_identical(repr_html(df), expected) if (has_dt) { dt <- data.table::as.data.table(df) expect_identical(repr_html(dt), sub('data\\.frame', 'data.table', expected)) } if (has_tibble) { dtbl <- tibble::as_tibble(df) expect_identical(repr_html(dtbl), sub('data\\.frame', 'tibble', expected)) } }) test_that('Factors are sanitized in small data.frames for HTML', { df <- data.frame(a = 1:4, b = factor(1:4, levels = 1:4, labels = c("A&", "B>", "C", "D"))) expected <- ' \t \t \t \t \t \t
A data.frame: 4 \u00D7 2
ab
<int><fct>
1A&
2B>
3C
4D
' expect_identical(repr_html(df), expected) if (has_dt) { dt <- data.table::as.data.table(df) expect_identical(repr_html(dt), sub('data\\.frame', 'data.table', expected)) } if (has_tibble) { dtbl <- tibble::as_tibble(df) expect_identical(repr_html(dtbl), sub('data\\.frame', 'tibble', expected)) } }) test_that('Factors are maintained in small arrays for LaTeX', { df <- data.frame(a = 1:4, b = factor(1:4, levels = 1:4, labels = c("A", "B", "C", "D"))) expected <- 'A data.frame: 4 \u00D7 2 \\begin{tabular}{ll} a & b\\\\ & \\\\ \\hline \t 1 & A\\\\ \t 2 & B\\\\ \t 3 & C\\\\ \t 4 & D\\\\ \\end{tabular} ' expect_identical(repr_latex(df), expected) if (has_dt) { dt <- data.table::as.data.table(df) expect_identical(repr_latex(dt), sub('data\\.frame', 'data.table', expected)) } if (has_tibble) { dtbl <- tibble::as_tibble(df) expect_identical(repr_latex(dtbl), sub('data\\.frame', 'tibble', expected)) } }) test_that('Factors are sanitized in small data.frames for LaTeX', { df <- data.frame(a = 1:4, b = factor(1:4, levels = 1:4, labels = c("A&", "B%", "_C_", "D"))) expected <- 'A data.frame: 4 \u00D7 2 \\begin{tabular}{ll} a & b\\\\ & \\\\ \\hline \t 1 & A\\& \\\\ \t 2 & B\\% \\\\ \t 3 & \\_C\\_\\\\ \t 4 & D \\\\ \\end{tabular} ' expect_identical(repr_latex(df), expected) if (has_dt) { dt <- data.table::as.data.table(df) expect_identical(repr_latex(dt), sub('data\\.frame', 'data.table', expected)) } if (has_tibble) { dtbl <- tibble::as_tibble(df) expect_identical(repr_latex(dtbl), sub('data\\.frame', 'tibble', expected)) } }) test_that('vector entries with consecutive spaces get wrapped', { v <- c('one space', 'two spaces') expect_identical( repr_html(v), paste0( list_style, '
    ', "
  1. 'one space'
  2. ", "
  3. 'two spaces'
  4. ", '
\n' ) ) })