Skip to content

Commit f253232

Browse files
committed
Improve case construction
And use `case` as suffix
1 parent 4a26a7a commit f253232

File tree

6 files changed

+70
-56
lines changed

6 files changed

+70
-56
lines changed

R/cases-ui.R

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#' @export
99
manage_cases <- function(package = ".", filter = NULL) {
1010
cases <- collect_cases(package, filter = filter)
11-
cases <- filter_cases(cases, c("case_new", "case_mismatch", "case_orphaned"))
11+
cases <- filter_cases(cases, c("new_case", "mismatch_case", "orphaned_case"))
1212

1313
vdiffrApp <- shiny::shinyApp(
1414
ui = vdiffrUi(cases),
@@ -27,7 +27,7 @@ manage_cases <- function(package = ".", filter = NULL) {
2727
vdiffrAddin <- function() {
2828
pkg_path <- rstudioapi::getActiveProject() %||% "."
2929
cases <- collect_cases(pkg_path)
30-
cases <- filter_cases(cases, c("case_new", "case_mismatch", "case_orphaned"))
30+
cases <- filter_cases(cases, c("new_case", "mismatch_case", "orphaned_case"))
3131

3232
vdiffrApp <- shiny::shinyApp(
3333
ui = vdiffrUi(cases),

R/cases.R

Lines changed: 41 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -55,27 +55,32 @@ orphaned_cases <- function(cases) {
5555
orphans_paths <- svg_paths[is_orphan]
5656
orphans_names <- map_chr(orphans_paths, ~str_trim_ext(basename(.x)))
5757

58-
args <- list(set_names(orphans_names), orphans_paths, orphans_testcases)
59-
orphaned_cases <- purrr::pmap(args, case_orphaned)
58+
cases <- purrr::transpose(list(
59+
name = orphans_names,
60+
path = orphans_paths,
61+
testcase = orphans_testcases,
62+
verbose = rep_along(orphans_names, FALSE)
63+
))
64+
orphaned_cases <- purrr::map(cases, orphaned_case)
6065
cases(orphaned_cases, pkg_path)
6166
}
6267

6368
#' @rdname collect_cases
6469
#' @export
6570
collect_new_cases <- function(package = ".") {
66-
filter_cases(collect_cases(package), "case_new")
71+
filter_cases(collect_cases(package), "new_case")
6772
}
6873

6974
#' @rdname collect_cases
7075
#' @export
7176
collect_mismatched_cases <- function(package = ".") {
72-
filter_cases(collect_cases(package), "case_mismatched")
77+
filter_cases(collect_cases(package), "mismatch_case")
7378
}
7479

7580
#' @rdname collect_cases
7681
#' @export
7782
collect_orphaned_cases <- function(package = ".") {
78-
filter_cases(collect_cases(package), "case_orphaned")
83+
filter_cases(collect_cases(package), "orphaned_case")
7984
}
8085

8186
#' Cases validation
@@ -90,7 +95,7 @@ collect_orphaned_cases <- function(package = ".") {
9095
#' @export
9196
validate_cases <- function(cases = collect_new_cases()) {
9297
stopifnot(is_cases(cases))
93-
cases <- filter_cases(cases, c("case_new", "case_mismatch"))
98+
cases <- filter_cases(cases, c("new_case", "mismatch_case"))
9499

95100
pkg_path <- attr(cases, "pkg_path")
96101
if (is.null(pkg_path)) {
@@ -125,7 +130,7 @@ delete_orphaned_cases <- function(cases = collect_orphaned_cases()) {
125130
stop("Internal error: Package path is missing", call. = FALSE)
126131
}
127132

128-
cases <- filter_cases(cases, "case_orphaned")
133+
cases <- filter_cases(cases, "orphaned_case")
129134
paths <- map_chr(cases, "testcase")
130135
walk(paths, file.remove)
131136
}
@@ -152,19 +157,19 @@ c.cases <- function(..., recursive = FALSE) {
152157
print.cases <- function(x, ...) {
153158
cat(sprintf("<cases>: %s\n", length(x)))
154159

155-
mismatched <- filter_cases(x, "case_mismatched")
160+
mismatched <- filter_cases(x, "mismatch_case")
156161
if (length(mismatched) > 0) {
157162
cat("\nMismatched:\n")
158163
print_cases_names(mismatched)
159164
}
160165

161-
new <- filter_cases(x, "case_new")
166+
new <- filter_cases(x, "new_case")
162167
if (length(new) > 0) {
163168
cat("\nNew:\n")
164169
print_cases_names(new)
165170
}
166171

167-
orphaned <- filter_cases(x, "case_orphaned")
172+
orphaned <- filter_cases(x, "orphaned_case")
168173
if (length(orphaned) > 0) {
169174
figs_path <- file.path(attr(x, "pkg_path"), "tests")
170175

@@ -192,24 +197,31 @@ filter_cases <- function(cases, type) {
192197
cases(filtered, attr(cases, "pkg_path"), attr(cases, "deps"))
193198
}
194199

195-
make_case_constructor <- function(class) {
196-
classes <- c(paste0("case_", class), "case")
197-
function(name, path, testcase) {
198-
case <- list(
199-
name = name,
200-
path = path,
201-
testcase = testcase
202-
)
203-
structure(case, class = classes)
204-
}
200+
case <- function(case) {
201+
set_attrs(case, class = "case")
202+
}
203+
mismatch_case <- function(case) {
204+
set_attrs(case, class = c("mismatch_case", "case"))
205+
}
206+
new_case <- function(case) {
207+
set_attrs(case, class = c("new_case", "case"))
208+
}
209+
orphaned_case <- function(case) {
210+
set_attrs(case, class = c("orphaned_case", "case"))
211+
}
212+
success_case <- function(case) {
213+
set_attrs(case, class = c("success_case", "case"))
205214
}
206215

207-
case_mismatch <- make_case_constructor("mismatch")
208-
case_new <- make_case_constructor("new")
209-
case_orphaned <- make_case_constructor("orphaned")
210-
case_success <- make_case_constructor("success")
211-
212-
is_case <- function(case) inherits(case, "case")
213-
is_case_mismatch <- function(case) inherits(case, "case_mismatch")
214-
is_case_new <- function(case) inherits(case, "case_new")
215-
is_case_orphaned <- function(case) inherits(case, "case_orphaned")
216+
is_case <- function(case) {
217+
inherits(case, "case")
218+
}
219+
is_mismatch_case <- function(case) {
220+
inherits(case, "mismatch_case")
221+
}
222+
is_new_case <- function(case) {
223+
inherits(case, "new_case")
224+
}
225+
is_orphaned_case <- function(case) {
226+
inherits(case, "orphaned_case")
227+
}

R/shiny-server.R

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ vdiffrServer <- function(cases) {
33
shiny::shinyServer(function(input, output) {
44
cases <- shiny::reactiveValues(all = cases)
55
cases$active <- shiny::reactive({
6-
type <- input$type %||% "case_new"
6+
type <- input$type %||% "new_case"
77
filter_cases(cases$all, type)
88
})
99

@@ -22,8 +22,8 @@ vdiffrServer <- function(cases) {
2222
}
2323

2424
prettify_types <- function(x) {
25-
ifelse(x == "case_mismatch", "Mismatched",
26-
ifelse(x == "case_new", "New", "Orphaned"
25+
ifelse(x == "mismatch_case", "Mismatched",
26+
ifelse(x == "new_case", "New", "Orphaned"
2727
))
2828
}
2929

@@ -83,7 +83,7 @@ renderDiffer <- function(input, active_cases, widget) {
8383
before_path <- file.path(pkg_path, "tests", "testthat", case$path)
8484

8585
after <- as_inline_svg(read_file(case$testcase))
86-
if (is_case_new(case)) {
86+
if (is_new_case(case)) {
8787
before <- after
8888
} else {
8989
before <- as_inline_svg(read_file(before_path))
@@ -94,8 +94,8 @@ renderDiffer <- function(input, active_cases, widget) {
9494
}
9595

9696
withdraw_cases <- function(cases) {
97-
validate_cases(filter_cases(cases, c("case_new", "case_mismatch")))
98-
delete_orphaned_cases(filter_cases(cases, "case_orphaned"))
97+
validate_cases(filter_cases(cases, c("new_case", "mismatch_case")))
98+
delete_orphaned_cases(filter_cases(cases, "orphaned_case"))
9999
}
100100

101101
validateSingleCase <- function(input, reactive_cases) {
@@ -123,7 +123,7 @@ validateGroupCases <- function(input, reactive_cases) {
123123

124124
withdraw_cases(active_cases)
125125

126-
case_types <- c("case_new", "case_mismatch", "case_orphaned")
126+
case_types <- c("new_case", "mismatch_case", "orphaned_case")
127127
types <- case_types[!case_types == type]
128128
cases <- filter_cases(cases, types)
129129

R/testthat-reporter.R

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,10 @@ active_collecter <- function() {
3737
vdiffr_env$active_collecter
3838
}
3939

40-
maybe_collect_case <- function(type, ...) {
40+
maybe_collect_case <- function(case) {
4141
collecter <- active_collecter()
4242

4343
if (!is.null(collecter)) {
44-
case <- switch(type,
45-
new = case_new(...),
46-
mismatch = case_mismatch(...),
47-
success = case_success(...),
48-
stop("Unknown case type")
49-
)
50-
5144
collecter$add_case(case)
5245
}
5346
}

R/testthat-ui.R

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,17 @@ expect_doppelganger <- function(title, fig, path = NULL, ...,
6161
path <- file.path("..", "figs", path)
6262
ensure_directories(dirname(path))
6363

64+
case <- case(list(
65+
name = fig_name,
66+
path = path,
67+
testcase = testcase
68+
))
69+
6470
if (file.exists(path)) {
65-
exp <- compare_figs(testcase, path, fig_name = fig_name)
71+
exp <- compare_figs(case)
6672
} else {
67-
maybe_collect_case("new", name = fig_name, path = path, testcase = testcase)
73+
case <- new_case(case)
74+
maybe_collect_case(case)
6875
msg <- paste0("Figure not generated yet: ", fig_name, ".svg")
6976
exp <- expectation_new(msg)
7077
}
@@ -81,16 +88,18 @@ str_standardise <- function(s, sep = "-") {
8188
s
8289
}
8390

84-
compare_figs <- function(testcase, path, fig_name) {
85-
equal <- compare_files(testcase, normalizePath(path))
91+
compare_figs <- function(case) {
92+
equal <- compare_files(case$testcase, normalizePath(case$path))
8693

8794
if (equal) {
88-
maybe_collect_case("success", name = fig_name, path = path, testcase = testcase)
8995
exp <- expectation_match("TRUE")
96+
case <- success_case(case)
97+
maybe_collect_case(case)
9098
} else {
91-
maybe_collect_case("mismatch", name = fig_name, path = path, testcase = testcase)
92-
msg <- paste0("Figures don't match: ", fig_name, ".svg\n")
99+
msg <- paste0("Figures don't match: ", case$name, ".svg\n")
93100
exp <- expectation_mismatch(msg)
101+
case <- mismatch_case(case)
102+
maybe_collect_case(case)
94103
}
95104

96105
exp

tests/testthat/test-orphaned.R

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ context("Orphaned")
44
test_that("Orphaned figures are found", {
55
skip_old_freetype()
66

7-
orphaned <- filter_cases(mock_cases, "case_orphaned")
8-
expect_equal(map_chr(orphaned, "name"), set_names(c("orphaned1", "orphaned2")))
7+
orphaned <- filter_cases(mock_cases, "orphaned_case")
8+
expect_equal(map_chr(unname(orphaned), "name"), c("orphaned1", "orphaned2"))
99
})
1010

1111
test_that("Orphaned files are found and deleted", {
1212
skip_old_freetype()
1313

14-
orphaned <- filter_cases(mock_cases, "case_orphaned")
14+
orphaned <- filter_cases(mock_cases, "orphaned_case")
1515
files <- map_chr(orphaned, "path")
1616
files <- map_chr(files, purrr::partial(file.path, mock_pkg_dir, "tests", "testthat"))
1717
files_exist <- purrr::every(files, file.exists)

0 commit comments

Comments
 (0)