tests/testthat/test-read-file.R

# df <- dplyr::tibble(français = "élève")
# write.csv(df,
#   "tests/testthat/enc-iso-8859-1.txt",
#   fileEncoding = "ISO-8859-1",
#   row.names = FALSE,
#   quote = FALSE)

test_that("read_file respects encoding", {
  skip_on_os("solaris")

  x <- read_file("enc-iso-8859-1.txt", locale(encoding = "ISO-8859-1"))
  expect_equal(substr(x, 5, 5), "\u00e7")
})

sample_text_str <- "abc\n123" # contents of sample_text.txt
eol_cr_text <- "x y\n1 a\n2 b\n3 c\n" # contents of eol_cr.txt

test_that("read_file works with a local text file passed as character", {
  expect_equal(read_file("sample_text.txt"), sample_text_str)
})

test_that("read_file works with a local text file, skipping one line", {
  expect_equal(
    read_file(datasource("sample_text.txt", skip = 1)),
    paste(tail(strsplit(sample_text_str, "\n")[[1]], -1), collapse = "\n")
  )
})

test_that("read_file works with a character datasource", {
  expect_equal(read_file(sample_text_str), sample_text_str)
})

test_that("read_file works with a connection to a local file", {
  con <- file("sample_text.txt", "rb")
  on.exit(close(con), add = TRUE)
  expect_equal(read_file(con), sample_text_str)
})

test_that("read_file works with a raw datasource", {
  expect_equal(read_file(charToRaw(sample_text_str)), sample_text_str)
})

test_that("read_file works with compressed files", {
  expect_equal(read_file("eol-cr.txt.gz"), eol_cr_text)
  expect_equal(read_file("eol-cr.txt.bz2"), eol_cr_text)
  expect_equal(read_file("eol-cr.txt.xz"), eol_cr_text)
  expect_equal(read_file("eol-cr.txt.zip"), eol_cr_text)
})

test_that("read_file works via https", {
  skip_on_cran()

  url <- "https://raw.githubusercontent.com/tidyverse/readr/main/tests/testthat/eol-cr.txt"
  expect_equal(read_file(url), eol_cr_text)
})

test_that("read_file works via https on gz file", {
  skip_on_cran()

  url <- "https://raw.githubusercontent.com/tidyverse/readr/main/tests/testthat/eol-cr.txt.gz"
  expect_equal(read_file(url), eol_cr_text)
})

test_that("read_file returns \"\" on an empty file", {
  expect_equal(read_file("empty-file"), "")
})

# read_file_raw ---------------------------------------------------------------

test_that("read_file_raw works with a local text file", {
  expect_equal(read_file_raw("sample_text.txt"), charToRaw("abc\n123"))
})

test_that("read_file_raw works with a character datasource", {
  expect_equal(read_file_raw("abc\n123"), charToRaw("abc\n123"))
})

test_that("read_file_raw returns raw() on an empty file", {
  expect_equal(read_file_raw("empty-file"), raw())
})
tidyverse/readr documentation built on Jan. 27, 2024, 11:59 p.m.