tests/testthat/test_draw.R

## 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)

## DRAW_BLOCKS -----------------------------------------------------------------

test_that("draw_blocks() warns of input errors", {
  expect_error(draw_blocks(type = null), "Invalid type parameter.")
  expect_error(draw_blocks(type = na), "Invalid type parameter.")
  expect_error(draw_blocks(type = boolean), "Invalid type parameter.")

  expect_error(draw_blocks(type = number_random), "Invalid type parameter.")
  expect_error(draw_blocks(type = string_random), "Invalid type parameter.")
  expect_error(draw_blocks(type = df), "Invalid type parameter.")
  expect_error(draw_blocks(type = matrix), "Invalid type parameter.")
  expect_error(draw_blocks(type = vector_strings), "Invalid type parameter.")
  expect_error(draw_blocks(type = list_strings), "Invalid type parameter.")

  expect_error(draw_blocks(type = "sync", object = null), "Object parameter not pointing to valid response object.")
  expect_error(draw_blocks(type = "sync", object = na), "Object parameter not pointing to valid response object.")
  expect_error(draw_blocks(type = "sync", object = boolean), "Object parameter not pointing to valid response object.")
  expect_error(draw_blocks(type = "sync", object = number_random), "Object parameter not pointing to valid response object.")
  expect_error(draw_blocks(type = "sync", object = df), "Object parameter not pointing to valid response object.")
  expect_error(draw_blocks(type = "sync", object = matrix), "Object parameter not pointing to valid response object.")
  expect_error(draw_blocks(type = "sync", object = vector_strings), "Object parameter not pointing to valid response object.")
  expect_error(draw_blocks(type = "sync", object = list_strings), "Object parameter not pointing to valid response object.")

  expect_error(draw_blocks(type = "async", object = realjson, prefix = number_random), "Invalid prefix parameter.")
  expect_error(draw_blocks(type = "async", object = realjson, prefix = df), "Invalid prefix parameter.")
  expect_error(draw_blocks(type = "async", object = realjson, prefix = matrix), "Invalid prefix parameter.")
  expect_error(draw_blocks(type = "async", object = realjson, prefix = vector_strings), "Invalid prefix parameter.")
  expect_error(draw_blocks(type = "async", object = realjson, prefix = list_strings), "Invalid prefix parameter.")

  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "test", dir = null),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "test", dir = na),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "test", dir = boolean),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "test", dir = number_random),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = df),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = matrix),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = vector_strings),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = list_strings),
    "Invalid dir parameter. Must be a valid folder path."
  )

  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = null),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = na),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = boolean),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = string_random),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = vector_strings),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = list_strings),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = df),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = matrix),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )

  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = null),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = na),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = boolean),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = string_random),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = vector_strings),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = list_strings),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = df),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = matrix),
    "Invalid linewd parameter. Must be a single number."
  )

  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = null),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = na),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = boolean),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = string_random),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = vector_strings),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = list_strings),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = df),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = matrix),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )

  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = null),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = na),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = boolean),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = string_random),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = vector_strings),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = list_strings),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = df),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_blocks(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = matrix),
    "Invalid fontsize parameter. Must be a single number."
  )
})

test_that("draw_blocks() produces a correctly named png file", {
  skip_on_cran()
  skip_on_ci()
  skip_if_not_installed("grDevices")
  skip_if_not_installed("magick")
  realjson <- testthat::test_path("examples", "sample_v1.json")
  draw_blocks(type = "async", object = realjson, dir = tempdir())
  parsed <- jsonlite::fromJSON(realjson)
  pages <- parsed[["pages"]][["pageNumber"]]
  expected_filepaths <- character()
  stem <- substr(basename(realjson), 1, nchar(basename(realjson)) - 5)
  for (i in pages) {
    fname <- glue::glue("{stem}_page{i}_blocks.png")
    fpath <- file.path(tempdir(), fname)
    expected_filepaths <- c(expected_filepaths, fpath)
  }
  for (j in 1:length(expected_filepaths)) {
    expect_true(file.exists(expected_filepaths[j]))
  }
  unlink(expected_filepaths, force = TRUE)
})

## DRAW_PARAGRAPHS -------------------------------------------------------------

