Nothing
test_that("safe_character handles NULL", {
expect_null(safe_character(NULL))
})
test_that("safe_character handles character vector", {
expect_equal(safe_character(c("a", "b")), c("a", "b"))
})
test_that("safe_character handles list input", {
# This is the bug scenario: list instead of vector from state restoration
input_list <- list("col1", "col2")
result <- safe_character(input_list)
expect_type(result, "character")
expect_equal(result, c("col1", "col2"))
})
test_that("safe_character handles nested list", {
input_list <- list(list("a"), "b")
result <- safe_character(input_list)
expect_type(result, "character")
expect_equal(result, c("a", "b"))
})
test_that("intersect with safe_character returns character vector", {
# Simulate corrupted state where coder_cols is a list
saved_cols <- list("coder1", "coder2")
available_cols <- c("coder1", "coder2", "coder3")
# Without fix: intersect(list, vector) returns list
bad_result <- intersect(saved_cols, available_cols)
expect_type(bad_result, "list") # This is the bug
# With fix: safe_character ensures character vector
good_result <- safe_character(intersect(safe_character(saved_cols), available_cols))
expect_type(good_result, "character")
expect_equal(good_result, c("coder1", "coder2"))
})
test_that("column subscripting works after safe_character coercion", {
df <- data.frame(
unit_id = 1:3,
coder1 = c("A", "B", "A"),
coder2 = c("A", "B", "B")
)
# Simulate list input (the bug scenario)
unit_id_list <- list("unit_id")
# This would fail: df[[unit_id_list]]
expect_error(df[[unit_id_list]], "invalid subscript type")
# After safe_character coercion, it works
unit_id_safe <- safe_character(unit_id_list)
if (length(unit_id_safe) > 0) unit_id_safe <- unit_id_safe[1]
expect_no_error(df[[unit_id_safe]])
expect_equal(df[[unit_id_safe]], 1:3)
})
test_that("prepare_comparison_data works with safe_character coerced inputs", {
df <- data.frame(
id = 1:5,
coder1 = c("A", "B", "A", "B", "A"),
coder2 = c("A", "A", "B", "B", "A"),
stringsAsFactors = FALSE
)
# Simulate list inputs from corrupted state
unit_id_list <- list("id")
coder_cols_list <- list("coder1", "coder2")
# Coerce to character vectors
unit_id <- safe_character(unit_id_list)
if (length(unit_id) > 0) unit_id <- unit_id[1]
coder_cols <- safe_character(coder_cols_list)
# Should work without error
result <- prepare_comparison_data(df, unit_id, coder_cols)
expect_type(result, "list")
expect_length(result, 2)
expect_named(result, c("coder1", "coder2"))
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.