tests/testthat/test_escape.r

context("KQL: escaping")

# Identifiers ------------------------------------------------------------------

ei <- function(...) unclass(escape(ident(c(...))))

test_that("identifiers are bracket-escaped", {
  expect_equal(ei("x"), "['x']")
})

test_that("identifiers are comma separated", {
  expect_equal(ei("x", "y"), "['x'], ['y']")
})

# Zero-length inputs ------------------------------------------------------

test_that("zero length inputs yield zero length output when not collapsed", {
  expect_equal(kql_vector(kql(), collapse = NULL), kql())
  expect_equal(kql_vector(ident(), collapse = NULL), kql())
})

test_that("zero length inputs yield length-1 output when collapsed", {
  expect_equal(kql_vector(kql(), parens = FALSE, collapse = ""), kql(""))
  expect_equal(kql_vector(kql(), parens = TRUE, collapse = ""), kql("()"))
  expect_equal(kql_vector(ident(), parens = FALSE, collapse = ""), kql(""))
  expect_equal(kql_vector(ident(), parens = TRUE, collapse = ""), kql("()"))
})

# Special values ----------------------------------------------------------------

test_that("missing vaues become null", {
  expect_equal(escape(NA), kql("null"))
  expect_equal(escape(NA_real_), kql("real(null)"))
  expect_equal(escape(NA_integer_), kql("int(null)"))
  expect_equal(escape(NA_character_), kql("''"))
})

test_that("-Inf and Inf are expanded and quoted", {
  expect_equal(escape(Inf), kql("'real(+inf)'"))
  expect_equal(escape(-Inf), kql("'real(-inf)'"))
})

test_that("can escape logical values", {
  expect_equal(escape(TRUE), kql("true"))
  expect_equal(escape(FALSE), kql("false"))
  expect_equal(escape(NA), kql("null"))
})

test_that("can escape integer64 values", {
  skip_if_not_installed("bit64")

  expect_equal(escape(bit64::as.integer64(NA)), kql("long(null)"))
  expect_equal(escape(bit64::as.integer64("123456789123456789")), kql("123456789123456789"))
})

# Times -------------------------------------------------------------------

test_that("times are converted to ISO 8601", {
  x <- ISOdatetime(2000, 1, 2, 3, 4, 5, tz = "America/Chicago")
  expect_equal(escape(x), kql("'2000-01-02T09:04:05Z'"))
})
Azure/AzureKusto documentation built on Oct. 16, 2023, 7:04 p.m.