Nothing
test_that("ph_labels with same order as in layout_properties()", {
x <- read_pptx()
l1 <- layout_rename_ph_labels(x, "Comparison")
l2 <- layout_properties(x, "Comparison")$ph_label
expect_equal(l1, l2)
})
test_that("incorrect inputs are detected", {
opts <- options(cli.num_colors = 1) # suppress colors for error message check
on.exit(options(opts))
x <- read_pptx()
layout <- "Comparison"
# unnamed args in renaming (dots)
error_msg <- "Unnamed arguments are not allowed."
expect_error(layout_rename_ph_labels(x, layout, NULL, "xxxx"), error_msg)
expect_error(layout_rename_ph_labels(x, layout, .dots = list("xxxx")), error_msg)
expect_error(layout_rename_ph_labels(x, layout, NULL, "xxx", .dots = list(a = "xxxx")), error_msg)
expect_error(layout_rename_ph_labels(x, layout, "xxx" = "a", .dots = list("xxxx")), error_msg)
# unknown labels
error_msg <- "Can't rename labels that don't exist."
expect_error(layout_rename_ph_labels(x, layout, "xxxx" = "..."), error_msg)
expect_error(layout_rename_ph_labels(x, layout, "xxxx" = "...", "yyy" = "..."), error_msg)
expect_error(layout_rename_ph_labels(x, layout, .dots = list("xxxx" = "...")), error_msg)
# unknown ids
error_msg <- "Can't rename ids that don't exist."
expect_error(layout_rename_ph_labels(x, layout, "1" = "..."), error_msg)
expect_error(layout_rename_ph_labels(x, layout, "1" = "...", "0" = "..."), error_msg)
expect_error(layout_rename_ph_labels(x, layout, .dots = list("1" = "...")), error_msg)
# duplicate rename entries
error_msg <- "Each id or label must only have one rename entry only."
expect_error(layout_rename_ph_labels(x, layout, "Title 1" = "a", "Title 1" = "b"), error_msg)
expect_error(layout_rename_ph_labels(x, layout, "2" = "a", "2" = "b"), error_msg)
expect_error(layout_rename_ph_labels(x, layout, .dots = list("Title 1" = "a", "Title 1" = "b")), error_msg)
expect_error(layout_rename_ph_labels(x, layout, "2" = "a", .dots = list("2" = "b")), error_msg)
# label and id collision
error_msg <- "Either specify the label OR the id of the ph to rename, not both."
expect_error(layout_rename_ph_labels(x, layout, "Title 1" = "a", "2" = "b"), error_msg)
expect_error(layout_rename_ph_labels(x, layout, "Title 1" = "a", "2" = "b"), error_msg)
expect_error(layout_rename_ph_labels(x, layout, .dots = list("Title 1" = "a", "2" = "b")), error_msg)
expect_error(layout_rename_ph_labels(x, layout, "Date Placeholder 6" = "a", "7" = "b", .dots = list("Title 1" = "a", "2" = "b")), error_msg)
})
test_that("ph renaming works as expected", {
opts <- options(cli.num_colors = 1) # suppress colors for error message check
on.exit(options(opts))
x <- read_pptx()
layout <- "Comparison"
# rename using key-value pairs: 'old label' = 'new label' or 'id' = 'new label'
layout_rename_ph_labels(x, layout, "Title 1" = "LABEL MATCHED") # label matching
layout_rename_ph_labels(x, layout, "3" = "ID MATCHED") # id matching
layout_rename_ph_labels(x, layout, "Date Placeholder 6" = "DATE", "8" = "FOOTER") # label and id
layout_properties(x, layout)$ph_label
x <- read_pptx()
idx <- c(1, 2, 6, 7)
l <- list("Date Placeholder 6" = "idx_6", "8" = "idx_7", "Title 1" = "idx_1", "3" = "idx_2") # as list
layout_rename_ph_labels(x, layout, .dots = l)
expect_equal(layout_properties(x, layout)$ph_label[idx], paste0("idx_", idx))
x <- read_pptx()
l <- c("Date Placeholder 6" = "idx_6", "8" = "idx_7", "Title 1" = "idx_1", "3" = "idx_2") # as vector
layout_rename_ph_labels(x, layout, .dots = l)
expect_equal(layout_properties(x, layout)$ph_label[idx], paste0("idx_", idx))
x <- read_pptx()
l <- list("Date Placeholder 6" = "idx_6", "3" = "idx_2")
layout_rename_ph_labels(x, layout, "8" = "idx_7", "Title 1" = "idx_1", .dots = l) # mix ... and .dots
expect_equal(layout_properties(x, layout)$ph_label[idx], paste0("idx_", idx))
# rename via rhs assignment and ph index (not id!)
x <- read_pptx()
rhs <- LETTERS[1:8]
layout_rename_ph_labels(x, layout) <- rhs
expect_equal(layout_properties(x, layout)$ph_label, rhs)
rhs <- paste("CHANGED", 1:3)
ph_label_check <- layout_properties(x, layout)$ph_label
ph_label_check[1:3] <- rhs
layout_rename_ph_labels(x, layout)[1:3] <- rhs
expect_equal(layout_properties(x, layout)$ph_label, ph_label_check)
# rename via rhs assignment and ph id (not index)
lp_old <- ph_label_check <- layout_properties(x, layout)
ids <- c(2, 4, 5)
idx <- match(ids, lp_old$id) # row in layout properties
rhs <- paste("ID =", ids)
ph_label_check <- lp_old$ph_label
ph_label_check[idx] <- rhs
layout_rename_ph_labels(x, layout, id = ids) <- rhs
lp_new <- layout_properties(x, layout)
expect_equal(lp_new$ph_label, ph_label_check)
})
test_that("renaming duplicate labels replaces 1st occurrence only", {
opts <- options(cli.num_colors = 1) # suppress colors for error message check
on.exit(options(opts))
file <- test_path("docs_dir", "test-pptx-dedupe-ph.pptx")
x <- read_pptx(file)
# rename first label occurrence only and issue warning (1 duped label)
layout <- "2-dupes"
ph_label_check <- layout_properties(x, layout)$ph_label
idx <- which(ph_label_check == "Content 7") # exists twice
new_value <- "xxxx"
warn_msg <- "When renaming a label with duplicates, only the first occurrence is renamed."
expect_warning(layout_rename_ph_labels(x, layout, "Content 7" = new_value), warn_msg)
ph_label_new <- layout_properties(x, layout)$ph_label
ph_label_check[idx[1]] <- new_value # only first occurrence is replaced
expect_equal(ph_label_check, ph_label_new)
# rename first label occurrence only and issue warning (2 duped labels)
layout <- "2x2-dupes"
ph_label_check <- layout_properties(x, layout)$ph_label
ii <- which(duplicated(ph_label_check, fromLast = TRUE)) # index of 1st occurrence
dupes <- ph_label_check[ii]
vals <- LETTERS[seq_along(dupes)]
names(vals) <- dupes
warn_msg_1 <- "When renaming a label with duplicates, only the first occurrence is renamed."
warn_msg_2 <- "Renaming 2 ph labels with duplicates"
warn_msg <- paste0(warn_msg_1, ".*", warn_msg_2)
expect_warning(layout_rename_ph_labels(x, layout, .dots = vals), warn_msg)
ph_label_check[ii] <- vals
ph_label_new <- layout_properties(x, layout)$ph_label
expect_equal(ph_label_check, ph_label_new)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.