library(testthat)
library(XML)
context('interactiveTable')
# A simple example
test_that("With empty rownames(mx) it should skip those",
{
mx <- matrix(1:6, ncol = 3)
table_str <- interactiveTable(mx)
expect_false(grepl("", table_str))
expect_false(grepl("
[^>]+>NA", table_str))
colnames(mx) <- sprintf("Col %s", LETTERS[1:NCOL(mx)])
table_str <- interactiveTable(mx)
expect_true(grepl("", table_str))
expect_false(grepl("
[^>]+>NA", table_str))
})
test_that("Empty cell names should be replaced with ''",
{
mx <- matrix(1:6, ncol = 3)
mx[1,1] <- NA
table_str <- interactiveTable(mx)
expect_false(grepl("
[^>]+>NA", table_str))
})
test_that("The variable name should not be in the tables first row if no rownames(mx)",
{
mx <- matrix(1:6, ncol = 3)
colnames(mx) <- sprintf("Col %s", LETTERS[1:NCOL(mx)])
table_str <- interactiveTable(mx)
expect_false(grepl("[^<]*[^>]+>mx", table_str))
})
test_that("A rowlabel without rownames indicates some kind of error and should throw an error",
{
mx <- matrix(1:6, ncol = 3)
colnames(mx) <- sprintf("Col %s", LETTERS[1:NCOL(mx)])
expect_error(interactiveTable(mx, rowlabel = "not_mx"))
})
# Add rownames
test_that("The rowname should appear",
{
mx <- matrix(1:6, ncol = 3)
colnames(mx) <- sprintf("Col %s", LETTERS[1:NCOL(mx)])
rownames(mx) <- LETTERS[1:NROW(mx)]
table_str <- interactiveTable(mx)
class(table_str) <- "character"
parsed_table <- readHTMLTable(table_str)[[1]]
expect_equal(ncol(parsed_table), ncol(mx) + 1)
expect_match(table_str, "
]*>[^>]+>A")
expect_match(table_str, "
]*>[^>]+>B")
})
test_that("Check that basic output are the same as the provided matrix",
{
mx <- matrix(1:6, ncol = 3)
colnames(mx) <- sprintf("Col %s", LETTERS[1:NCOL(mx)])
table_str <- interactiveTable(mx)
class(table_str) <- "character"
parsed_table <- readHTMLTable(table_str)[[1]]
expect_equal(ncol(parsed_table), ncol(mx), info = "Cols did not match")
expect_equal(nrow(parsed_table), nrow(mx), info = "Rows did not match")
expect_true(all(mx == parsed_table),
info = "Some cells don't match the inputted cells")
})
test_that("rnames = FALSE it should skip those",
{
mx <- matrix(1:6, ncol = 3)
rownames(mx) <- c("Row A", "Row B")
table_str <- interactiveTable(mx, rnames = FALSE)
expect_false(grepl("FALSE", table_str))
expect_false(grepl("Row A", table_str))
})
test_that("Test align functions", {
expect_equivalent(nchar(prPrepareAlign("lr", x = matrix(1, ncol = 10))),
10)
expect_equivalent(nchar(prPrepareAlign("lr", x = matrix(1, ncol = 2))),
2)
expect_equivalent(nchar(prPrepareAlign("lr", x = matrix(1, ncol = 2), rnames = TRUE)),
3)
expect_equivalent(nchar(prPrepareAlign("l", x = matrix(1, ncol = 2), rnames = TRUE)),
3)
expect_equivalent(nchar(prPrepareAlign("", x = matrix(1, ncol = 2, nrow = 2), rnames = TRUE)),
3)
expect_equivalent(attr(prPrepareAlign("r|rlt|r|", x = matrix(1, ncol = 2, nrow = 2), rnames = TRUE), "n"),
3)
expect_equivalent(attr(prPrepareAlign("r|rcl|lt|r|", x = matrix(1, ncol=5, nrow=2), rnames = TRUE), "n"),
6)
expect_match(prPrepareAlign("r|rcl|lt|r|", x = matrix(1, ncol = 5, nrow = 2), rnames = TRUE),
"^r")
expect_match(prPrepareAlign("l|r|", x = matrix(1, ncol = 3, nrow = 2), rnames = TRUE),
"^l|r|r|$")
align_str <- prPrepareAlign("r|rcl|lt|r|", x = matrix(1, ncol = 5, nrow = 2), rnames = TRUE)
expect_true("right" %in% prGetAlign(align_str, 1))
expect_true("right" %in% prGetAlign(align_str, 2))
expect_true("center" %in% prGetAlign(align_str, 3))
expect_true("left" %in% prGetAlign(align_str, 4))
expect_true("left" %in% prGetAlign(align_str, 5))
expect_true("right" %in% prGetAlign(align_str, 6))
expect_true("border-right" %in% names(prGetAlign(align_str, 1)))
expect_true("border-right" %in% names(prGetAlign(align_str, 4)))
expect_true("border-right" %in% names(prGetAlign(align_str, 5)))
expect_true("border-right" %in% names(prGetAlign(align_str, 6)))
expect_equivalent(length(prGetAlign(align_str, 1)), 2)
expect_equivalent(length(prGetAlign(align_str, 2)), 1)
expect_equivalent(length(prGetAlign(align_str, 6)), 2)
align_str <- prPrepareAlign("|c|rc", x = matrix(1, ncol = 2, nrow = 2), rnames = TRUE)
expect_true("border-right" %in% names(prGetAlign(align_str, 1)))
expect_true("border-left" %in% names(prGetAlign(align_str, 1)))
expect_true("center" %in% prGetAlign(align_str, 1))
mx <- matrix(1:6, ncol = 3)
rownames(mx) <- c("Row A", "Row B")
table_str <- interactiveTable(mx, rname = FALSE)
expect_match(table_str, "text-align: center;[^>]*>1")
expect_match(table_str, "text-align: center;[^>]*>3")
expect_match(table_str, "text-align: center;[^>]*>5")
table_str <- interactiveTable(mx)
expect_match(table_str, "text-align: left;[^>]*>Row A")
expect_match(table_str, "text-align: center;[^>]*>1")
expect_match(table_str, "text-align: center;[^>]*>3")
expect_match(table_str, "text-align: center;[^>]*>5")
table_str <- interactiveTable(mx, align = "r")
expect_match(table_str, "text-align: left;[^>]*>Ro")
expect_match(table_str, "text-align: right;[^>]*>1")
expect_match(table_str, "text-align: right;[^>]*>3")
expect_match(table_str, "text-align: right;[^>]*>5")
table_str <- interactiveTable(mx, align = "|ll|r|r|")
expect_match(table_str, "text-align: left;[^>]*>Ro")
expect_match(table_str, "text-align: left;[^>]*>1")
expect_match(table_str, "text-align: right;[^>]*>3")
expect_match(table_str, "text-align: right;[^>]*>5")
expect_match(table_str, "border-left:[^>]*>Ro")
expect_match(table_str, "border-right:[^>]*>1")
expect_match(table_str, "border-right:[^>]*>3")
expect_match(table_str, "border-right:[^>]*>5")
})
test_that("Check color function",{
expect_equivalent(prPrepareColors(c("white", "#444444"), 2),
c("#ffffff", "#444444"))
expect_equivalent(prPrepareColors(c("white", "#444444"), 3),
c("#ffffff", "#444444", "#ffffff"))
expect_equivalent(prPrepareColors(c("white", "#444"), 3),
c("#ffffff", "#444444", "#ffffff"))
expect_null(attr(prPrepareColors(c("white", "#444444"), 3), "groups"))
expect_equivalent(attr(prPrepareColors(c("white", "#444444"),
n = 3,
ng = c(2, 3, 1),
gtxt = c("a", "b", "c")), "groups")[[1]],
c("#ffffff", "#ffffff"))
expect_equivalent(attr(prPrepareColors(c("white", "#444444"),
n = 3,
ng = c(2, 3, 1),
gtxt = c("a", "b", "c")), "groups")[[2]],
c("#444444", "#444444", "#444444"))
expect_equivalent(attr(prPrepareColors(c("white", "#444444"),
n = 3,
ng = c(2, 3, 1),
gtxt = c("a", "b", "c")), "groups")[[3]],
c("#ffffff"))
expect_equivalent(attr(prPrepareColors(c("white", "#444444", "none"),
n = 3,
ng = c(2, 3, 1),
gtxt = c("a", "b", "c")), "groups")[[3]],
c("none"))
expect_equivalent(attr(prPrepareColors(c("white", "none"),
n = 3,
ng = c(2, 3, 1),
gtxt = c("a", "b", "c")), "groups")[[2]],
c("none", "none", "none"))
## Test the merge colors
expect_equal(prMergeClr(c("white", "#444444")),
colorRampPalette(c("#FFFFFF", "#444444"))(3)[2])
expect_equal(prMergeClr(c("red", "#444444")),
colorRampPalette(c("red", "#444444"))(3)[2])
expect_equal(prMergeClr(c("#444444", "red")),
colorRampPalette(c("red", "#444444"))(3)[2])
expect_equal(prMergeClr(c("#FFFFFF", "#FFFFFF", "#FFFFFF")),
"#FFFFFF")
expect_equal(prMergeClr(c("#FFFFFF", "#FFFFFF", "#000000", "#000000")),
prMergeClr(c("#FFFFFF", "#000000")))
expect_equal(prMergeClr(c("#000000", "#FFFFFF", "#FFFFFF")),
prMergeClr(c("#FFFFFF", "#FFFFFF", "#000000")))
expect_equal(prMergeClr(c("#000000", "#FFFFFF", "#000000")),
prMergeClr(c("#FFFFFF", "#000000", "#FFFFFF")))
})
test_that("Test prAddSemicolon2StrEnd",{
test_str <- "background: white"
expect_equal(prAddSemicolon2StrEnd(test_str),
paste0(test_str, ";"))
test_str <- c("", "", `background-color` = "none")
expect_equivalent(prAddSemicolon2StrEnd(test_str),
paste0(test_str[3], ";"))
expect_equal(names(prAddSemicolon2StrEnd(test_str)),
names(test_str[3]))
})
test_that("Problem with naming in stringr 1.0.0", {
style_bug <- structure(c("", "font-weight: 900;", "#f7f7f7"),
.Names = c("", "", "background-color"))
expect_false(is.null(names(prAddSemicolon2StrEnd(style_bug))))
expect_match(prGetStyle(style_bug),
regexp = "^font-weight: 900; background-color: #f7f7f7")
})
test_that("Handling data.frames with factors",{
tmp <- data.frame(a = 1:3,
b = factor(x = 1:3,
labels = c("Unique_Factor_1",
"Factor_2",
"Factor_3")))
str <- interactiveTable(tmp)
expect_true(grepl("Unique_Factor_1", str))
})
test_that("Check Javascript string",{
js <- prGetScriptString(structure(1:3, javascript = c("a", "B")))
expect_gt(length(strsplit(js, "