test_that("draw_paragraphs() warns of input errors", {
  expect_error(draw_paragraphs(type = null), "Invalid type parameter.")
  expect_error(draw_paragraphs(type = na), "Invalid type parameter.")
  expect_error(draw_paragraphs(type = boolean), "Invalid type parameter.")
  expect_error(draw_paragraphs(type = number_random), "Invalid type parameter.")
  expect_error(draw_paragraphs(type = string_random), "Invalid type parameter.")
  expect_error(draw_paragraphs(type = df), "Invalid type parameter.")
  expect_error(draw_paragraphs(type = matrix), "Invalid type parameter.")
  expect_error(draw_paragraphs(type = vector_strings), "Invalid type parameter.")
  expect_error(draw_paragraphs(type = list_strings), "Invalid type parameter.")

  expect_error(draw_paragraphs(type = "sync", object = null), "Object parameter not pointing to valid response object.")
  expect_error(draw_paragraphs(type = "sync", object = na), "Object parameter not pointing to valid response object.")
  expect_error(draw_paragraphs(type = "sync", object = boolean), "Object parameter not pointing to valid response object.")
  expect_error(draw_paragraphs(type = "sync", object = number_random), "Object parameter not pointing to valid response object.")
  expect_error(draw_paragraphs(type = "sync", object = df), "Object parameter not pointing to valid response object.")
  expect_error(draw_paragraphs(type = "sync", object = matrix), "Object parameter not pointing to valid response object.")
  expect_error(draw_paragraphs(type = "sync", object = vector_strings), "Object parameter not pointing to valid response object.")
  expect_error(draw_paragraphs(type = "sync", object = list_strings), "Object parameter not pointing to valid response object.")

  realjson <- testthat::test_path("examples", "sample_v1.json")

  expect_error(draw_paragraphs(type = "async", object = realjson, prefix = number_random), "Invalid prefix parameter.")
  expect_error(draw_paragraphs(type = "async", object = realjson, prefix = df), "Invalid prefix parameter.")
  expect_error(draw_paragraphs(type = "async", object = realjson, prefix = matrix), "Invalid prefix parameter.")
  expect_error(draw_paragraphs(type = "async", object = realjson, prefix = vector_strings), "Invalid prefix parameter.")
  expect_error(draw_paragraphs(type = "async", object = realjson, prefix = list_strings), "Invalid prefix parameter.")

  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "test", dir = null),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "test", dir = na),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "test", dir = boolean),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "test", dir = number_random),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = df),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = matrix),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = vector_strings),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = list_strings),
    "Invalid dir parameter. Must be a valid folder path."
  )

  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = null),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = na),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = boolean),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = string_random),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = vector_strings),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = list_strings),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = df),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = matrix),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )

  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = null),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = na),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = boolean),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = string_random),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = vector_strings),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = list_strings),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = df),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = matrix),
    "Invalid linewd parameter. Must be a single number."
  )

  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = null),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = na),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = boolean),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = string_random),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = vector_strings),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = list_strings),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = df),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = matrix),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )

  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = null),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = na),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = boolean),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = string_random),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = vector_strings),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = list_strings),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = df),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_paragraphs(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = matrix),
    "Invalid fontsize parameter. Must be a single number."
  )
})

test_that("draw_paragraphs() produces a correctly named new png file", {
  skip_on_cran()
  skip_on_ci()
  skip_if_not_installed("grDevices")
  skip_if_not_installed("magick")
  realjson <- testthat::test_path("examples", "sample_v1.json")
  draw_paragraphs(type = "async", object = realjson, dir = tempdir())
  parsed <- jsonlite::fromJSON(realjson)
  pages <- parsed[["pages"]][["pageNumber"]]
  expected_filepaths <- character()
  stem <- substr(basename(realjson), 1, nchar(basename(realjson)) - 5)
  for (i in pages) {
    fname <- glue::glue("{stem}_page{i}_paragraphs.png")
    fpath <- file.path(tempdir(), fname)
    expected_filepaths <- c(expected_filepaths, fpath)
  }
  for (j in 1:length(expected_filepaths)) {
    expect_true(file.exists(expected_filepaths[j]))
  }
  unlink(expected_filepaths, force = TRUE)
})

## DRAW_LINES ------------------------------------------------------------------

