tests/testthat/test-emoji.R

test_that("has_emoji detects emojis correctly", {
  expect_true(has_emoji("Hello \U0001F44B"))
  expect_true(has_emoji("\U0001F600"))
  expect_true(has_emoji("Text with \U0001F30D earth"))

  expect_false(has_emoji("Hello world"))
  expect_false(has_emoji("No emojis here!"))
  expect_false(has_emoji(""))

  result <- has_emoji(c("No emoji", "Has \U0001F600", "Also none"))
  expect_equal(result, c(FALSE, TRUE, FALSE))
})

test_that("has_emoji handles edge cases", {
  expect_equal(has_emoji(NULL), logical(0))
  expect_equal(has_emoji(character(0)), logical(0))

  result <- has_emoji(c("test", NA, "\U0001F600"))
  expect_equal(result[1], FALSE)
  expect_equal(result[3], TRUE)
})

test_that("extract_emojis extracts emojis correctly", {
  result <- extract_emojis("Hello \U0001F44B World \U0001F30D!")
  expect_equal(length(result), 1)
  expect_equal(result[[1]], c("\U0001F44B", "\U0001F30D"))

  result <- extract_emojis("No emojis")
  expect_equal(result[[1]], character(0))

  result <- extract_emojis(c("No emoji", "\U0001F600\U0001F601"))
  expect_equal(length(result), 2)
  expect_equal(result[[1]], character(0))
  expect_equal(result[[2]], c("\U0001F600", "\U0001F601"))
})

test_that("extract_emojis handles edge cases", {
  expect_equal(extract_emojis(NULL), list())
  expect_equal(extract_emojis(character(0)), list())

  result <- extract_emojis(c("test", NA))
  expect_equal(result[[1]], character(0))
  expect_equal(result[[2]], character(0))
})

test_that("count_emojis counts correctly", {
  expect_equal(count_emojis("Hello world"), 0L)
  expect_equal(count_emojis("Hello \U0001F44B"), 1L)
  expect_equal(count_emojis("\U0001F600\U0001F601\U0001F602"), 3L)

  result <- count_emojis(c("No emoji", "\U0001F600", "\U0001F600\U0001F601"))
  expect_equal(result, c(0L, 1L, 2L))
})

test_that("count_emojis handles edge cases", {
  expect_equal(count_emojis(NULL), integer(0))
  expect_equal(count_emojis(character(0)), integer(0))
  expect_equal(count_emojis(NA_character_), 0L)
})

test_that("remove_emojis removes emojis correctly", {
  expect_equal(remove_emojis("Hello \U0001F44B World!"), "Hello  World!")
  expect_equal(remove_emojis("No emojis"), "No emojis")
  expect_equal(remove_emojis("\U0001F600\U0001F601\U0001F602"), "")

  result <- remove_emojis(c("No emoji", "Has \U0001F600 emoji"))
  expect_equal(result, c("No emoji", "Has  emoji"))
})

test_that("remove_emojis handles edge cases", {
  expect_equal(remove_emojis(NULL), character(0))
  expect_equal(remove_emojis(character(0)), character(0))
})

test_that("replace_emojis replaces emojis correctly", {
  expect_equal(
    replace_emojis("Hello \U0001F44B World!", replacement = "[emoji]"),
    "Hello [emoji] World!"
  )
  expect_equal(
    replace_emojis("\U0001F600\U0001F601", replacement = "*"),
    "**"
  )
  expect_equal(
    replace_emojis("No emojis", replacement = "[emoji]"),
    "No emojis"
  )
})

test_that("replace_emojis handles edge cases", {
  expect_equal(replace_emojis(NULL), character(0))
  expect_equal(replace_emojis(character(0)), character(0))
})

test_that("emoji functions work with various emoji types", {
  emoticons <- "\U0001F600\U0001F601\U0001F602"
  expect_true(has_emoji(emoticons))
  expect_equal(count_emojis(emoticons), 3L)

  transport <- "\U0001F680\U0001F697"
  expect_true(has_emoji(transport))
  expect_equal(count_emojis(transport), 2L)

  misc_symbols <- "\U00002600\U00002601"
  expect_true(has_emoji(misc_symbols))
  expect_equal(count_emojis(misc_symbols), 2L)

  supplemental <- "\U0001F90D\U0001F90E"
  expect_true(has_emoji(supplemental))
  expect_equal(count_emojis(supplemental), 2L)
})

test_that("emoji functions handle mixed content", {
  mixed <- "Great video! \U0001F44D Check this out: example.com \U0001F680 #awesome"
  expect_true(has_emoji(mixed))
  expect_equal(count_emojis(mixed), 2L)
  expect_equal(
    extract_emojis(mixed)[[1]],
    c("\U0001F44D", "\U0001F680")
  )
  expect_equal(
    remove_emojis(mixed),
    "Great video!  Check this out: example.com  #awesome"
  )
})

Try the tuber package in your browser

Any scripts or data that you put into this service are public.

tuber documentation built on March 25, 2026, 9:08 a.m.