test_that("str_length is number of characters", {
  expect_equal(str_length("a"), 1)
  expect_equal(str_length("ab"), 2)
  expect_equal(str_length("abc"), 3)
})

test_that("str_length of missing string is missing", {
  expect_equal(str_length(NA), NA_integer_)
  expect_equal(str_length(c(NA, 1)), c(NA, 1))
  expect_equal(str_length("NA"), 2)
})

test_that("str_length of factor is length of level", {
  expect_equal(str_length(factor("a")), 1)
  expect_equal(str_length(factor("ab")), 2)
  expect_equal(str_length(factor("abc")), 3)
})

test_that("str_width returns display width", {
  x <- c("\u0308", "x", "\U0001f60a")
  expect_equal(str_width(x), c(0, 1, 2))
})

test_that("length/width preserve names", {
  x <- c(C = "3", B = "2", A = "1")
  expect_equal(names(str_length(x)), names(x))
  expect_equal(names(str_width(x)), names(x))
})