test_that("draw_lines() warns of input errors", {
  expect_error(draw_lines(type = null), "Invalid type parameter.")
  expect_error(draw_lines(type = na), "Invalid type parameter.")
  expect_error(draw_lines(type = boolean), "Invalid type parameter.")
  expect_error(draw_lines(type = number_random), "Invalid type parameter.")
  expect_error(draw_lines(type = string_random), "Invalid type parameter.")
  expect_error(draw_lines(type = df), "Invalid type parameter.")
  expect_error(draw_lines(type = matrix), "Invalid type parameter.")
  expect_error(draw_lines(type = vector_strings), "Invalid type parameter.")
  expect_error(draw_lines(type = list_strings), "Invalid type parameter.")

  expect_error(draw_lines(type = "sync", object = null), "Object parameter not pointing to valid response object.")
  expect_error(draw_lines(type = "sync", object = na), "Object parameter not pointing to valid response object.")
  expect_error(draw_lines(type = "sync", object = boolean), "Object parameter not pointing to valid response object.")
  expect_error(draw_lines(type = "sync", object = number_random), "Object parameter not pointing to valid response object.")
  expect_error(draw_lines(type = "sync", object = df), "Object parameter not pointing to valid response object.")
  expect_error(draw_lines(type = "sync", object = matrix), "Object parameter not pointing to valid response object.")
  expect_error(draw_lines(type = "sync", object = vector_strings), "Object parameter not pointing to valid response object.")
  expect_error(draw_lines(type = "sync", object = list_strings), "Object parameter not pointing to valid response object.")

  realjson <- testthat::test_path("examples", "sample_v1.json")

  expect_error(draw_lines(type = "async", object = realjson, prefix = number_random), "Invalid prefix parameter.")
  expect_error(draw_lines(type = "async", object = realjson, prefix = df), "Invalid prefix parameter.")
  expect_error(draw_lines(type = "async", object = realjson, prefix = matrix), "Invalid prefix parameter.")
  expect_error(draw_lines(type = "async", object = realjson, prefix = vector_strings), "Invalid prefix parameter.")
  expect_error(draw_lines(type = "async", object = realjson, prefix = list_strings), "Invalid prefix parameter.")

  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "test", dir = null),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "test", dir = na),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "test", dir = boolean),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "test", dir = number_random),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = df),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = matrix),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = vector_strings),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = list_strings),
    "Invalid dir parameter. Must be a valid folder path."
  )

  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = null),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = na),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = boolean),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = string_random),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = vector_strings),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = list_strings),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = df),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = matrix),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )

  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = null),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = na),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = boolean),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = string_random),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = vector_strings),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = list_strings),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = df),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = matrix),
    "Invalid linewd parameter. Must be a single number."
  )

  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = null),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = na),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = boolean),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = string_random),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = vector_strings),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = list_strings),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = df),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = matrix),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )

  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = null),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = na),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = boolean),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = string_random),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = vector_strings),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = list_strings),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = df),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_lines(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = matrix),
    "Invalid fontsize parameter. Must be a single number."
  )
})

test_that("draw_lines() produces a correctly named new png file", {
  skip_on_cran()
  skip_on_ci()
  skip_if_not_installed("grDevices")
  skip_if_not_installed("magick")
  realjson <- testthat::test_path("examples", "sample_v1.json")
  draw_lines(type = "async", object = realjson, dir = tempdir())
  parsed <- jsonlite::fromJSON(realjson)
  pages <- parsed[["pages"]][["pageNumber"]]
  expected_filepaths <- character()
  stem <- substr(basename(realjson), 1, nchar(basename(realjson)) - 5)
  for (i in pages) {
    fname <- glue::glue("{stem}_page{i}_lines.png")
    fpath <- file.path(tempdir(), fname)
    expected_filepaths <- c(expected_filepaths, fpath)
  }
  for (j in 1:length(expected_filepaths)) {
    expect_true(file.exists(expected_filepaths[j]))
  }
  unlink(expected_filepaths, force = TRUE)
})

## DRAW_TOKENS -----------------------------------------------------------------

