Nothing
context("Specs Tests")
base_path <- "c:\\packages\\libr\\tests\\testthat\\data"
base_path <- "./data"
test_that("import_spec() function works as expected.", {
is <- import_spec(col1 = "character", col2 = "integer",
na = c("NA", ""),
trim_ws = FALSE)
expect_equal(is$col_types, list(col1 = "character", col2 = "integer"))
expect_equal(is$na, c("NA", ""))
expect_equal(is$trim_ws, FALSE)
})
test_that("specs() function works as expected.", {
is1 <- import_spec(col1 = "character", col2 = "integer",
na = c("NA", "-"),
trim_ws = FALSE)
is2 <- import_spec(col1 = "numeric", col2 = "date:%d%m%Y",
na = c(" ", ""),
trim_ws = TRUE)
spcs <- specs(na = c("NA", "-", " ", ""),
trim_ws = TRUE, AB = is1, AC = is2)
expect_equal(length(spcs$specs), 2)
expect_equal(spcs$na, c("NA", "-", " ", ""))
expect_equal(spcs$trim_ws, TRUE)
expect_equal(spcs$specs$AB$trim_ws, FALSE)
expect_equal(spcs$specs$AB$col_types[[1]], "character")
expect_equal(spcs$specs$AC$col_types[[1]], "numeric")
s1 <- capture.output(print(spcs))
expect_equal(length(s1) > 0, TRUE)
s2 <- capture.output(print(spcs, verbose = TRUE))
expect_equal(length(s1) > 0, TRUE)
})
test_that("write_specs() and read_specs() functions works as expected.", {
is1 <- import_spec(col1 = "character", col2 = "integer",
na = c("NA", "-"),
trim_ws = FALSE)
is2 <- import_spec(col1 = "numeric", col2 = "date:%d%m%Y",
na = c(" ", ""),
trim_ws = TRUE)
spcs <- specs(na = c("NA", "-", " ", ""),
trim_ws = TRUE, AB = is1, AC = is2)
tmp <- tempdir()
pth2 <- write.specs(spcs, tmp)
fe <- file.exists(file.path(tmp, "spcs.specs"))
expect_equal(fe, TRUE)
spcs2 <- read.specs(pth2)
expect_equal(length(spcs2$specs), 2)
expect_equal(spcs2$na, c("NA", "-", " ", ""))
expect_equal(spcs2$trim_ws, TRUE)
expect_equal(spcs2$specs$AB$trim_ws, FALSE)
expect_equal(spcs2$specs$AB$col_types[[1]], "character")
expect_equal(spcs2$specs$AC$col_types[[1]], "numeric")
spcs3 <- read.specs(tmp)
expect_equal(length(spcs3$specs), 2)
expect_error(write.specs("fork"))
expect_error(read.specs("fork"))
if (fe)
unlink(pth2)
})
test_that("get_colspec_xlsx() works as expected.", {
expect_error(get_colspec_xlsx(c(one = "character",
two = "integer",
four = "date:%d%m%y"),
5, c("one", "two", "three", "four")))
res <- get_colspec_xlsx(c(one = "character",
two = "integer",
four = "date:%d%m%y"),
4, c("one", "two", "three", "four"))
expect_equal(res[["one"]], "text")
expect_equal(res[["two"]], "numeric")
expect_equal(res[["three"]], "guess")
expect_equal(res[["four"]], "date")
})
test_that("get_colspec_csv() works as expected.", {
res <- get_colspec_csv(c(one = "character",
two = "integer",
four = "date=%d%m%y",
five = "numeric",
six = "guess",
seven = "time=%H:%M:%S",
eight = "datetime=%d%m%y %H:%M:%S",
nine = "logical"))
expect_equal(res$cols[["one"]], col_character())
expect_equal(res$cols[["two"]], col_integer())
expect_equal(is.null(res$cols[["three"]]), TRUE)
expect_equal(res$cols[["four"]], col_date(format = "%d%m%y"))
expect_equal(res$cols[["five"]], col_double())
expect_equal(res$cols[["six"]], col_guess())
expect_equal(res$cols[["seven"]], col_time(format = "%H:%M:%S"))
expect_equal(res$cols[["eight"]], col_datetime(format = "%d%m%y %H:%M:%S"))
expect_equal(res$cols[["nine"]], col_logical())
})
test_that("libname works on PE data for csv.", {
lst <- specs(PE = import_spec(PESTAT = "character",
na = ""))
libname(dat, file.path(base_path, "PE"), "csv", import_specs = lst)
expect_equal(length(dat), 1)
})
test_that("libname works on PE data for xlsx.", {
lst <- specs(PE = import_spec(PESTAT = "character",
na = "NA"))
libname(dat, file.path(base_path, "PE"), "xlsx", import_specs = lst)
expect_equal(length(dat), 1)
})
test_that("libname works on PE data for xls.", {
lst <- specs(PE = import_spec(PESTAT = "character",
na = ""))
libname(dat, file.path(base_path, "PE"), "xls", import_specs = lst)
expect_equal(length(dat), 1)
})
test_that("writing xls changes to xlsx.", {
tmp <- tempdir()
libname(dat, tmp, "xls")
lib_add(dat, mtcars)
fe <- file.exists(file.path(tmp, "mtcars.xlsx"))
expect_equal(fe, TRUE)
lib_delete(dat)
})
test_that("libname works on SDTM data for csv.", {
lst <- specs(PE = import_spec(PESTAT = "character",
na = ""))
libname(dat, file.path(base_path, "SDTM"), "csv", import_specs = lst)
expect_equal(length(dat), 13)
})
test_that("libname works on SDTM data for sas7bdat.", {
libname(dat, file.path(base_path, "SDTM"), "sas7bdat")
expect_equal(length(dat), 13)
})
test_that("import_specs works as expected with dates.", {
library(readr)
# Create temp path
tmp <- file.path(tempdir(), "mtcars.csv")
# Create data for illustration purposes
df <- data.frame(vehicle = rownames(mtcars), mtcars[c("mpg", "cyl", "disp")],
stringsAsFactors = FALSE)
# Kill rownames
rownames(df) <- NULL
# Add some columns
df <- df[1:10, ] %>%
datastep({
recdt <- "10JUN1974"
if (mpg >= 20)
mpgcat <- "High"
else
mpgcat <- "Low"
if (cyl == 8)
cyl8 <- TRUE
})
df
# Save to temp directory
write_csv(df, tmp)
# Create import spec
spcs <- specs(mtcars = import_spec(vehicle = "character",
cyl = "integer",
recdt = "date=%d%b%Y",
mpgcat = "guess",
cyl8 = "logical"))
# Create library
libname(dat, tempdir(), "csv", import_specs = spcs)
# View data types
dictionary(dat)
expect_equal(class(dat$mtcars$recdt), "Date")
})
test_that("no specs work on CRF data for sas7bdat.", {
libname(dat, file.path(base_path, "CRF"), "sas7bdat")
expect_equal(class(dat$dm$VISITREP), "logical")
expect_equal(class(dat$pe$VISITREP), "logical")
expect_equal(all(is.na(dat$dm$VISITREP)), TRUE)
expect_equal(all(is.na(dat$pe$VISITREP)), TRUE)
})
test_that("specs na and trim_ws work on CRF data for sas7bdat.", {
lst <- specs(na = c("", "."), trim_ws = TRUE)
libname(dat, file.path(base_path, "CRF"), "sas7bdat", import_specs = lst)
# dat$dm
# dat$pe
expect_equal(class(dat$dm$VISITREP), "logical")
expect_equal(class(dat$dm$VISITREP), "logical")
})
test_that("dm import_spec na and trim_ws work on CRF data for sas7bdat.", {
lst <- specs(dm = import_spec(na = c("", "."), trim_ws = TRUE))
libname(dat, file.path(base_path, "CRF"), "sas7bdat", import_specs = lst)
# dat$dm
# dat$pe
expect_equal(class(dat$dm$VISITREP), "logical")
expect_equal(class(dat$pe$VISITREP), "character")
})
test_that("dm and pe import_spec col_types work on CRF data for sas7bdat.", {
lst <- specs(dm = import_spec(VISITREP = "character", na = c("", ".")),
pe = import_spec(VISITREP = "character", na = c("", ".")))
libname(dat, file.path(base_path, "CRF"), "sas7bdat", import_specs = lst)
# dat$dm
# dat$pe
expect_equal(class(dat$dm$VISITREP), "character")
expect_equal(class(dat$dm$PAGEREP), "logical")
expect_equal(class(dat$pe$VISITREP), "character")
expect_equal(class(dat$dm$PAGEREP), "logical")
})
test_that("dm and pe multiple import_spec col_types work for sas7bdat.", {
lst <- specs(na = c("", "."), trim_ws = TRUE,
dm = import_spec(VISITREP = "character",
PAGEREP = "character"),
pe = import_spec(PAGEREP = "character",
VISITREP = "numeric",
DERMRES = "logical",
CARES = "integer"))
libname(dat, file.path(base_path, "CRF"), "sas7bdat", import_specs = lst)
# dat$dm
# dat$pe
# View(dat$pe)
expect_equal(class(dat$dm$VISITREP), "character")
expect_equal(class(dat$dm$PAGEREP), "character")
expect_equal(class(dat$dm$BIRTHDD), "numeric")
expect_equal(class(dat$pe$VISITREP), "numeric")
expect_equal(class(dat$pe$PAGEREP), "character")
expect_equal(class(dat$pe$CARES), "integer")
expect_equal(class(dat$pe$DERMRES), "logical")
})
test_that("lab import_spec with dates works for sas7bdat.", {
libname(dat, base_path, "sas7bdat")
#
# labels(dat$demo_studya)
# unclass(dat$demo_studya)
#
# library(haven)
# nl <- read_sas(file.path(base_path, "demo_studya.sas7bdat"))
# labels(nl)
expect_equal(attr(dat$demo_studya$screendate, "label"), "Date of Screening")
})
test_that("print function works as expected.", {
is1 <- import_spec(col1 = "character", col2 = "integer",
na = c("NA", "-"),
trim_ws = FALSE)
is2 <- import_spec(col1 = "numeric", col2 = "date:%d%m%Y",
na = c(" ", ""),
trim_ws = TRUE)
spcs <- specs(na = c("NA", "-", " ", ""),
trim_ws = TRUE, AB = is1, AC = is2)
spcs
expect_equal(TRUE, TRUE)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.