## OBJECT TYPES ----------------------------------------------------------------
null <- NULL
na <- NA
boolean <- TRUE
number_random <- sample(1:1000, 1)
string_random <- paste0(sample(letters, 5), collapse = "")
vector_strings <- c("foo", "bar")
list_strings <- list("foo", "bar")
df <- mtcars
matrix <- as.matrix(mtcars)
# correct but irrelevant JSON file
fill <- list("a" = 1, "b" = 2)
json <- jsonlite::toJSON(fill)
madeup_json_file <- tempfile(fileext = ".json")
write(json, madeup_json_file)
## IMAGE_TO_PDF ----------------------------------------------------------------
test_that("image_to_pdf() warns of input errors", {
expect_error(image_to_pdf(null))
expect_error(image_to_pdf(na))
expect_error(image_to_pdf(boolean))
expect_error(image_to_pdf(number_random))
expect_error(image_to_pdf(df))
expect_error(image_to_pdf(matrix))
expect_error(image_to_pdf(vector_strings))
expect_error(image_to_pdf(list_strings))
} )
test_that("image_to_pdf() returns a pdf file", {
skip_on_cran()
skip_on_ci()
output <- file.path(tempdir(), "output.pdf")
image <- testthat::test_path("examples", "image.jpg")
image_to_pdf(image, output) # NB sometimes magick problem on Linux
expect_true(daiR::is_pdf(output))
unlink(output, force = TRUE)
} )
test_that("image_to_pdf() handles different formats and multiple files", {
#skip() # NB sometimes magick problem on Linux
skip_on_cran()
skip_on_ci()
output <- file.path(tempdir(), "output.pdf")
# create function to check that a file renders
renders <- function(file) {
image_to_pdf(file, output)
if(file.exists(output)) {
result <- suppressMessages(try(pdftools::pdf_info(output), silent = TRUE))
if(class(result) != "try-error") return(TRUE)
return(FALSE)
}
return(FALSE)
}
# create function to convert images
convert <- function(path_in, type_out) {
img <- magick::image_read(path_in)
no_ext <- stringr::str_extract(basename(path_in), ".*(?=\\.\\w{3,4}$)")
filepath <- file.path(tempdir(), glue::glue('{no_ext}.{type_out}'))
magick::image_write(img, filepath, format = type_out)
}
# convert example file to different formats
jpg <- testthat::test_path("examples", "image.jpg")
types <- c("jpeg", "png", "bmp", "gif", "tiff")
purrr::map(types, ~ convert(jpg, .x))
files <- list.files(tempdir(),
pattern = stringr::str_extract(basename(jpg), ".*(?=\\.\\w{3,4}$)"),
full.names = TRUE)
# test on each image type
expect_true(all(purrr::map_lgl(files, renders)))
# test on vector of image files
expect_true(renders(files))
# cleanup
tmp_files <- c(files, output)
unlink(tmp_files, force = TRUE)
})
## IS_PDF ----------------------------------------------------------------------
test_that("is_pdf() calls out non-pdfs", {
image <- testthat::test_path("examples", "image.jpg")
fake <- tempfile(fileext = ".pdf")
fs::file_create(fake)
nonexist <- "nonexist.pdf"
expect_false(is_pdf(image))
expect_false(is_pdf(fake))
expect_false(is_pdf(nonexist))
unlink(fake, force = TRUE)
})
## IS_JSON ----------------------------------------------------------------------
test_that("is_json() calls out non-jsons", {
image <- testthat::test_path("examples", "image.jpg")
pdf <- testthat::test_path("examples", "sample.pdf")
txt <- file.path(tempdir(), "foo.txt")
write("Lorem ipsum", txt)
csv <- file.path(tempdir(), "bar.csv")
write("Lorem,ipsum", csv)
empty <- tempfile(fileext = ".json")
fs::file_create(empty)
nonexist <- "nonexist.json"
#expect_false(is_json(image))
#expect_false(is_json(pdf))
expect_false(is_json(txt))
expect_false(is_json(csv))
expect_false(is_json(empty))
expect_false(is_json(nonexist))
unlink(c(txt, csv, empty), force = TRUE)
})
test_that("is_json() recognizes jsons", {
json1 <- testthat::test_path("examples", "output.json")
json2 <- testthat::test_path("examples", "output_blank.json")
json3 <- testthat::test_path("examples", "sample_v1.json")
json4 <- testthat::test_path("examples", "sample3pg.json")
expect_true(is_json(json1))
expect_true(is_json(json2))
expect_true(is_json(json3))
expect_true(is_json(json4))
} )
## IS_COLOUR ----------------------------------------
# TBD
## PDF_TO_BINBASE --------------------------------------------------------------
test_that("pdf_to_binbase() rejects non-pdfs", {
skip_on_cran()
skip_on_ci()
image <- testthat::test_path("examples", "image.jpg")
expect_error(pdf_to_binbase(image), "Input file not a pdf.")
})
test_that("pdf_to_binbase() produces a base64 string", {
#skip() # NB sometimes magick problem on Linux
skip_on_cran()
skip_on_ci()
image <- testthat::test_path("examples", "image.jpg")
output <- file.path(tempdir(), "output.pdf")
image_to_pdf(image, output)
base <- pdf_to_binbase(output)
expect_type(base, "character")
expect_match(base, "^[a-zA-Z0-9+/]+={,2}$")
unlink(output, force = TRUE)
})
## IMG_TO_BINBASE --------------------------------------------------------------
test_that("img_to_binbase() rejects pdfs", {
#skip() # NB sometimes magick problem on Linux
skip_on_cran()
skip_on_ci()
image <- testthat::test_path("examples", "image.jpg")
output <- file.path(tempdir(), "output.pdf")
image_to_pdf(image, output)
expect_error(img_to_binbase(output), "Input file is .pdf.")
unlink(output, force = TRUE)
})
test_that("img_to_binbase() produces a base64 string", {
#skip() # NB sometimes magick problem on Linux
skip_on_cran()
skip_on_ci()
image <- testthat::test_path("examples", "image.jpg")
base <- img_to_binbase(image)
expect_type(base, "character")
expect_match(base, "^[a-zA-Z0-9+/]+={,2}$")
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.