test_that("file_create works with new and existing files", { x1 <- file_create(tempfile()) expect_true(file_exists(x1)) expect_error(file_create(x1), NA) expect_error(file_create(NA), class = "invalid_argument") unlink(x1) }) test_that("dir_create works with new and existing files", { x1 <- dir_create(tempfile()) expect_true(file_exists(x1)) expect_error(dir_create(x1), NA) expect_error(dir_create(NA), class = "invalid_argument") unlink(x1, recursive = TRUE) }) test_that("file_create works with multiple path arguments", { mkdirp(tmp <- tempfile()) on.exit(unlink(tmp, recursive = TRUE), add = TRUE) x1 <- file_create(tmp, "foo") expect_equal(x1, path(tmp, "foo")) expect_true(file_exists(x1)) }) test_that("dir_create works with multiple path arguments", { x1 <- dir_create(tempdir(), "foo", "bar") x2 <- dir_create(tempdir(), "foo", "baz", recurse = FALSE) expect_equal(x1, path(tempdir(), "foo", "bar")) expect_equal(x2, path(tempdir(), "foo", "baz")) expect_true(dir_exists(x1)) expect_true(dir_exists(x2)) unlink(x1) unlink(x2) }) test_that("dir_create sets the mode properly", { skip_on_cran() skip_on_os("windows") x1 <- dir_create(tempfile(), mode = "775") expect_true(file_exists(x1)) expect_equal(as.character(file_info(x1)$permissions), "rwxrwxr-x") unlink(x1, recursive = TRUE) }) test_that("dir_create works with absolute paths and recurse = FALSE (#204)", { x1 <- dir_create(path_abs(tempfile()), recurse = FALSE) expect_true(file_exists(x1)) unlink(x1, recursive = TRUE) }) test_that("dir_create fails silently if the directory or link exists and fails if a file exists", { with_dir_tree(c("foo/bar" = ""), { expect_error_free(dir_create("foo")) expect_error(dir_create("foo/bar"), class = "EEXIST") }) }) test_that("dir_create fails with EACCES if it cannot create the directory", { skip_on_os("windows") skip_on_cran() if (Sys.info()[["effective_user"]] == "root") skip("root user") with_dir_tree("foo", { # Set current directly as read-only file_chmod(".", "u-w") expect_error(dir_create("bar"), class = "EACCES") }) }) test_that("link_create does not modify existing links", { # Windows does not currently support file based symlinks skip_on_os("windows") x <- dir_create(tempfile()) dir_create(path(x, "dir1")) dir_create(path(x, "dir2")) link_create(path(x, "dir1"), path(x, "link")) expect_error(link_create(path(x, "dir2"), path(x, "link")), "file already exists", class = "EEXIST") expect_equal(link_path(path(x, "link")), path(x, "dir1")) expect_error(link_create(NA), class = "invalid_argument") expect_error(link_create(path(x, "dir2"), NA), class = "invalid_argument") })