From 6eb5108ec4574f0ed05700fb4845f6e9a70f3c4a Mon Sep 17 00:00:00 2001 From: Leonidas Zhak <70497898+LeonidasZhak@users.noreply.github.com> Date: Sat, 6 Jun 2026 21:20:11 +0800 Subject: [PATCH] test: add NA, empty string, and mixed whitespace tests for str_trim/str_squish Add edge-case tests for data cleaning scenarios: - NA passthrough in str_trim (all side variants) and str_squish - Empty string and whitespace-only string handling - Newlines, CRLF, and mixed whitespace in str_squish The DESCRIPTION promises consistent NA handling but these cases were untested. str_trunc has analogous NA tests (test-trunc.R:1-10). --- tests/testthat/test-trim.R | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tests/testthat/test-trim.R b/tests/testthat/test-trim.R index a4b45972..61fb1f73 100644 --- a/tests/testthat/test-trim.R +++ b/tests/testthat/test-trim.R @@ -21,6 +21,36 @@ test_that("str_squish removes excess spaces from all parts of string", { expect_equal(str_squish("\ta\t bc\t"), "a bc") }) +test_that("str_trim handles NA values", { + expect_equal(str_trim(NA), NA_character_) + expect_equal(str_trim(c(NA, " abc ")), c(NA, "abc")) + expect_equal(str_trim(NA, "left"), NA_character_) + expect_equal(str_trim(NA, "right"), NA_character_) +}) + +test_that("str_squish handles NA values", { + expect_equal(str_squish(NA), NA_character_) + expect_equal(str_squish(c(NA, " a b ")), c(NA, "a b")) +}) + +test_that("str_trim handles empty strings", { + expect_equal(str_trim(""), "") + expect_equal(str_trim(" "), "") +}) + +test_that("str_squish handles empty strings", { + expect_equal(str_squish(""), "") + expect_equal(str_squish(" "), "") +}) + +test_that("str_squish handles newlines and mixed whitespace", { + expect_equal(str_squish("a\n\nb"), "a b") + expect_equal(str_squish("\na\n"), "a") + expect_equal(str_squish("a\r\nb"), "a b") + expect_equal(str_squish("a\t\n b"), "a b") + expect_equal(str_squish("\t\n a \n\t b \t\n"), "a b") +}) + test_that("trimming functions preserve names", { x <- c(C = "3", B = "2", A = "1") expect_equal(names(str_trim(x)), names(x))