Skip to content

Commit

Permalink
Add tests for layout_dedupe_ph_labels() (#589)
Browse files Browse the repository at this point in the history
Test coverage for new file is 100%, increasing total
coverage to 85.4%
  • Loading branch information
markheckmann committed Aug 29, 2024
1 parent baf4556 commit 2feed17
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 0 deletions.
Binary file added tests/testthat/docs_dir/test-pptx-dedupe-ph.pptx
Binary file not shown.
74 changes: 74 additions & 0 deletions tests/testthat/test-pptx-dedupe-ph-labels.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@



test_that("incorrect input formats are detected", {
expect_error(layout_dedupe_ph_labels("file.xxx"), regexp = "'x' must be an 'rpptx' object")
expect_error(has_ph_dupes("file.xxx"), regexp = "'x' must be an 'rpptx' object")
expect_error(.dedupe_phs_in_layout("file.xxx"), regexp = "'layout_file' must be an .xml file")
})



test_that("handling ph dupes function works when there are none", {
x <- read_pptx() # sample PPTX has no dupes
expect_false(has_ph_dupes(x))
. <- capture.output(expect_no_error({
layout_dedupe_ph_labels(x, print_info = TRUE)
layout_dedupe_ph_labels(x, action = "rename", print_info = TRUE)
layout_dedupe_ph_labels(x, action = "delete", print_info = TRUE)
}))
})


test_that("handling ph dupes works", {
file_in <- test_path("docs_dir/test-pptx-dedupe-ph.pptx")

# referencing a duplicate placeholder via its label should throw an error.
# if this should change for some reason, the test fails as we would need to
# check if deduplication is still relevant
x <- read_pptx(file_in)
x <- add_slide(x, layout = "2x2-dupes", master = "Master1")
expect_no_error(ph_with(x, "abc", ph_location_label(ph_label = "Title 1")))
expect_error(ph_with(x, "abc", ph_location_label(ph_label = "Content")))

# action = detect
x_det <- read_pptx(file_in)
expect_true(has_ph_dupes(x_det))
out <- capture.output({
x_det <- layout_dedupe_ph_labels(x_det)
})
expect_true(any(grepl("Content 7.1", out)))
expect_true(has_ph_dupes(x_det))

# action = rename
x_rename <- read_pptx(file_in)
before <- x_rename$slideLayouts$get_xfrm_data()$ph_label
out <- capture.output({
x_rename <- layout_dedupe_ph_labels(x_rename, action = "rename", print_info = TRUE)
})
expect_true(any(grepl("Content 7", out)))
expect_true(any(grepl("Content 7.1", out)))
after <- x_rename$slideLayouts$get_xfrm_data()$ph_label
expect_false(has_ph_dupes(x_rename))
expect_true(any(before != after))
expect_equal(length(before), length(after))

# action = delete
x_delete <- read_pptx(file_in)
before <- x_delete$slideLayouts$get_xfrm_data()$ph_label
out <- capture.output({
x_delete <- layout_dedupe_ph_labels(x_delete, action = "delete", print_info = TRUE)
})
expect_true(any(grepl("Content 7", out)))
after <- x_delete$slideLayouts$get_xfrm_data()$ph_label
expect_false(has_ph_dupes(x_delete))
expect_gt(length(before), length(after))

# annotate base should work with deduped phs
file <- tempfile(fileext = ".pptx")
output_file <- tempfile(fileext = ".pptx")
print(x_rename, target = file)
expect_no_error(annotate_base(file, output_file = output_file))
print(x_delete, target = file)
expect_no_error(annotate_base(file, output_file = output_file))
})

0 comments on commit 2feed17

Please sign in to comment.