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) { t <- escapeString(s) u <- eval(parse(text=paste0("\"", t, "\""))) if(s!=u) stop("Unable to escape string!") t <- paste0("\thtml <- \"", t, "\"") utils::writeClipboard(t) return(invisible()) } evaluationMode <- "sequential" processingLibrary <- "dplyr" description <- "test: sequential dplyr" countFunction <- "n()" isDevelopmentVersion <- (length(strsplit(packageDescription("pivottabler")$Version, "\\.")[[1]]) > 3) testScenarios <- function(description="test", releaseEvaluationMode="batch", releaseProcessingLibrary="dplyr", runAllForReleaseVersion=FALSE) { isDevelopmentVersion <- (length(strsplit(packageDescription("pivottabler")$Version, "\\.")[[1]]) > 3) if(isDevelopmentVersion||runAllForReleaseVersion) { evaluationModes <- c("sequential", "batch") processingLibraries <- c("dplyr", "data.table") } else { evaluationModes <- releaseEvaluationMode processingLibraries <- releaseProcessingLibrary } testCount <- length(evaluationModes)*length(processingLibraries) c1 <- character(testCount) c2 <- character(testCount) c3 <- character(testCount) c4 <- character(testCount) testCount <- 0 for(evaluationMode in evaluationModes) for(processingLibrary in processingLibraries) { testCount <- testCount + 1 c1[testCount] <- evaluationMode c2[testCount] <- processingLibrary c3[testCount] <- paste0(description, ": ", evaluationMode, " ", processingLibrary) c4[testCount] <- ifelse(processingLibrary=="data.table", ".N", "n()") } df <- data.frame(evaluationMode=c1, processingLibrary=c2, description=c3, countFunction=c4, stringsAsFactors=FALSE) return(df) } context("BASIC LAYOUT TESTS") scenarios <- testScenarios("basic layout tests: empty pivot") for(i in 1:nrow(scenarios)) { evaluationMode <- scenarios$evaluationMode[i] processingLibrary <- scenarios$processingLibrary[i] description <- scenarios$description[i] countFunction <- scenarios$countFunction[i] test_that(description, { skip_on_cran() library(pivottabler) pt <- PivotTable$new(processingLibrary=processingLibrary, evaluationMode=evaluationMode, compatibility=list(totalStyleIsCellStyle=TRUE, explicitHeaderSpansOfOne=TRUE)) pt$evaluatePivot() # pt$renderPivot() # prepStr(as.character(pt$getHtml())) # prepStr(pt$print(asCharacter=TRUE)) str <- " " html <- "\n \n \n \n
(no data)
" expect_identical(pt$print(asCharacter=TRUE), str) expect_identical(as.character(pt$getHtml()), html) }) } scenarios <- testScenarios("basic layout tests: empty pivot plus data") for(i in 1:nrow(scenarios)) { if(!isDevelopmentVersion) break evaluationMode <- scenarios$evaluationMode[i] processingLibrary <- scenarios$processingLibrary[i] description <- scenarios$description[i] countFunction <- scenarios$countFunction[i] test_that(description, { library(pivottabler) pt <- PivotTable$new(processingLibrary=processingLibrary, evaluationMode=evaluationMode, compatibility=list(totalStyleIsCellStyle=TRUE, explicitHeaderSpansOfOne=TRUE)) pt$addData(bhmtrains) pt$evaluatePivot() # pt$renderPivot() # prepStr(as.character(pt$getHtml())) # prepStr(pt$print(asCharacter=TRUE)) str <- " " html <- "\n \n \n \n
(no data)
" expect_identical(pt$print(asCharacter=TRUE), str) expect_identical(as.character(pt$getHtml()), html) }) } scenarios <- testScenarios("basic layout tests: just a total") for(i in 1:nrow(scenarios)) { evaluationMode <- scenarios$evaluationMode[i] processingLibrary <- scenarios$processingLibrary[i] description <- scenarios$description[i] countFunction <- scenarios$countFunction[i] test_that(description, { skip_on_cran() library(pivottabler) pt <- PivotTable$new(processingLibrary=processingLibrary, evaluationMode=evaluationMode, compatibility=list(totalStyleIsCellStyle=TRUE, explicitHeaderSpansOfOne=TRUE)) pt$addData(bhmtrains) pt$defineCalculation(calculationName="TotalTrains", summariseExpression=countFunction) pt$evaluatePivot() # pt$renderPivot() # sum(pt$cells$asMatrix()) # prepStr(as.character(pt$getHtml())) # prepStr(pt$print(asCharacter=TRUE)) str <- " TotalTrains \n 83710 " html <- "\n \n \n \n \n \n \n \n \n
 TotalTrains
 83710
" expect_equal(sum(pt$cells$asMatrix()), 83710) expect_identical(pt$print(asCharacter=TRUE), str) expect_identical(as.character(pt$getHtml()), html) }) } scenarios <- testScenarios("basic layout tests: two measures") for(i in 1:nrow(scenarios)) { evaluationMode <- scenarios$evaluationMode[i] processingLibrary <- scenarios$processingLibrary[i] description <- scenarios$description[i] countFunction <- scenarios$countFunction[i] test_that(description, { skip_on_cran() library(pivottabler) pt <- PivotTable$new(processingLibrary=processingLibrary, evaluationMode=evaluationMode, compatibility=list(totalStyleIsCellStyle=TRUE, explicitHeaderSpansOfOne=TRUE)) pt$addData(bhmtrains) pt$defineCalculation(calculationName="TotalTrains", summariseExpression=countFunction) pt$defineCalculation(calculationName="MaxSchedSpeed", summariseExpression="max(SchedSpeedMPH, na.rm=TRUE)") pt$evaluatePivot() # pt$renderPivot() # sum(pt$cells$asMatrix()) # prepStr(as.character(pt$getHtml())) # prepStr(pt$print(asCharacter=TRUE)) str <- " TotalTrains MaxSchedSpeed \n 83710 125 " html <- "\n \n \n \n \n \n \n \n \n \n \n
 TotalTrainsMaxSchedSpeed
 83710125
" expect_equal(sum(pt$cells$asMatrix()), 83835) expect_identical(pt$print(asCharacter=TRUE), str) expect_identical(as.character(pt$getHtml()), html) }) } scenarios <- testScenarios("basic layout tests: rows only") for(i in 1:nrow(scenarios)) { evaluationMode <- scenarios$evaluationMode[i] processingLibrary <- scenarios$processingLibrary[i] description <- scenarios$description[i] countFunction <- scenarios$countFunction[i] test_that(description, { skip_on_cran() library(pivottabler) pt <- PivotTable$new(processingLibrary=processingLibrary, evaluationMode=evaluationMode, compatibility=list(totalStyleIsCellStyle=TRUE)) pt$addData(bhmtrains) pt$addRowDataGroups("TOC") pt$evaluatePivot() # pt$renderPivot() # prepStr(as.character(pt$getHtml())) # prepStr(pt$print(asCharacter=TRUE)) str <- "Arriva Trains Wales \nCrossCountry \nLondon Midland \nVirgin Trains \nTotal " html <- "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
  
Arriva Trains Wales
CrossCountry
London Midland
Virgin Trains
Total
" expect_identical(pt$print(asCharacter=TRUE), str) expect_identical(as.character(pt$getHtml()), html) }) } scenarios <- testScenarios("basic layout tests: rows plus total") for(i in 1:nrow(scenarios)) { evaluationMode <- scenarios$evaluationMode[i] processingLibrary <- scenarios$processingLibrary[i] description <- scenarios$description[i] countFunction <- scenarios$countFunction[i] test_that(description, { skip_on_cran() library(pivottabler) pt <- PivotTable$new(processingLibrary=processingLibrary, evaluationMode=evaluationMode, compatibility=list(totalStyleIsCellStyle=TRUE, explicitHeaderSpansOfOne=TRUE)) pt$addData(bhmtrains) pt$addRowDataGroups("TOC") pt$defineCalculation(calculationName="TotalTrains", summariseExpression=countFunction) pt$evaluatePivot() # pt$renderPivot() # sum(pt$cells$asMatrix()) # prepStr(as.character(pt$getHtml())) # prepStr(pt$print(asCharacter=TRUE)) str <- " TotalTrains \nArriva Trains Wales 3909 \nCrossCountry 22928 \nLondon Midland 48279 \nVirgin Trains 8594 \nTotal 83710 " html <- "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 TotalTrains
Arriva Trains Wales3909
CrossCountry22928
London Midland48279
Virgin Trains8594
Total83710
" expect_equal(sum(pt$cells$asMatrix()), 167420) expect_identical(pt$print(asCharacter=TRUE), str) expect_identical(as.character(pt$getHtml()), html) }) } scenarios <- testScenarios("basic layout tests: rows plus two measures") for(i in 1:nrow(scenarios)) { if(!isDevelopmentVersion) break evaluationMode <- scenarios$evaluationMode[i] processingLibrary <- scenarios$processingLibrary[i] description <- scenarios$description[i] countFunction <- scenarios$countFunction[i] test_that(description, { skip_on_cran() library(pivottabler) pt <- PivotTable$new(processingLibrary=processingLibrary, evaluationMode=evaluationMode, compatibility=list(totalStyleIsCellStyle=TRUE, explicitHeaderSpansOfOne=TRUE)) pt$addData(bhmtrains) pt$addRowDataGroups("TOC") pt$defineCalculation(calculationName="TotalTrains", summariseExpression=countFunction) pt$defineCalculation(calculationName="MaxSchedSpeed", summariseExpression="max(SchedSpeedMPH, na.rm=TRUE)") pt$evaluatePivot() # pt$renderPivot() # sum(pt$cells$asMatrix()) # prepStr(as.character(pt$getHtml())) # prepStr(pt$print(asCharacter=TRUE)) str <- " TotalTrains MaxSchedSpeed \nArriva Trains Wales 3909 90 \nCrossCountry 22928 125 \nLondon Midland 48279 110 \nVirgin Trains 8594 125 \nTotal 83710 125 " html <- "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 TotalTrainsMaxSchedSpeed
Arriva Trains Wales390990
CrossCountry22928125
London Midland48279110
Virgin Trains8594125
Total83710125
" expect_equal(sum(pt$cells$asMatrix()), 167995) expect_identical(pt$print(asCharacter=TRUE), str) expect_identical(as.character(pt$getHtml()), html) }) } scenarios <- testScenarios("basic layout tests: columns only") for(i in 1:nrow(scenarios)) { evaluationMode <- scenarios$evaluationMode[i] processingLibrary <- scenarios$processingLibrary[i] description <- scenarios$description[i] countFunction <- scenarios$countFunction[i] test_that(description, { skip_on_cran() library(pivottabler) pt <- PivotTable$new(processingLibrary=processingLibrary, evaluationMode=evaluationMode, compatibility=list(totalStyleIsCellStyle=TRUE, explicitHeaderSpansOfOne=TRUE)) pt$addData(bhmtrains) pt$addColumnDataGroups("TOC") pt$evaluatePivot() # pt$renderPivot() # prepStr(as.character(pt$getHtml())) # prepStr(pt$print(asCharacter=TRUE)) str <- " Arriva Trains Wales CrossCountry London Midland Virgin Trains Total \n " html <- "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 Arriva Trains WalesCrossCountryLondon MidlandVirgin TrainsTotal
 
" expect_identical(pt$print(asCharacter=TRUE), str) expect_identical(as.character(pt$getHtml()), html) }) } scenarios <- testScenarios("basic layout tests: columns plus total") for(i in 1:nrow(scenarios)) { evaluationMode <- scenarios$evaluationMode[i] processingLibrary <- scenarios$processingLibrary[i] description <- scenarios$description[i] countFunction <- scenarios$countFunction[i] test_that(description, { skip_on_cran() library(pivottabler) pt <- PivotTable$new(processingLibrary=processingLibrary, evaluationMode=evaluationMode, compatibility=list(totalStyleIsCellStyle=TRUE, explicitHeaderSpansOfOne=TRUE)) pt$addData(bhmtrains) pt$addColumnDataGroups("TOC") pt$defineCalculation(calculationName="TotalTrains", summariseExpression=countFunction) pt$evaluatePivot() # pt$renderPivot() # sum(pt$cells$asMatrix()) # prepStr(as.character(pt$getHtml())) # prepStr(pt$print(asCharacter=TRUE)) str <- " Arriva Trains Wales CrossCountry London Midland Virgin Trains Total \n 3909 22928 48279 8594 83710 " html <- "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 Arriva Trains WalesCrossCountryLondon MidlandVirgin TrainsTotal
 39092292848279859483710
" expect_equal(sum(pt$cells$asMatrix()), 167420) expect_identical(pt$print(asCharacter=TRUE), str) expect_identical(as.character(pt$getHtml()), html) }) } scenarios <- testScenarios("basic layout tests: columns plus two totals") for(i in 1:nrow(scenarios)) { if(!isDevelopmentVersion) break evaluationMode <- scenarios$evaluationMode[i] processingLibrary <- scenarios$processingLibrary[i] description <- scenarios$description[i] countFunction <- scenarios$countFunction[i] test_that(description, { skip_on_cran() library(pivottabler) pt <- PivotTable$new(processingLibrary=processingLibrary, evaluationMode=evaluationMode, compatibility=list(totalStyleIsCellStyle=TRUE, explicitHeaderSpansOfOne=TRUE)) pt$addData(bhmtrains) pt$addColumnDataGroups("TOC") pt$defineCalculation(calculationName="TotalTrains", summariseExpression=countFunction) pt$defineCalculation(calculationName="MaxSchedSpeed", summariseExpression="max(SchedSpeedMPH, na.rm=TRUE)") pt$evaluatePivot() # pt$renderPivot() # sum(pt$cells$asMatrix()) # prepStr(as.character(pt$getHtml())) # prepStr(pt$print(asCharacter=TRUE)) str <- " Arriva Trains Wales CrossCountry London Midland Virgin Trains Total \n TotalTrains MaxSchedSpeed TotalTrains MaxSchedSpeed TotalTrains MaxSchedSpeed TotalTrains MaxSchedSpeed TotalTrains MaxSchedSpeed \n 3909 90 22928 125 48279 110 8594 125 83710 125 " html <- "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 Arriva Trains WalesCrossCountryLondon MidlandVirgin TrainsTotal
TotalTrainsMaxSchedSpeedTotalTrainsMaxSchedSpeedTotalTrainsMaxSchedSpeedTotalTrainsMaxSchedSpeedTotalTrainsMaxSchedSpeed
 3909902292812548279110859412583710125
" expect_equal(sum(pt$cells$asMatrix()), 167995) expect_identical(pt$print(asCharacter=TRUE), str) expect_identical(as.character(pt$getHtml()), html) }) } scenarios <- testScenarios("basic layout tests: rows and columns only") for(i in 1:nrow(scenarios)) { if(!isDevelopmentVersion) break evaluationMode <- scenarios$evaluationMode[i] processingLibrary <- scenarios$processingLibrary[i] description <- scenarios$description[i] countFunction <- scenarios$countFunction[i] test_that(description, { library(pivottabler) pt <- PivotTable$new(processingLibrary=processingLibrary, evaluationMode=evaluationMode, compatibility=list(totalStyleIsCellStyle=TRUE, explicitHeaderSpansOfOne=TRUE)) pt$addData(bhmtrains) pt$addColumnDataGroups("TrainCategory") pt$addRowDataGroups("TOC") pt$evaluatePivot() # pt$renderPivot() # prepStr(as.character(pt$getHtml())) # prepStr(pt$print(asCharacter=TRUE)) str <- " Express Passenger Ordinary Passenger Total \nArriva Trains Wales \nCrossCountry \nLondon Midland \nVirgin Trains \nTotal " html <- "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 Express PassengerOrdinary PassengerTotal
Arriva Trains Wales
CrossCountry
London Midland
Virgin Trains
Total
" expect_identical(pt$print(asCharacter=TRUE), str) expect_identical(as.character(pt$getHtml()), html) }) } scenarios <- testScenarios("basic layout tests: rows, columns and calculation") for(i in 1:nrow(scenarios)) { if(!isDevelopmentVersion) break evaluationMode <- scenarios$evaluationMode[i] processingLibrary <- scenarios$processingLibrary[i] description <- scenarios$description[i] countFunction <- scenarios$countFunction[i] test_that(description, { library(pivottabler) pt <- PivotTable$new(processingLibrary=processingLibrary, evaluationMode=evaluationMode, compatibility=list(totalStyleIsCellStyle=TRUE, explicitHeaderSpansOfOne=TRUE)) pt$addData(bhmtrains) pt$addColumnDataGroups("TrainCategory") pt$addRowDataGroups("TOC") pt$defineCalculation(calculationName="TotalTrains", summariseExpression=countFunction) pt$evaluatePivot() # pt$renderPivot() # sum(pt$cells$asMatrix(), na.rm=TRUE) # prepStr(as.character(pt$getHtml())) # prepStr(pt$print(asCharacter=TRUE)) str <- " Express Passenger Ordinary Passenger Total \nArriva Trains Wales 3079 830 3909 \nCrossCountry 22865 63 22928 \nLondon Midland 14487 33792 48279 \nVirgin Trains 8594 8594 \nTotal 49025 34685 83710 " html <- "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 Express PassengerOrdinary PassengerTotal
Arriva Trains Wales30798303909
CrossCountry228656322928
London Midland144873379248279
Virgin Trains85948594
Total490253468583710
" expect_equal(sum(pt$cells$asMatrix(), na.rm=TRUE), 334840) expect_identical(pt$print(asCharacter=TRUE), str) expect_identical(as.character(pt$getHtml()), html) }) } scenarios <- testScenarios("basic layout tests: rows, columns and two calculations") for(i in 1:nrow(scenarios)) { evaluationMode <- scenarios$evaluationMode[i] processingLibrary <- scenarios$processingLibrary[i] description <- scenarios$description[i] countFunction <- scenarios$countFunction[i] test_that(description, { skip_on_cran() library(pivottabler) pt <- PivotTable$new(processingLibrary=processingLibrary, evaluationMode=evaluationMode, compatibility=list(totalStyleIsCellStyle=TRUE, explicitHeaderSpansOfOne=TRUE)) pt$addData(bhmtrains) pt$addColumnDataGroups("TrainCategory") pt$addRowDataGroups("TOC") pt$defineCalculation(calculationName="TotalTrains", summariseExpression=countFunction) pt$defineCalculation(calculationName="MaxSchedSpeed", summariseExpression="max(SchedSpeedMPH, na.rm=TRUE)") pt$evaluatePivot() # pt$renderPivot() # sum(pt$cells$asMatrix(), na.rm=TRUE) # prepStr(as.character(pt$getHtml())) # prepStr(pt$print(asCharacter=TRUE)) str <- " Express Passenger Ordinary Passenger Total \n TotalTrains MaxSchedSpeed TotalTrains MaxSchedSpeed TotalTrains MaxSchedSpeed \nArriva Trains Wales 3079 90 830 90 3909 90 \nCrossCountry 22865 125 63 100 22928 125 \nLondon Midland 14487 110 33792 100 48279 110 \nVirgin Trains 8594 125 8594 125 \nTotal 49025 125 34685 100 83710 125 " html <- "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 Express PassengerOrdinary PassengerTotal
TotalTrainsMaxSchedSpeedTotalTrainsMaxSchedSpeedTotalTrainsMaxSchedSpeed
Arriva Trains Wales30799083090390990
CrossCountry228651256310022928125
London Midland144871103379210048279110
Virgin Trains85941258594125
Total490251253468510083710125
" expect_equal(sum(pt$cells$asMatrix(), na.rm=TRUE), 336380) expect_identical(pt$print(asCharacter=TRUE), str) expect_identical(as.character(pt$getHtml()), html) }) } scenarios <- testScenarios("basic layout tests: columns plus total on row") for(i in 1:nrow(scenarios)) { if(!isDevelopmentVersion) break evaluationMode <- scenarios$evaluationMode[i] processingLibrary <- scenarios$processingLibrary[i] description <- scenarios$description[i] countFunction <- scenarios$countFunction[i] test_that(description, { skip_on_cran() library(pivottabler) pt <- PivotTable$new(processingLibrary=processingLibrary, evaluationMode=evaluationMode, compatibility=list(totalStyleIsCellStyle=TRUE, explicitHeaderSpansOfOne=TRUE)) pt$addData(bhmtrains) pt$addColumnDataGroups("TOC") pt$defineCalculation(calculationName="TotalTrains", summariseExpression=countFunction) pt$addRowCalculationGroups() pt$evaluatePivot() # pt$renderPivot() # sum(pt$cells$asMatrix()) # prepStr(as.character(pt$getHtml())) # prepStr(pt$print(asCharacter=TRUE)) str <- " Arriva Trains Wales CrossCountry London Midland Virgin Trains Total \nTotalTrains 3909 22928 48279 8594 83710 " html <- "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 Arriva Trains WalesCrossCountryLondon MidlandVirgin TrainsTotal
TotalTrains39092292848279859483710
" expect_equal(sum(pt$cells$asMatrix()), 167420) expect_identical(pt$print(asCharacter=TRUE), str) expect_identical(as.character(pt$getHtml()), html) }) } scenarios <- testScenarios("basic layout tests: columns plus two totals on rows") for(i in 1:nrow(scenarios)) { if(!isDevelopmentVersion) break evaluationMode <- scenarios$evaluationMode[i] processingLibrary <- scenarios$processingLibrary[i] description <- scenarios$description[i] countFunction <- scenarios$countFunction[i] test_that(description, { library(pivottabler) pt <- PivotTable$new(processingLibrary=processingLibrary, evaluationMode=evaluationMode, compatibility=list(totalStyleIsCellStyle=TRUE, explicitHeaderSpansOfOne=TRUE)) pt$addData(bhmtrains) pt$addColumnDataGroups("TOC") pt$defineCalculation(calculationName="TotalTrains", summariseExpression=countFunction) pt$defineCalculation(calculationName="MaxSchedSpeed", summariseExpression="max(SchedSpeedMPH, na.rm=TRUE)") pt$addRowCalculationGroups() pt$evaluatePivot() # pt$renderPivot() # sum(pt$cells$asMatrix()) # prepStr(as.character(pt$getHtml())) # prepStr(pt$print(asCharacter=TRUE)) str <- " Arriva Trains Wales CrossCountry London Midland Virgin Trains Total \nTotalTrains 3909 22928 48279 8594 83710 \nMaxSchedSpeed 90 125 110 125 125 " html <- "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 Arriva Trains WalesCrossCountryLondon MidlandVirgin TrainsTotal
TotalTrains39092292848279859483710
MaxSchedSpeed90125110125125
" expect_equal(sum(pt$cells$asMatrix()), 167995) expect_identical(pt$print(asCharacter=TRUE), str) expect_identical(as.character(pt$getHtml()), html) }) } scenarios <- testScenarios("basic layout tests: rows, columns and calculation on rows") for(i in 1:nrow(scenarios)) { if(!isDevelopmentVersion) break evaluationMode <- scenarios$evaluationMode[i] processingLibrary <- scenarios$processingLibrary[i] description <- scenarios$description[i] countFunction <- scenarios$countFunction[i] test_that(description, { library(pivottabler) pt <- PivotTable$new(processingLibrary=processingLibrary, evaluationMode=evaluationMode, compatibility=list(totalStyleIsCellStyle=TRUE, explicitHeaderSpansOfOne=TRUE)) pt$addData(bhmtrains) pt$addColumnDataGroups("TrainCategory") pt$addRowDataGroups("TOC") pt$defineCalculation(calculationName="TotalTrains", summariseExpression=countFunction) pt$addRowCalculationGroups() pt$evaluatePivot() # pt$renderPivot() # sum(pt$cells$asMatrix(), na.rm=TRUE) # prepStr(as.character(pt$getHtml())) # prepStr(pt$print(asCharacter=TRUE)) str <- " Express Passenger Ordinary Passenger Total \nArriva Trains Wales 3079 830 3909 \nCrossCountry 22865 63 22928 \nLondon Midland 14487 33792 48279 \nVirgin Trains 8594 8594 \nTotal 49025 34685 83710 " html <- "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 Express PassengerOrdinary PassengerTotal
Arriva Trains Wales30798303909
CrossCountry228656322928
London Midland144873379248279
Virgin Trains85948594
Total490253468583710
" expect_equal(sum(pt$cells$asMatrix(), na.rm=TRUE), 334840) expect_identical(pt$print(asCharacter=TRUE), str) expect_identical(as.character(pt$getHtml()), html) }) } scenarios <- testScenarios("basic layout tests: rows, columns and two calculations on rows") for(i in 1:nrow(scenarios)) { evaluationMode <- scenarios$evaluationMode[i] processingLibrary <- scenarios$processingLibrary[i] description <- scenarios$description[i] countFunction <- scenarios$countFunction[i] test_that(description, { skip_on_cran() library(pivottabler) pt <- PivotTable$new(processingLibrary=processingLibrary, evaluationMode=evaluationMode, compatibility=list(totalStyleIsCellStyle=TRUE, explicitHeaderSpansOfOne=TRUE)) pt$addData(bhmtrains) pt$addColumnDataGroups("TrainCategory") pt$addRowDataGroups("TOC") pt$defineCalculation(calculationName="TotalTrains", summariseExpression=countFunction) pt$defineCalculation(calculationName="MaxSchedSpeed", summariseExpression="max(SchedSpeedMPH, na.rm=TRUE)") pt$addRowCalculationGroups() pt$evaluatePivot() # pt$renderPivot() # sum(pt$cells$asMatrix(), na.rm=TRUE) # prepStr(as.character(pt$getHtml())) # prepStr(pt$print(asCharacter=TRUE)) str <- " Express Passenger Ordinary Passenger Total \nArriva Trains Wales TotalTrains 3079 830 3909 \n MaxSchedSpeed 90 90 90 \nCrossCountry TotalTrains 22865 63 22928 \n MaxSchedSpeed 125 100 125 \nLondon Midland TotalTrains 14487 33792 48279 \n MaxSchedSpeed 110 100 110 \nVirgin Trains TotalTrains 8594 8594 \n MaxSchedSpeed 125 125 \nTotal TotalTrains 49025 34685 83710 \n MaxSchedSpeed 125 100 125 " html <- "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 Express PassengerOrdinary PassengerTotal
Arriva Trains WalesTotalTrains30798303909
MaxSchedSpeed909090
CrossCountryTotalTrains228656322928
MaxSchedSpeed125100125
London MidlandTotalTrains144873379248279
MaxSchedSpeed110100110
Virgin TrainsTotalTrains85948594
MaxSchedSpeed125125
TotalTotalTrains490253468583710
MaxSchedSpeed125100125
" expect_equal(sum(pt$cells$asMatrix(), na.rm=TRUE), 336380) expect_identical(pt$print(asCharacter=TRUE), str) expect_identical(as.character(pt$getHtml()), html) }) } scenarios <- testScenarios("basic layout tests: more than 10 calculation columns") for(i in 1:nrow(scenarios)) { if(!isDevelopmentVersion) break evaluationMode <- scenarios$evaluationMode[i] processingLibrary <- scenarios$processingLibrary[i] description <- scenarios$description[i] countFunction <- scenarios$countFunction[i] test_that(description, { library(pivottabler) d <- data.frame(a=c("a","b","c"),b=c("a","b","c"), X1Qty=c(1, 2, 3), X2Qty=c(1, 2, 3), X3Qty=c(1, 2, 3), X4Qty=c(1, 2, 3), X5Qty=c(1, 2, 3), X6Qty=c(1, 2, 3), X7Qty=c(1, 2, 3), X8Qty=c(1, 2, 3), X9Qty=c(1, 2, 3), X10Qty=c(1, 2, 3), X11Qty=c(1, 2, 3), X12Qty=c(1, 2, 3)) # create the pivot table pt <- PivotTable$new(processingLibrary=processingLibrary, evaluationMode=evaluationMode) pt$addData(d) pt$addRowDataGroups("a") pt$addColumnDataGroups("b") pt$defineCalculation(calculationName="Jan Sales Qty", summariseExpression="sum(X1Qty)") pt$defineCalculation(calculationName="Feb Sales Qty", summariseExpression="sum(X2Qty)") pt$defineCalculation(calculationName="Mar Sales Qty", summariseExpression="sum(X3Qty)") pt$defineCalculation(calculationName="Apr Sales Qty", summariseExpression="sum(X4Qty)") pt$defineCalculation(calculationName="May Sales Qty", summariseExpression="sum(X5Qty)") pt$defineCalculation(calculationName="Jun Sales Qty", summariseExpression="sum(X6Qty)") pt$defineCalculation(calculationName="Jul Sales Qty", summariseExpression="sum(X7Qty)") pt$defineCalculation(calculationName="Aug Sales Qty", summariseExpression="sum(X8Qty)") pt$defineCalculation(calculationName="Sep Sales Qty", summariseExpression="sum(X9Qty)") pt$defineCalculation(calculationName="Oct Sales Qty", summariseExpression="sum(X10Qty)") pt$defineCalculation(calculationName="Nov Sales Qty", summariseExpression="sum(X11Qty)") pt$defineCalculation(calculationName="Dec Sales Qty", summariseExpression="sum(X12Qty)") pt$evaluatePivot() # pt$renderPivot() # sum(pt$cells$asMatrix(), na.rm=TRUE) # prepStr(as.character(pt$getHtml())) # prepStr(pt$print(asCharacter=TRUE)) str <- " a b c Total \n Jan Sales Qty Feb Sales Qty Mar Sales Qty Apr Sales Qty May Sales Qty Jun Sales Qty Jul Sales Qty Aug Sales Qty Sep Sales Qty Oct Sales Qty Nov Sales Qty Dec Sales Qty Jan Sales Qty Feb Sales Qty Mar Sales Qty Apr Sales Qty May Sales Qty Jun Sales Qty Jul Sales Qty Aug Sales Qty Sep Sales Qty Oct Sales Qty Nov Sales Qty Dec Sales Qty Jan Sales Qty Feb Sales Qty Mar Sales Qty Apr Sales Qty May Sales Qty Jun Sales Qty Jul Sales Qty Aug Sales Qty Sep Sales Qty Oct Sales Qty Nov Sales Qty Dec Sales Qty Jan Sales Qty Feb Sales Qty Mar Sales Qty Apr Sales Qty May Sales Qty Jun Sales Qty Jul Sales Qty Aug Sales Qty Sep Sales Qty Oct Sales Qty Nov Sales Qty Dec Sales Qty \na 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 \nb 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 \nc 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 \nTotal 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 6 6 6 6 6 6 6 6 6 6 6 6 " html <- "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 abcTotal
Jan Sales QtyFeb Sales QtyMar Sales QtyApr Sales QtyMay Sales QtyJun Sales QtyJul Sales QtyAug Sales QtySep Sales QtyOct Sales QtyNov Sales QtyDec Sales QtyJan Sales QtyFeb Sales QtyMar Sales QtyApr Sales QtyMay Sales QtyJun Sales QtyJul Sales QtyAug Sales QtySep Sales QtyOct Sales QtyNov Sales QtyDec Sales QtyJan Sales QtyFeb Sales QtyMar Sales QtyApr Sales QtyMay Sales QtyJun Sales QtyJul Sales QtyAug Sales QtySep Sales QtyOct Sales QtyNov Sales QtyDec Sales QtyJan Sales QtyFeb Sales QtyMar Sales QtyApr Sales QtyMay Sales QtyJun Sales QtyJul Sales QtyAug Sales QtySep Sales QtyOct Sales QtyNov Sales QtyDec Sales Qty
a111111111111111111111111
b222222222222222222222222
c333333333333333333333333
Total111111111111222222222222333333333333666666666666
" expect_equal(sum(pt$cells$asMatrix(), na.rm=TRUE), 288) expect_identical(pt$print(asCharacter=TRUE), str) expect_identical(as.character(pt$getHtml()), html) }) }