test_that("xplain_opt() returns all options when called without arguments", { result <- xplain_opt() expect_type(result, "list") expect_true(all(c("verbose", "progress") %in% names(result))) }) test_that("xplain_opt() gets single option value", { # verbose defaults to TRUE options("xplain.verbose" = NULL) Sys.unsetenv("XPLAIN_VERBOSE") expect_true(xplain_opt("verbose")) # progress defaults to FALSE options("xplain.progress" = NULL) Sys.unsetenv("XPLAIN_PROGRESS") expect_false(xplain_opt("progress")) }) test_that("xplain_opt() gets multiple option values", { result <- xplain_opt("verbose", "progress") expect_type(result, "list") expect_length(result, 2) expect_named(result, c("verbose", "progress")) }) test_that("xplain_opt() sets options and returns old values", { # Store current values old_verbose <- xplain_opt("verbose") # Set new value returned <- xplain_opt(verbose = FALSE) expect_type(returned, "list") expect_length(returned, 1) expect_equal(returned$verbose, old_verbose) # Verify it was set expect_false(xplain_opt("verbose")) # Restore xplain_opt(verbose = old_verbose) expect_equal(xplain_opt("verbose"), old_verbose) }) test_that("xplain_opt() sets multiple options", { # Store current values old <- xplain_opt() # Set multiple xplain_opt(verbose = FALSE, progress = TRUE) expect_false(xplain_opt("verbose")) expect_true(xplain_opt("progress")) # Restore xplain_opt(verbose = old$verbose, progress = old$progress) }) test_that("R option takes precedence over environment variable", { # Store current old_verbose <- xplain_opt("verbose") # Set env to TRUE, option to FALSE Sys.setenv("XPLAIN_VERBOSE" = "TRUE") options("xplain.verbose" = FALSE) expect_false(xplain_opt("verbose")) # Set env to FALSE, option to TRUE Sys.setenv("XPLAIN_VERBOSE" = "FALSE") options("xplain.verbose" = TRUE) expect_true(xplain_opt("verbose")) # Cleanup Sys.unsetenv("XPLAIN_VERBOSE") options("xplain.verbose" = old_verbose) }) test_that("environment variable is used when R option is not set", { # Store current old_verbose <- xplain_opt("verbose") # Clear R option, set env options("xplain.verbose" = NULL) Sys.setenv("XPLAIN_VERBOSE" = "FALSE") expect_false(xplain_opt("verbose")) Sys.setenv("XPLAIN_VERBOSE" = "TRUE") expect_true(xplain_opt("verbose")) # Cleanup Sys.unsetenv("XPLAIN_VERBOSE") options("xplain.verbose" = old_verbose) }) test_that("xplain_opt() errors on unknown options", { expect_error(xplain_opt("nonexistent"), "subset") expect_error(xplain_opt(nonexistent = TRUE), "subset") })