From a5fe0d6aabf4a18f9be772d0a15f2d9b82eaa139 Mon Sep 17 00:00:00 2001 From: pepijn-devries Date: Sat, 22 Nov 2025 00:34:15 +0100 Subject: [PATCH 1/3] Improved test coverage --- DESCRIPTION | 2 +- NEWS.md | 2 +- tests/testthat/test_directory.R | 7 +++++-- tests/testthat/test_entryinfo.R | 1 + tests/testthat/test_move.R | 21 +++++++++++++++++++++ tests/testthat/test_remove.R | 12 ++++++++++++ 6 files changed, 41 insertions(+), 4 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 14b2576..a7760da 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: adfExplorer Title: Access and Manipulate Amiga Disk Files -Version: 2.0.3.0006 +Version: 2.0.3.0007 Authors@R: c( person("Pepijn", "de Vries", role = c("aut", "cre"), diff --git a/NEWS.md b/NEWS.md index 2892600..cfef1a3 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -adfExplorer 2.0.3.0006 +adfExplorer 2.0.3.0007 ------------- * Added `get_adf_bitmap()`, `adf_dumpster_dive()` and diff --git a/tests/testthat/test_directory.R b/tests/testthat/test_directory.R index 5ca42eb..3345de5 100644 --- a/tests/testthat/test_directory.R +++ b/tests/testthat/test_directory.R @@ -25,11 +25,14 @@ test_that("File existence can be tested for multiple directories", { }) }) -test_that("A new directory can be created using a virtual path", { +test_that("A new directory can be created using a virtual path or a character", { expect_no_error({ my_device <- demo_adf(write_protected = FALSE) target <- virtual_path(my_device, "foobar") - make_adf_dir(my_device, target) + target2 <- virtual_path(my_device, "raboof") + make_adf_dir(target) + make_adf_dir(my_device, target2) + make_adf_dir(my_device, "barfoo") close(my_device) }) }) diff --git a/tests/testthat/test_entryinfo.R b/tests/testthat/test_entryinfo.R index 4976d18..395f3d4 100644 --- a/tests/testthat/test_entryinfo.R +++ b/tests/testthat/test_entryinfo.R @@ -113,6 +113,7 @@ test_that("Entries can be listed", { entries <- list_adf_entries(my_device) entries <- list_adf_entries(my_device, "s") entries <- list_adf_entries(my_device, virtual_path(my_device, "devs")) + entries <- list_adf_entries(virtual_path(my_device, "devs")) close(my_device) }) }) diff --git a/tests/testthat/test_move.R b/tests/testthat/test_move.R index 1788e4b..44a31ba 100644 --- a/tests/testthat/test_move.R +++ b/tests/testthat/test_move.R @@ -19,6 +19,17 @@ test_that("Copy vp to character works", { }) }) +test_that("Copy character to vp works", { + expect_no_error({ + my_device <- demo_adf(write_protected = FALSE) + f <- tempfile() + file.create(f) + vp <- virtual_path(my_device, "DF0:") + copy_adf_entry(f, vp) + close(my_device) + }) +}) + test_that("Move character to vp works", { expect_no_error({ my_device <- demo_adf(write_protected = FALSE) @@ -39,3 +50,13 @@ test_that("Move vp to vp works", { close(my_device) }) }) + +test_that("Move vp to character works", { + expect_no_error({ + my_device <- demo_adf(write_protected = FALSE) + vp <- virtual_path(my_device, "s/startup-sequence") + f <- tempdir() + move_adf_entry(vp, f) + close(my_device) + }) +}) diff --git a/tests/testthat/test_remove.R b/tests/testthat/test_remove.R index 56d7e2c..9844469 100644 --- a/tests/testthat/test_remove.R +++ b/tests/testthat/test_remove.R @@ -1,3 +1,15 @@ +test_that("File can be removed from dircache disk", { + expect_no_error({ + my_device <- create_adf_device(tempfile(fileext = ".adf"), write_protected = FALSE) + prepare_adf_device(my_device, "foobar", dircache = TRUE) + con <- adf_file_con(virtual_path(my_device, "dummy"), writable = TRUE) + writeBin(raw(100), con) + close(con) + remove_adf_entry(my_device, "dummy") + close(my_device) + }) +}) + test_that("Current directory can be removed", { expect_no_error({ my_device <- demo_adf(write_protected = FALSE) From 665c1e1c5869673ff5b82f352da5d2a49413cfae Mon Sep 17 00:00:00 2001 From: pepijn-devries Date: Sat, 22 Nov 2025 11:49:44 +0100 Subject: [PATCH 2/3] Fix in test --- tests/testthat/test_move.R | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/testthat/test_move.R b/tests/testthat/test_move.R index 44a31ba..42fda34 100644 --- a/tests/testthat/test_move.R +++ b/tests/testthat/test_move.R @@ -13,9 +13,9 @@ test_that("Copy vp to character works", { my_device <- demo_adf() vp <- virtual_path(my_device, "s/startup-sequence") check_dest <- file.path(tempdir(), adf_entry_name(vp)) - if (!file.exists(check_dest)) - copy_adf_entry(vp, tempdir()) + copy_adf_entry(vp, tempdir()) close(my_device) + rem <- file.remove(file.path(tempdir(), "startup-sequence")) }) }) @@ -58,5 +58,6 @@ test_that("Move vp to character works", { f <- tempdir() move_adf_entry(vp, f) close(my_device) + rem <- file.remove(file.path(tempdir(), "startup-sequence")) }) }) From 98d3b3b36d69ac568e438f0b08c48ba2ada55108 Mon Sep 17 00:00:00 2001 From: pepijn-devries Date: Sat, 22 Nov 2025 11:59:13 +0100 Subject: [PATCH 3/3] Check entry before salvaging it --- src/undelete.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/undelete.cpp b/src/undelete.cpp index cb703bc..74208e2 100644 --- a/src/undelete.cpp +++ b/src/undelete.cpp @@ -56,7 +56,11 @@ SEXP undelete_adf_entry(SEXP extptr, int vol_num, int sect) { check_volume_number(dev, vol_num); AdfVolume * vol = dev->volList[vol_num]; - RETCODE rc = adfUndelEntry(vol, dest_sect, sect); + RETCODE rc; + + rc = adfCheckEntry(vol, sect, 0); + if (rc == RC_OK) + rc = adfUndelEntry(vol, dest_sect, sect); if (rc != RC_OK) stop("Failed to salvage entry");