library(testthat)
# most common expectations:
# equality: expect_equal() and expect_identical()
# regexp: expect_match()
# catch-all: expect_true() and expect_false()
# console output: expect_output()
# messages: expect_message()
# warning: expect_warning()
# errors: expect_error()
escapeString <- function(s) {
t <- gsub("(\\\\)", "\\\\\\\\", s)
t <- gsub("(\n)", "\\\\n", t)
t <- gsub("(\r)", "\\\\r", t)
t <- gsub("(\")", "\\\\\"", t)
return(t)
}
prepStr <- function(s, varName="html") {
t <- escapeString(s)
u <- eval(parse(text=paste0("\"", t, "\"")))
if(s!=u) stop("Unable to escape string!")
if(is.null(varName)) varName <- "html"
t <- paste0("\t", varName, " <- \"", t, "\"")
utils::writeClipboard(t)
return(invisible())
}
context("GET CELLS TESTS")
test_that("getting a mixture of rows, columns and cells when `specifyCellsAsList=TRUE`", {
# aggregate the sample data to make a small data frame
library(basictabler)
library(dplyr)
tocsummary <- bhmsummary %>%
group_by(TOC) %>%
summarise(OnTimeArrivals=sum(OnTimeArrivals),
OnTimeDepartures=sum(OnTimeDepartures),
TotalTrains=sum(TrainCount)) %>%
ungroup() %>%
mutate(OnTimeArrivalPercent=OnTimeArrivals/TotalTrains*100,
OnTimeDeparturePercent=OnTimeDepartures/TotalTrains*100) %>%
arrange(TOC)
# formatting values (explained in the introduction vignette)
columnFormats=list(NULL, list(big.mark=","), list(big.mark=","), list(big.mark=","), "%.1f", "%.1f")
# create the table
tbl <- BasicTable$new(compatibility=list(headerCellsAsTD=TRUE))
tbl$addData(tocsummary, firstColumnAsRowHeaders=TRUE,
explicitColumnHeaders=c("TOC", "On-Time Arrivals", "On-Time Departures",
"Total Trains", "On-Time Arrival %", "On-Time Departure %"),
columnFormats=columnFormats)
# get the cells and apply styling
highlight <- tbl$createInlineStyle(declarations=list("background-color"="#FFCC66"))
cells <- tbl$getCells(specifyCellsAsList=TRUE, rowNumbers=2, columnNumbers=4, cellCoordinates=list(c(5, 6)))
lst <- lapply(cells, function(cell) {cell$style <- highlight})
# tbl$renderTable()
# prepStr(tbl$print(asCharacter=TRUE), "str")
# prepStr(as.character(tbl$getHtml()))
str <- " TOC On-Time Arrivals On-Time Departures Total Trains On-Time Arrival % On-Time Departure % \nArriva Trains Wales 1,404 2,348 3,909 35.9 60.1 \n CrossCountry 5,799 10,246 22,928 25.3 44.7 \n London Midland 13,036 17,184 48,279 27.0 35.6 \n Virgin Trains 3,289 3,864 8,594 38.3 45.0 "
html <- "<table class=\"Table\">\n <tr>\n <td class=\"ColumnHeader\">TOC</td>\n <td class=\"ColumnHeader\">On-Time Arrivals</td>\n <td class=\"ColumnHeader\">On-Time Departures</td>\n <td class=\"ColumnHeader\" style=\"background-color: #FFCC66; \">Total Trains</td>\n <td class=\"ColumnHeader\">On-Time Arrival %</td>\n <td class=\"ColumnHeader\">On-Time Departure %</td>\n </tr>\n <tr>\n <td class=\"RowHeader\" style=\"background-color: #FFCC66; \">Arriva Trains Wales</td>\n <td class=\"Cell\" style=\"background-color: #FFCC66; \">1,404</td>\n <td class=\"Cell\" style=\"background-color: #FFCC66; \">2,348</td>\n <td class=\"Cell\" style=\"background-color: #FFCC66; \">3,909</td>\n <td class=\"Cell\" style=\"background-color: #FFCC66; \">35.9</td>\n <td class=\"Cell\" style=\"background-color: #FFCC66; \">60.1</td>\n </tr>\n <tr>\n <td class=\"RowHeader\">CrossCountry</td>\n <td class=\"Cell\">5,799</td>\n <td class=\"Cell\">10,246</td>\n <td class=\"Cell\" style=\"background-color: #FFCC66; \">22,928</td>\n <td class=\"Cell\">25.3</td>\n <td class=\"Cell\">44.7</td>\n </tr>\n <tr>\n <td class=\"RowHeader\">London Midland</td>\n <td class=\"Cell\">13,036</td>\n <td class=\"Cell\">17,184</td>\n <td class=\"Cell\" style=\"background-color: #FFCC66; \">48,279</td>\n <td class=\"Cell\">27.0</td>\n <td class=\"Cell\">35.6</td>\n </tr>\n <tr>\n <td class=\"RowHeader\">Virgin Trains</td>\n <td class=\"Cell\">3,289</td>\n <td class=\"Cell\">3,864</td>\n <td class=\"Cell\" style=\"background-color: #FFCC66; \">8,594</td>\n <td class=\"Cell\">38.3</td>\n <td class=\"Cell\" style=\"background-color: #FFCC66; \">45.0</td>\n </tr>\n</table>"
expect_identical(tbl$print(asCharacter=TRUE), str)
expect_identical(as.character(tbl$getHtml()), html)
})
test_that("getting a mixture of rows, columns and cells when `specifyCellsAsList=FALSE`", {
# aggregate the sample data to make a small data frame
library(basictabler)
library(dplyr)
tocsummary <- bhmsummary %>%
group_by(TOC) %>%
summarise(OnTimeArrivals=sum(OnTimeArrivals),
OnTimeDepartures=sum(OnTimeDepartures),
TotalTrains=sum(TrainCount)) %>%
ungroup() %>%
mutate(OnTimeArrivalPercent=OnTimeArrivals/TotalTrains*100,
OnTimeDeparturePercent=OnTimeDepartures/TotalTrains*100) %>%
arrange(TOC)
# formatting values (explained in the introduction vignette)
columnFormats=list(NULL, list(big.mark=","), list(big.mark=","), list(big.mark=","), "%.1f", "%.1f")
# create the table
tbl <- BasicTable$new(compatibility=list(headerCellsAsTD=TRUE))
tbl$addData(tocsummary, firstColumnAsRowHeaders=TRUE,
explicitColumnHeaders=c("TOC", "On-Time Arrivals", "On-Time Departures",
"Total Trains", "On-Time Arrival %", "On-Time Departure %"),
columnFormats=columnFormats)
# get the cells and apply styling
highlight <- tbl$createInlineStyle(declarations=list("background-color"="#00FF00"))
cells <- tbl$getCells(specifyCellsAsList=FALSE, rowNumbers=c(2, NA, 5), columnNumbers=c(NA, 4, 6))
lst <- lapply(cells, function(cell) {cell$style <- highlight})
# tbl$renderTable()
# prepStr(tbl$print(asCharacter=TRUE), "str")
# prepStr(as.character(tbl$getHtml()))
str <- " TOC On-Time Arrivals On-Time Departures Total Trains On-Time Arrival % On-Time Departure % \nArriva Trains Wales 1,404 2,348 3,909 35.9 60.1 \n CrossCountry 5,799 10,246 22,928 25.3 44.7 \n London Midland 13,036 17,184 48,279 27.0 35.6 \n Virgin Trains 3,289 3,864 8,594 38.3 45.0 "
html <- "<table class=\"Table\">\n <tr>\n <td class=\"ColumnHeader\">TOC</td>\n <td class=\"ColumnHeader\">On-Time Arrivals</td>\n <td class=\"ColumnHeader\">On-Time Departures</td>\n <td class=\"ColumnHeader\" style=\"background-color: #00FF00; \">Total Trains</td>\n <td class=\"ColumnHeader\">On-Time Arrival %</td>\n <td class=\"ColumnHeader\">On-Time Departure %</td>\n </tr>\n <tr>\n <td class=\"RowHeader\" style=\"background-color: #00FF00; \">Arriva Trains Wales</td>\n <td class=\"Cell\" style=\"background-color: #00FF00; \">1,404</td>\n <td class=\"Cell\" style=\"background-color: #00FF00; \">2,348</td>\n <td class=\"Cell\" style=\"background-color: #00FF00; \">3,909</td>\n <td class=\"Cell\" style=\"background-color: #00FF00; \">35.9</td>\n <td class=\"Cell\" style=\"background-color: #00FF00; \">60.1</td>\n </tr>\n <tr>\n <td class=\"RowHeader\">CrossCountry</td>\n <td class=\"Cell\">5,799</td>\n <td class=\"Cell\">10,246</td>\n <td class=\"Cell\" style=\"background-color: #00FF00; \">22,928</td>\n <td class=\"Cell\">25.3</td>\n <td class=\"Cell\">44.7</td>\n </tr>\n <tr>\n <td class=\"RowHeader\">London Midland</td>\n <td class=\"Cell\">13,036</td>\n <td class=\"Cell\">17,184</td>\n <td class=\"Cell\" style=\"background-color: #00FF00; \">48,279</td>\n <td class=\"Cell\">27.0</td>\n <td class=\"Cell\">35.6</td>\n </tr>\n <tr>\n <td class=\"RowHeader\">Virgin Trains</td>\n <td class=\"Cell\">3,289</td>\n <td class=\"Cell\">3,864</td>\n <td class=\"Cell\" style=\"background-color: #00FF00; \">8,594</td>\n <td class=\"Cell\">38.3</td>\n <td class=\"Cell\" style=\"background-color: #00FF00; \">45.0</td>\n </tr>\n</table>"
expect_identical(tbl$print(asCharacter=TRUE), str)
expect_identical(as.character(tbl$getHtml()), html)
})
test_that("getting a mixture of rows, columns and cells when `matchMode=\"Combinations\"` and specifyCellsAsList=TRUE`", {
# aggregate the sample data to make a small data frame
library(basictabler)
library(dplyr)
tocsummary <- bhmsummary %>%
group_by(TOC) %>%
summarise(OnTimeArrivals=sum(OnTimeArrivals),
OnTimeDepartures=sum(OnTimeDepartures),
TotalTrains=sum(TrainCount)) %>%
ungroup() %>%
mutate(OnTimeArrivalPercent=OnTimeArrivals/TotalTrains*100,
OnTimeDeparturePercent=OnTimeDepartures/TotalTrains*100) %>%
arrange(TOC)
# formatting values (explained in the introduction vignette)
columnFormats=list(NULL, list(big.mark=","), list(big.mark=","), list(big.mark=","), "%.1f", "%.1f")
# create the table
tbl <- BasicTable$new(compatibility=list(headerCellsAsTD=TRUE))
tbl$addData(tocsummary, firstColumnAsRowHeaders=TRUE,
explicitColumnHeaders=c("TOC", "On-Time Arrivals", "On-Time Departures",
"Total Trains", "On-Time Arrival %", "On-Time Departure %"),
columnFormats=columnFormats)
# get the cells and apply styling
highlight <- tbl$createInlineStyle(declarations=list("background-color"="#FFCC66"))
cells <- tbl$getCells(specifyCellsAsList=TRUE, rowNumbers=2, columnNumbers=4, cellCoordinates=list(c(5, 6)), matchMode="combinations")
lst <- lapply(cells, function(cell) {cell$style <- highlight})
# tbl$renderTable()
# prepStr(tbl$print(asCharacter=TRUE), "str")
# prepStr(as.character(tbl$getHtml()))
str <- " TOC On-Time Arrivals On-Time Departures Total Trains On-Time Arrival % On-Time Departure % \nArriva Trains Wales 1,404 2,348 3,909 35.9 60.1 \n CrossCountry 5,799 10,246 22,928 25.3 44.7 \n London Midland 13,036 17,184 48,279 27.0 35.6 \n Virgin Trains 3,289 3,864 8,594 38.3 45.0 "
html <- "<table class=\"Table\">\n <tr>\n <td class=\"ColumnHeader\">TOC</td>\n <td class=\"ColumnHeader\">On-Time Arrivals</td>\n <td class=\"ColumnHeader\">On-Time Departures</td>\n <td class=\"ColumnHeader\">Total Trains</td>\n <td class=\"ColumnHeader\">On-Time Arrival %</td>\n <td class=\"ColumnHeader\">On-Time Departure %</td>\n </tr>\n <tr>\n <td class=\"RowHeader\">Arriva Trains Wales</td>\n <td class=\"Cell\">1,404</td>\n <td class=\"Cell\">2,348</td>\n <td class=\"Cell\" style=\"background-color: #FFCC66; \">3,909</td>\n <td class=\"Cell\">35.9</td>\n <td class=\"Cell\">60.1</td>\n </tr>\n <tr>\n <td class=\"RowHeader\">CrossCountry</td>\n <td class=\"Cell\">5,799</td>\n <td class=\"Cell\">10,246</td>\n <td class=\"Cell\">22,928</td>\n <td class=\"Cell\">25.3</td>\n <td class=\"Cell\">44.7</td>\n </tr>\n <tr>\n <td class=\"RowHeader\">London Midland</td>\n <td class=\"Cell\">13,036</td>\n <td class=\"Cell\">17,184</td>\n <td class=\"Cell\">48,279</td>\n <td class=\"Cell\">27.0</td>\n <td class=\"Cell\">35.6</td>\n </tr>\n <tr>\n <td class=\"RowHeader\">Virgin Trains</td>\n <td class=\"Cell\">3,289</td>\n <td class=\"Cell\">3,864</td>\n <td class=\"Cell\">8,594</td>\n <td class=\"Cell\">38.3</td>\n <td class=\"Cell\" style=\"background-color: #FFCC66; \">45.0</td>\n </tr>\n</table>"
expect_identical(tbl$print(asCharacter=TRUE), str)
expect_identical(as.character(tbl$getHtml()), html)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.