parse_b <- function(x, ...) { tok <- tokenizer_delim(",", escape_double = FALSE, escape_backslash = TRUE, ...) tokenize(datasource_string(x, 0), tok) } parse_d <- function(x, ...) { tok <- tokenizer_delim(",", escape_double = TRUE, escape_backslash = FALSE, ...) tokenize(datasource_string(x, 0), tok) } test_that("simple sequence parsed correctly", { expect_equal(parse_d("1,2,3"), list(c("1", "2", "3"))) }) test_that("newlines are not tokenised", { expect_equal(parse_d("1\n2"), list("1", "2")) }) test_that("quotes in strings are dropped", { expect_equal(parse_d('"abc",abc'), list(c("abc", "abc"))) expect_equal(parse_b('"abc",abc'), list(c("abc", "abc"))) expect_equal(parse_b("'abc',abc", quote = "'"), list(c("abc", "abc"))) expect_equal(parse_d("'abc',abc", quote = "'"), list(c("abc", "abc"))) }) test_that("problems if unterminated string", { p1 <- problems(parse_d('1,2,"3')) p2 <- problems(parse_b('1,2,"3')) expect_equal(p1$col, 3) expect_equal(p2$col, 3) expect_equal(p1$expected, "closing quote at end of file") expect_equal(p2$expected, "closing quote at end of file") }) test_that("problem if unterminated escape", { p <- problems(parse_b("1\\")) expect_equal(p$row, 1) expect_equal(p$col, 1) }) test_that("empty fields become empty strings", { expect_equal(parse_d(",\n,"), list(c("[EMPTY]", "[EMPTY]"), c("[EMPTY]", "[EMPTY]"))) expect_equal(parse_d(",\n,\n"), list(c("[EMPTY]", "[EMPTY]"), c("[EMPTY]", "[EMPTY]"))) expect_equal(parse_d('""'), list("[EMPTY]")) }) test_that("bare NA becomes missing value", { expect_equal(parse_b('NA,"NA"', quoted_na = FALSE), list(c("[MISSING]", "NA"))) expect_equal(parse_d('NA,"NA"', quoted_na = FALSE), list(c("[MISSING]", "NA"))) }) test_that("quoted NA also becomes missing value", { expect_equal(parse_b('NA,"NA"', quoted_na = TRUE), list(c("[MISSING]", "[MISSING]"))) expect_equal(parse_d('NA,"NA"', quoted_na = TRUE), list(c("[MISSING]", "[MISSING]"))) }) test_that("empty string become missing values", { expect_equal(parse_b('NA,""', na = ""), list(c("NA", "[MISSING]"))) }) test_that("NA with spaces becomes missing value", { expect_equal(parse_b(" NA "), list(c("[MISSING]"))) }) test_that("string can be ended by new line", { expect_equal(parse_d('123,"a"\n'), list(c("123", "a"))) }) test_that("can escape delimeter with backslash", { expect_equal(parse_b("1\\,2"), list("1,2")) }) test_that("doubled quote becomes single quote (with d-escaping)", { expect_equal(parse_d('""""'), list('"')) }) test_that("escaped quoted doesn't terminate string (with b-escaping)", { expect_equal(parse_b('"\\""'), list('"')) })