context("hidden")
getClasses <- function(tag) {
unlist(strsplit(tag$attribs$class, " "))
}
clsName <- "shinyjs-hide"
test_that("hidden fails on plain text", {
expect_error(("abc"), "Invalid shiny tag")
})
test_that("hidden works on simple div", {
tag <- (shiny::div("abc"))$attribs$class
classes <- unlist(strsplit(tag, " "))
expect_true(clsName %in% classes)
})
test_that("hidden works on complex div", {
tag <- (shiny::div(shiny::span("abc")))$attribs$class
classes <- unlist(strsplit(tag, " "))
expect_true(clsName %in% classes)
})
test_that("hidden works when div already contains a class", {
expect_true(TRUE)
# TODO if a tag has more than one class, $attribs stores each class as its
# own element in the list. This means the list has multiple elements with the
# same name. This feels wrong - $atrrbis$class should either return a vector
# of classes or a string containing all the classes with a space separation.
# Until that's fixed, I'm not checking for multiple classes because
# $attribs$class only returns the first class
# I sent a pull request to htmltools to fix this, still waiting for them
# to incorporate my code
#expect_true(clsName %in% hidden(div("abc", class = "test"))$attribs$class)
})
test_that("hidden errors when one of multiple tags is not a tag", {
expect_error((shiny::p("abc"), "abc"), "Invalid shiny tag")
expect_error((list(shiny::p("abc"), "abc")), "Invalid shiny tag")
expect_error((shiny::tagList(shiny::p("abc"), "abc")), "Invalid shiny tag")
})
test_that("hidden works when given multiple tags", {
res <- (shiny::p("abc"), shiny::span("abc"))
expect_equal(length(res), 2)
expect_true(clsName %in% getClasses(res[[1]]))
expect_true(clsName %in% getClasses(res[[2]]))
})
test_that("hidden works when given list", {
res <- (list(shiny::p("abc"), shiny::span("abc")))
expect_equal(length(res), 2)
expect_true(clsName %in% getClasses(res[[1]]))
expect_true(clsName %in% getClasses(res[[2]]))
})
test_that("hidden works when given tagList", {
res <- (shiny::tagList(shiny::p("abc"), shiny::span("abc")))
expect_equal(length(res), 2)
expect_true(clsName %in% getClasses(res[[1]]))
expect_true(clsName %in% getClasses(res[[2]]))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.