
# We need an UTF-8 platform or a recent R version on Windows

utf8 <- l10n_info()$`UTF-8`
newwin <- .Platform$OS.type == "windows" && getRversion() >= "4.0.0"
if (!utf8 && !newwin) return()

test_that("UTF-8 output on Windows", {
  skip_on_cran()
  skip_on_covr()
  out <- r_utf8(function() {
    library(cli)
    options(cli.unicode = TRUE)
    options(cli.num_colors = 1)
    options(cli.width = 70)
    options(cli.dynamic = FALSE)
    Sys.setenv(RSTUDIO = NA)

    s1 <- "\u30DE\u30EB\u30C1\u30D0\u30A4\u30C8\u306E\u30BF\u30A4\u30C8\u30EB"
    s2 <- "\u00e1rv\u00edzt\u0171r\u0151 t\u00fck\u00f6rf\u00far\u00f3g\u00e9p"

    cli_h1("Alerts")
    cli_alert(s1)
    cli_alert_danger(s2)
    cli_alert_info(s1)
    cli_alert_success(s1)
    cli_alert_warning(s1)

    cli_h1("Block quote")
    cli_blockquote(s1, s2)

    cli_h1("Bullets")
    cli_bullets(c("*" = s1, "!" = s2))

    cli_h1("Code")
    cli_code(c(s1, s2))

    cli_h1("Lists")
    cli_dl(c(s1 = s1, s2 = s2))
    cli_ol(c(s1, s2))
    cli_ul(c(s1, s2))

    cli_h1("Headers")
    cli_h1(s1)
    cli_h2(s2)
    cli_h3(s1)

    cli_h1("Progress bars")
    cli_progress_step(s1)
    cli_progress_step(s2)
    cli_progress_done()

    cli_h1("Text")
    idx <- c(1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L)
    cli_text(paste(c(s1, s2)[idx], collapse = " "))

    cli_h1("Verbatim")
    cli_verbatim(c(s1, s2))
  })

  out$stdout <- gsub("\\[[.0-9]+m?s\\]", "[1s]", out$stdout)

  tmp <- tempfile(fileext = ".txt")
  writeBin(charToRaw(out$stdout), tmp)
  expect_snapshot_file(tmp, name = "utf8-output.txt")
})

test_that("utf8_graphemes", {
  expect_equal(utf8_graphemes(character()), list())
  expect_equal(utf8_graphemes(""), list(character()))

  str <- c(
    NA,
    "",
    "alpha",
    "\U0001f477\U0001f3ff\u200d\u2640\ufe0f",
    "\U0001f477\U0001f3ff",
    "\U0001f477\u200d\u2640\ufe0f",
    "\U0001f477\U0001f3fb",
    "\U0001f477\U0001f3ff"
  )
  exp <- list(
    NA_character_,
    character(),
    c("a", "l", "p", "h", "a"),
    "\U0001f477\U0001f3ff\u200d\u2640\ufe0f",
    "\U0001f477\U0001f3ff",
    "\U0001f477\u200d\u2640\ufe0f",
    "\U0001f477\U0001f3fb",
    "\U0001f477\U0001f3ff"
  )
  expect_equal(utf8_graphemes(str), exp)

  str2 <- paste0(na.omit(str), collapse = "")
  exp2 <- list(na.omit(unlist(exp)))
  expect_equal(utf8_graphemes(str2), exp2)
})

test_that("errors", {
  expect_snapshot_error(
    fix_r_utf8_output("\x02\xff\xfe \x03\xff\xfe \x03\xff\xfe")
  )
})