test_that("draw_tokens() warns of input errors", {
  expect_error(draw_tokens(type = null), "Invalid type parameter.")
  expect_error(draw_tokens(type = na), "Invalid type parameter.")
  expect_error(draw_tokens(type = boolean), "Invalid type parameter.")
  expect_error(draw_tokens(type = number_random), "Invalid type parameter.")
  expect_error(draw_tokens(type = string_random), "Invalid type parameter.")
  expect_error(draw_tokens(type = df), "Invalid type parameter.")
  expect_error(draw_tokens(type = matrix), "Invalid type parameter.")
  expect_error(draw_tokens(type = vector_strings), "Invalid type parameter.")
  expect_error(draw_tokens(type = list_strings), "Invalid type parameter.")

  expect_error(draw_tokens(type = "sync", object = null), "Object parameter not pointing to valid response object.")
  expect_error(draw_tokens(type = "sync", object = na), "Object parameter not pointing to valid response object.")
  expect_error(draw_tokens(type = "sync", object = boolean), "Object parameter not pointing to valid response object.")
  expect_error(draw_tokens(type = "sync", object = number_random), "Object parameter not pointing to valid response object.")
  expect_error(draw_tokens(type = "sync", object = df), "Object parameter not pointing to valid response object.")
  expect_error(draw_tokens(type = "sync", object = matrix), "Object parameter not pointing to valid response object.")
  expect_error(draw_tokens(type = "sync", object = vector_strings), "Object parameter not pointing to valid response object.")
  expect_error(draw_tokens(type = "sync", object = list_strings), "Object parameter not pointing to valid response object.")

  realjson <- testthat::test_path("examples", "sample_v1.json")

  expect_error(draw_tokens(type = "async", object = realjson, prefix = number_random), "Invalid prefix parameter.")
  expect_error(draw_tokens(type = "async", object = realjson, prefix = df), "Invalid prefix parameter.")
  expect_error(draw_tokens(type = "async", object = realjson, prefix = matrix), "Invalid prefix parameter.")
  expect_error(draw_tokens(type = "async", object = realjson, prefix = vector_strings), "Invalid prefix parameter.")
  expect_error(draw_tokens(type = "async", object = realjson, prefix = list_strings), "Invalid prefix parameter.")

  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "test", dir = null),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "test", dir = na),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "test", dir = boolean),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "test", dir = number_random),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = df),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = matrix),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = vector_strings),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = list_strings),
    "Invalid dir parameter. Must be a valid folder path."
  )

  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = null),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = na),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = boolean),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = string_random),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = vector_strings),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = list_strings),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = df),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = matrix),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )

  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = null),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = na),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = boolean),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = string_random),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = vector_strings),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = list_strings),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = df),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = matrix),
    "Invalid linewd parameter. Must be a single number."
  )

  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = null),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = na),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = boolean),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = string_random),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = vector_strings),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = list_strings),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = df),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = matrix),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )

  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = null),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = na),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = boolean),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = string_random),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = vector_strings),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = list_strings),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = df),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_tokens(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = matrix),
    "Invalid fontsize parameter. Must be a single number."
  )
})

test_that("draw_tokens() produces a correctly named new png file", {
  skip_on_cran()
  skip_on_ci()
  skip_if_not_installed("grDevices")
  skip_if_not_installed("magick")
  realjson <- testthat::test_path("examples", "sample_v1.json")
  draw_tokens(type = "async", object = realjson, dir = tempdir())
  parsed <- jsonlite::fromJSON(realjson)
  pages <- parsed[["pages"]][["pageNumber"]]
  expected_filepaths <- character()
  stem <- substr(basename(realjson), 1, nchar(basename(realjson)) - 5)
  for (i in pages) {
    fname <- glue::glue("{stem}_page{i}_tokens.png")
    fpath <- file.path(tempdir(), fname)
    expected_filepaths <- c(expected_filepaths, fpath)
  }
  for (j in 1:length(expected_filepaths)) {
    expect_true(file.exists(expected_filepaths[j]))
  }
  unlink(expected_filepaths, force = TRUE)
})

## DRAW ENTITIES ----------------------------------------

