library(xpectr)
context("strip()")

test_that("strip() works", {
  strings <- c(
    "Hello! I am George.  \n\rDon't call me Frank!",
    "    \tAs that, is, not, my, name!",
    "", NA, ".!\"'",
    "these 2 numbers 4743 and 12378!"
  )

  expect_equal(
    strip(strings),
    c("Hello I am George Dont call me Frank",
      "As that is not my name", "", NA, "",
      "these 2 numbers 4743 and 12378")
  )
  expect_equal(
    strip(strings, remove_spaces = TRUE),
    c("HelloIamGeorgeDontcallmeFrank", "Asthatisnotmyname",
      "", NA, "","these2numbers4743and12378")
  )
  expect_equal(
    strip(strings, remove_numbers = TRUE),
    c("Hello I am George Dont call me Frank",
      "As that is not my name", "", NA, "",
      "these numbers and")
  )

  # TODO
  # strip(" subscript.\n\033[31mx\033[39m The ")

  # errors

  expect_error(strip(strings, allow_na = FALSE),
    "* Variable 'strings': Contains missing values (element 4).",
    fixed = TRUE
  )
  expect_error(strip(NA, allow_na = FALSE),
    " * Variable 'strings': Contains missing values (element 1).",
    fixed = TRUE
  )
  expect_error(strip(NULL),
    "* Variable 'strings': Must be of type 'character', not 'NULL'.",
    fixed = TRUE
  )
  expect_error(strip(23),
    "* Variable 'strings': Must be of type 'character', not 'double'.",
    fixed = TRUE
  )
  expect_equal(
    strip(strings, replacement = " "),
    c(
      "Hello I am George Don t call me Frank",
      "As that is not my name", "", NA, "",
      "these 2 numbers 4743 and 12378"
    )
  )
})

test_that("strip_msg() works", {

  the_string <- paste0(
    "Hello! I am George.  \n\rDon't call me Frank!",
    "    \tAs that, is, not, my, name!",
    "", ".!\"'",
    "these 2 numbers 4743 and 12378!"
  )

  stripped_string <- strip(the_string)

  expect_equal(stripped_string,
               paste0("Hello I am George Dont call me Frank As that is not my name",
                      "these 2 numbers 4743 and 12378"))

  expect_error(
    strip_msg(stop(the_string)),
    stripped_string
  )
  expect_error(
    strip_msg(stop(the_string), remove_spaces = TRUE),
    strip(the_string, remove_spaces = TRUE)
  )
  expect_error(
    strip_msg(stop(the_string), remove_numbers = TRUE),
    strip(the_string, remove_numbers = TRUE)
  )

  expect_message(
    strip_msg(message(the_string)),
    stripped_string
  )
  expect_message(
    strip_msg(message(the_string), remove_spaces = TRUE),
    strip(the_string, remove_spaces = TRUE)
  )
  expect_message(
    strip_msg(message(the_string), remove_numbers = TRUE),
    strip(the_string, remove_numbers = TRUE)
  )

  expect_warning(
    strip_msg(warning(the_string)),
    stripped_string
  )
  expect_warning(
    strip_msg(warning(the_string), remove_spaces = TRUE),
    strip(the_string, remove_spaces = TRUE)
  )
  expect_warning(
    strip_msg(warning(the_string), remove_numbers = TRUE),
    strip(the_string, remove_numbers = TRUE)
  )

  expect_invisible(strip_msg(NULL))
  expect_invisible(strip_msg(NA))
  expect_invisible(strip_msg(3))
  expect_invisible(strip_msg("hello!"))

  # errors

  expect_error(strip_msg(strip_msg(stop(the_string), remove_spaces = NULL)),
               paste0("1 assertions failed Variable removespaces Must be of type l",
                      "ogical flag not NULL"),
               fixed = TRUE
  )

})
