test_that("has_file", { wd <- normalizePath(getwd(), winslash = "/") hierarchy <- function(n = 0L) { do.call(file.path, list(wd, "hierarchy", "a", "b", "c")[seq_len(n + 1L)]) } stop_path <- hierarchy(1L) path <- hierarchy(4L) local_mocked_bindings(is_fs_root = function(x) x == stop_path) expect_equal( find_root_file("c", criterion = "b/a", path = path), file.path(hierarchy(2L), "c") ) # Absolute paths are stripped expect_equal( find_root_file("/x", "y", criterion = "b/a", path = path), file.path("/x", "y") ) expect_identical( find_root_file("c", NA, criterion = "b/a", path = path), NA_character_ ) expect_identical( find_root_file("c", character(), criterion = "b/a", path = path), character() ) expect_error( find_root_file(letters[1:2], letters[1:3], criterion = "a", path = path) ) expect_error( find_root_file(letters[1:2], character(), criterion = "a", path = path) ) expect_error( find_root_file(c("b", "/x"), "c", criterion = "a", path = path), "absolute and relative" ) })