test_that("draw_entities() warns of input errors", {
  expect_error(draw_entities(type = null), "Invalid type parameter.")
  expect_error(draw_entities(type = na), "Invalid type parameter.")
  expect_error(draw_entities(type = boolean), "Invalid type parameter.")
  expect_error(draw_entities(type = number_random), "Invalid type parameter.")
  expect_error(draw_entities(type = string_random), "Invalid type parameter.")
  expect_error(draw_entities(type = df), "Invalid type parameter.")
  expect_error(draw_entities(type = matrix), "Invalid type parameter.")
  expect_error(draw_entities(type = vector_strings), "Invalid type parameter.")
  expect_error(draw_entities(type = list_strings), "Invalid type parameter.")

  expect_error(draw_entities(type = "sync", object = null), "Object parameter not pointing to valid response object.")
  expect_error(draw_entities(type = "sync", object = na), "Object parameter not pointing to valid response object.")
  expect_error(draw_entities(type = "sync", object = boolean), "Object parameter not pointing to valid response object.")
  expect_error(draw_entities(type = "sync", object = number_random), "Object parameter not pointing to valid response object.")
  expect_error(draw_entities(type = "sync", object = df), "Object parameter not pointing to valid response object.")
  expect_error(draw_entities(type = "sync", object = matrix), "Object parameter not pointing to valid response object.")
  expect_error(draw_entities(type = "sync", object = vector_strings), "Object parameter not pointing to valid response object.")
  expect_error(draw_entities(type = "sync", object = list_strings), "Object parameter not pointing to valid response object.")

  realjson <- testthat::test_path("examples", "sample_v1.json")

  expect_error(draw_entities(type = "async", object = realjson, prefix = number_random), "Invalid prefix parameter.")
  expect_error(draw_entities(type = "async", object = realjson, prefix = df), "Invalid prefix parameter.")
  expect_error(draw_entities(type = "async", object = realjson, prefix = matrix), "Invalid prefix parameter.")
  expect_error(draw_entities(type = "async", object = realjson, prefix = vector_strings), "Invalid prefix parameter.")
  expect_error(draw_entities(type = "async", object = realjson, prefix = list_strings), "Invalid prefix parameter.")

  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "test", dir = null),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "test", dir = na),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "test", dir = boolean),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "test", dir = number_random),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = df),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = matrix),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = vector_strings),
    "Invalid dir parameter. Must be a valid folder path."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = list_strings),
    "Invalid dir parameter. Must be a valid folder path."
  )

  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = null),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = na),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = boolean),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = string_random),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = vector_strings),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = list_strings),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = df),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", linecol = matrix),
    "Invalid linecol parameter. Must be a single valid colour representation."
  )

  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = null),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = na),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = boolean),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = string_random),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = vector_strings),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = list_strings),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = df),
    "Invalid linewd parameter. Must be a single number."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", linewd = matrix),
    "Invalid linewd parameter. Must be a single number."
  )

  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = null),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = na),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = boolean),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = string_random),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = vector_strings),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = list_strings),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = df),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", fontcol = matrix),
    "Invalid fontcol parameter. Must be a single valid colour representation."
  )

  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = null),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = na),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = boolean),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = string_random),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = vector_strings),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = list_strings),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = df),
    "Invalid fontsize parameter. Must be a single number."
  )
  expect_error(
    draw_entities(type = "async", object = realjson, prefix = "myfile", dir = ".", fontsize = matrix),
    "Invalid fontsize parameter. Must be a single number."
  )
})

test_that("draw_entities() produces a correctly named new png file", {
  skip_on_cran()
  skip_on_ci()
  skip_if_not_installed("grDevices")
  skip_if_not_installed("magick")
  realjson <- testthat::test_path("examples", "table_form_parsed.json")
  draw_entities(type = "async", object = realjson, dir = tempdir())
  parsed <- jsonlite::fromJSON(realjson)
  pages <- parsed[["pages"]][["pageNumber"]]
  expected_filepaths <- character()
  stem <- substr(basename(realjson), 1, nchar(basename(realjson)) - 5)
  for (i in pages) {
    fname <- glue::glue("{stem}_page{i}_entities.png")
    fpath <- file.path(tempdir(), fname)
    expected_filepaths <- c(expected_filepaths, fpath)
  }
  for (j in 1:length(expected_filepaths)) {
    expect_true(file.exists(expected_filepaths[j]))
  }
  unlink(expected_filepaths, force = TRUE)
})

unlink(madeup_json_file, force = TRUE)
Hegghammer/daiR documentation built on Nov. 15, 2024, 10:34 p.m.