Running ‘testthat.R’ [6s/9s]
Running the tests in ‘tests/testthat.R’ failed.
Complete output:
  > library(testthat)
  > library(plumber)
  > 
  > test_check("plumber")
  ══ Skipped tests ═══════════════════════════════════════════════════════════════
  ● On CRAN (12)
  
  ══ Failed tests ════════════════════════════════════════════════════════════════
  ── Error (test-async.R:74:3): sync works ───────────────────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
       █
    1. ├─`%>%`(...) test-async.R:74:2
    2. ├─plumber:::expect_route_sync(.)
    3. │ └─testthat::expect_equal(x$body$name, "sync") test-async.R:49:2
    4. │   └─testthat::quasi_label(enquo(object), label, arg = "object")
    5. │     └─rlang::eval_bare(expr, quo_get_env(quo))
    6. ├─plumber:::get_result(.)
    7. │ └─promises::is.promising(result) test-async.R:18:2
    8. ├─plumber:::expect_not_promise(.)
    9. │ ├─testthat::expect_false(promises::is.promising(x)) test-async.R:40:2
   10. │ │ └─testthat::quasi_label(enquo(object), label, arg = "object")
   11. │ │   └─rlang::eval_bare(expr, quo_get_env(quo))
   12. │ └─promises::is.promising(x)
   13. ├─plumber:::serve_route(., "/sync")
   14. │ └─`%>%`(...) test-async.R:64:2
   15. ├─plumber::pr_set_serializer(., serializer_identity())
   16. │ └─plumber:::validate_pr(pr)
   17. │   └─plumber::is_plumber(pr)
   18. ├─plumber:::async_router()
   19. │ └─"files/async.R" %>% test_path() %>% pr() test-async.R:58:2
   20. └─plumber::pr(.)
   21.   └─Plumber$new(file = file, filters = filters, envir = envir)
   22.     └─plumber:::initialize(...)
   23.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   24.         └─plumber:::make_parser(parsers)
   25.           └─stats::setNames(...)
  ── Error (test-async.R:82:3): async works ──────────────────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
       █
    1. ├─`%>%`(...) test-async.R:82:2
    2. ├─plumber:::expect_route_async(.)
    3. │ └─testthat::expect_equal(x$body$name, "async") test-async.R:53:2
    4. │   └─testthat::quasi_label(enquo(object), label, arg = "object")
    5. │     └─rlang::eval_bare(expr, quo_get_env(quo))
    6. ├─plumber:::get_result(.)
    7. │ └─promises::is.promising(result) test-async.R:18:2
    8. ├─plumber:::expect_promise(.)
    9. │ ├─testthat::expect_true(promises::is.promising(x)) test-async.R:44:2
   10. │ │ └─testthat::quasi_label(enquo(object), label, arg = "object")
   11. │ │   └─rlang::eval_bare(expr, quo_get_env(quo))
   12. │ └─promises::is.promising(x)
   13. ├─plumber:::serve_route(., "/async")
   14. │ └─`%>%`(...) test-async.R:64:2
   15. ├─plumber::pr_set_serializer(., serializer_identity())
   16. │ └─plumber:::validate_pr(pr)
   17. │   └─plumber::is_plumber(pr)
   18. ├─plumber:::async_router()
   19. │ └─"files/async.R" %>% test_path() %>% pr() test-async.R:58:2
   20. └─plumber::pr(.)
   21.   └─Plumber$new(file = file, filters = filters, envir = envir)
   22.     └─plumber:::initialize(...)
   23.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   24.         └─plumber:::make_parser(parsers)
   25.           └─stats::setNames(...)
  ── Error (test-async.R:115:3): async hooks create async execution ──────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
       █
    1. ├─base::apply(...) test-async.R:115:2
    2. │ └─plumber:::FUN(newX[, i], ...)
    3. │   └─plumber:::async_router() test-async.R:133:4
    4. │     └─"files/async.R" %>% test_path() %>% pr() test-async.R:58:2
    5. └─plumber::pr(.)
    6.   └─Plumber$new(file = file, filters = filters, envir = envir)
    7.     └─plumber:::initialize(...)
    8.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
    9.         └─plumber:::make_parser(parsers)
   10.           └─stats::setNames(...)
  ── Error (test-async.R:193:3): async hooks change value being passed through ───
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. ├─plumber:::async_router() test-async.R:193:2
   2. │ └─"files/async.R" %>% test_path() %>% pr() test-async.R:58:2
   3. └─plumber::pr(.)
   4.   └─Plumber$new(file = file, filters = filters, envir = envir)
   5.     └─plumber:::initialize(...)
   6.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   7.         └─plumber:::make_parser(parsers)
   8.           └─stats::setNames(...)
  ── Error (test-async.R:246:3): sync error is caught ────────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
       █
    1. ├─testthat::expect_output(...) test-async.R:246:2
    2. │ └─testthat:::quasi_capture(...)
    3. │   ├─testthat:::.capture(...)
    4. │   │ └─testthat::capture_output_lines(code, print, width = width)
    5. │   │   └─testthat:::eval_with_output(code, print = print, width = width)
    6. │   │     ├─withr::with_output_sink(temp, withVisible(code))
    7. │   │     │ └─base::force(code)
    8. │   │     └─base::withVisible(code)
    9. │   └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
   10. ├─`%>%`(...) test-async.R:248:6
   11. ├─plumber:::expect_route_error(., bad_expression)
   12. │ └─testthat::expect_equal(response$body$error, "500 - Internal server error") test-async.R:240:2
   13. │   └─testthat::quasi_label(enquo(object), label, arg = "object")
   14. │     └─rlang::eval_bare(expr, quo_get_env(quo))
   15. ├─plumber:::get_result(.)
   16. │ └─promises::is.promising(result) test-async.R:18:2
   17. ├─plumber:::expect_not_promise(.)
   18. │ ├─testthat::expect_false(promises::is.promising(x)) test-async.R:40:2
   19. │ │ └─testthat::quasi_label(enquo(object), label, arg = "object")
   20. │ │   └─rlang::eval_bare(expr, quo_get_env(quo))
   21. │ └─promises::is.promising(x)
   22. ├─plumber:::serve_route(., "/sync-bad")
   23. │ └─`%>%`(...) test-async.R:64:2
   24. ├─plumber::pr_set_serializer(., serializer_identity())
   25. │ └─plumber:::validate_pr(pr)
   26. │   └─plumber::is_plumber(pr)
   27. ├─plumber::pr_set_debug(., TRUE)
   28. │ └─plumber:::validate_pr(pr)
   29. │   └─plumber::is_plumber(pr)
   30. ├─plumber:::async_router()
   31. │ └─"files/async.R" %>% test_path() %>% pr() test-async.R:58:2
   32. └─plumber::pr(.)
   33.   └─Plumber$new(file = file, filters = filters, envir = envir)
   34.     └─plumber:::initialize(...)
   35.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   36.         └─plumber:::make_parser(parsers)
   37.           └─stats::setNames(...)
  ── Error (test-async.R:262:3): async error is caught ───────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
       █
    1. ├─testthat::expect_output(...) test-async.R:262:2
    2. │ └─testthat:::quasi_capture(...)
    3. │   ├─testthat:::.capture(...)
    4. │   │ └─testthat::capture_output_lines(code, print, width = width)
    5. │   │   └─testthat:::eval_with_output(code, print = print, width = width)
    6. │   │     ├─withr::with_output_sink(temp, withVisible(code))
    7. │   │     │ └─base::force(code)
    8. │   │     └─base::withVisible(code)
    9. │   └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
   10. ├─`%>%`(...) test-async.R:264:6
   11. ├─plumber:::expect_route_error(., bad_expression)
   12. │ └─testthat::expect_equal(response$body$error, "500 - Internal server error") test-async.R:240:2
   13. │   └─testthat::quasi_label(enquo(object), label, arg = "object")
   14. │     └─rlang::eval_bare(expr, quo_get_env(quo))
   15. ├─plumber:::get_result(.)
   16. │ └─promises::is.promising(result) test-async.R:18:2
   17. ├─plumber:::expect_promise(.)
   18. │ ├─testthat::expect_true(promises::is.promising(x)) test-async.R:44:2
   19. │ │ └─testthat::quasi_label(enquo(object), label, arg = "object")
   20. │ │   └─rlang::eval_bare(expr, quo_get_env(quo))
   21. │ └─promises::is.promising(x)
   22. ├─plumber:::serve_route(., "/async-bad")
   23. │ └─`%>%`(...) test-async.R:64:2
   24. ├─plumber::pr_set_serializer(., serializer_identity())
   25. │ └─plumber:::validate_pr(pr)
   26. │   └─plumber::is_plumber(pr)
   27. ├─plumber::pr_set_debug(., TRUE)
   28. │ └─plumber:::validate_pr(pr)
   29. │   └─plumber::is_plumber(pr)
   30. ├─plumber:::async_router()
   31. │ └─"files/async.R" %>% test_path() %>% pr() test-async.R:58:2
   32. └─plumber::pr(.)
   33.   └─Plumber$new(file = file, filters = filters, envir = envir)
   34.     └─plumber:::initialize(...)
   35.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   36.         └─plumber:::make_parser(parsers)
   37.           └─stats::setNames(...)
  ── Error (test-async.R:285:11): hook errors are caught ─────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
       █
    1. ├─base::eval(...)
    2. │ └─base::eval(...)
    3. │   └─plumber:::async_router() test-async.R:285:10
    4. │     └─"files/async.R" %>% test_path() %>% pr() test-async.R:58:2
    5. └─plumber::pr(.)
    6.   └─Plumber$new(file = file, filters = filters, envir = envir)
    7.     └─plumber:::initialize(...)
    8.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
    9.         └─plumber:::make_parser(parsers)
   10.           └─stats::setNames(...)
  ── Error (test-async.R:353:3): accessing two images created using promises does not create an error ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
       █
    1. ├─async_router() %>% pr_set_debug(TRUE) test-async.R:353:2
    2. ├─plumber::pr_set_debug(., TRUE)
    3. │ └─plumber:::validate_pr(pr)
    4. │   └─plumber::is_plumber(pr)
    5. ├─plumber:::async_router()
    6. │ └─"files/async.R" %>% test_path() %>% pr() test-async.R:58:2
    7. └─plumber::pr(.)
    8.   └─Plumber$new(file = file, filters = filters, envir = envir)
    9.     └─plumber:::initialize(...)
   10.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   11.         └─plumber:::make_parser(parsers)
   12.           └─stats::setNames(...)
  ── Error (test-content-type.R:17:3): contentType works in files ────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/content-type.R")) test-content-type.R:17:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-default-handlers.R:12:3): 405 handling is ok, get the right verbs ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-default-handlers.R:12:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-deprecated.R:4:3): addEndpoint continues to work ────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─Plumber$new() test-deprecated.R:4:2
   2.   └─plumber:::initialize(...)
   3.     └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   4.       └─plumber:::make_parser(parsers)
   5.         └─stats::setNames(...)
  ── Error (test-deprecated.R:13:3): addFilter continues to work ─────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─Plumber$new() test-deprecated.R:13:2
   2.   └─plumber:::initialize(...)
   3.     └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   4.       └─plumber:::make_parser(parsers)
   5.         └─stats::setNames(...)
  ── Error (test-deprecated.R:22:3): addGlobalProcessor continues to work ────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─Plumber$new() test-deprecated.R:22:2
   2.   └─plumber:::initialize(...)
   3.     └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   4.       └─plumber:::make_parser(parsers)
   5.         └─stats::setNames(...)
  ── Error (test-deprecated.R:27:3): addAssets continues to work ─────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─Plumber$new() test-deprecated.R:27:2
   2.   └─plumber:::initialize(...)
   3.     └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   4.       └─plumber:::make_parser(parsers)
   5.         └─stats::setNames(...)
  ── Error (test-deprecated.R:55:3): plumber throws deprecated warning ───────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
       █
    1. ├─testthat::expect_warning(plumber$new(), "Plumber") test-deprecated.R:55:2
    2. │ └─testthat:::quasi_capture(enquo(object), label, capture_warnings)
    3. │   ├─testthat:::.capture(...)
    4. │   │ └─base::withCallingHandlers(...)
    5. │   └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
    6. └─plumber$new()
    7.   └─plumber:::initialize(...)
    8.     └─super$initialize(...)
    9.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   10.         └─plumber:::make_parser(parsers)
   11.           └─stats::setNames(...)
  ── Error (test-endpoint-aroundexec.R:111:3): serializers can register all pre,post,aroundexec stages ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. ├─plumber:::with_tmp_serializers(...) test-endpoint-aroundexec.R:111:2
   2. │ └─base::force(expr) helper-with-temp-serializers.R:9:2
   3. └─plumber::plumb(test_path("files/endpoint-serializer.R")) test-endpoint-aroundexec.R:112:4
   4.   └─Plumber$new(file)
   5.     └─plumber:::initialize(...)
   6.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   7.         └─plumber:::make_parser(parsers)
   8.           └─stats::setNames(...)
  ── Error (test-endpoint-aroundexec.R:133:3): not producing an image produces an error ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
       █
    1. ├─plumber:::with_tmp_serializers(...) test-endpoint-aroundexec.R:133:2
    2. │ └─base::force(expr) helper-with-temp-serializers.R:9:2
    3. ├─plumb(test_path("files/endpoint-serializer.R")) %>% pr_set_debug(TRUE) test-endpoint-aroundexec.R:134:4
    4. ├─plumber::pr_set_debug(., TRUE)
    5. │ └─plumber:::validate_pr(pr)
    6. │   └─plumber::is_plumber(pr)
    7. └─plumber::plumb(test_path("files/endpoint-serializer.R"))
    8.   └─Plumber$new(file)
    9.     └─plumber:::initialize(...)
   10.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   11.         └─plumber:::make_parser(parsers)
   12.           └─stats::setNames(...)
  ── Error (test-endpoint.R:76:3): Programmatic endpoints work ───────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─Plumber$new() test-endpoint.R:76:2
   2.   └─plumber:::initialize(...)
   3.     └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   4.       └─plumber:::make_parser(parsers)
   5.         └─stats::setNames(...)
  ── Error (test-endpoint.R:99:3): Programmatic endpoints with functions work ────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─Plumber$new() test-endpoint.R:99:2
   2.   └─plumber:::initialize(...)
   3.     └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   4.       └─plumber:::make_parser(parsers)
   5.         └─stats::setNames(...)
  ── Error (test-filters.R:4:3): Filters work ────────────────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/filters.R")) test-filters.R:4:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-filters.R:12:3): Filters can update req$args ────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/filters.R")) test-filters.R:12:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Failure (test-filters.R:17:3): Redundant filters fail ───────────────────────
  `pr(test_path("files/filter-redundant.R"))` threw an error with unexpected message.
  Expected match: "Multiple @filters"
  Actual message: "'names' attribute [5] must be the same length as the vector [0]"
  Backtrace:
       █
    1. ├─testthat::expect_error(...) test-filters.R:17:2
    2. │ └─testthat:::quasi_capture(...)
    3. │   ├─testthat:::.capture(...)
    4. │   │ └─base::withCallingHandlers(...)
    5. │   └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
    6. └─plumber::pr(test_path("files/filter-redundant.R"))
    7.   └─Plumber$new(file = file, filters = filters, envir = envir)
    8.     └─plumber:::initialize(...)
    9.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   10.         └─plumber:::make_parser(parsers)
   11.           └─stats::setNames(...)
  ── Failure (test-filters.R:21:3): Empty filters fail ───────────────────────────
  `pr(test_path("files/filter-empty.R"))` threw an error with unexpected message.
  Expected match: "No @filter name specified"
  Actual message: "'names' attribute [5] must be the same length as the vector [0]"
  Backtrace:
       █
    1. ├─testthat::expect_error(...) test-filters.R:21:2
    2. │ └─testthat:::quasi_capture(...)
    3. │   ├─testthat:::.capture(...)
    4. │   │ └─base::withCallingHandlers(...)
    5. │   └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
    6. └─plumber::pr(test_path("files/filter-empty.R"))
    7.   └─Plumber$new(file = file, filters = filters, envir = envir)
    8.     └─plumber:::initialize(...)
    9.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   10.         └─plumber:::make_parser(parsers)
   11.           └─stats::setNames(...)
  ── Failure (test-filters.R:25:3): Filter and path fails ────────────────────────
  `pr(test_path("files/filterpath.R"))` threw an error with unexpected message.
  Expected match: "can only be"
  Actual message: "'names' attribute [5] must be the same length as the vector [0]"
  Backtrace:
       █
    1. ├─testthat::expect_error(pr(test_path("files/filterpath.R")), regexp = "can only be") test-filters.R:25:2
    2. │ └─testthat:::quasi_capture(...)
    3. │   ├─testthat:::.capture(...)
    4. │   │ └─base::withCallingHandlers(...)
    5. │   └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
    6. └─plumber::pr(test_path("files/filterpath.R"))
    7.   └─Plumber$new(file = file, filters = filters, envir = envir)
    8.     └─plumber:::initialize(...)
    9.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   10.         └─plumber:::make_parser(parsers)
   11.           └─stats::setNames(...)
  ── Failure (test-filters.R:29:3): Filter and assets fails ──────────────────────
  `pr(test_path("files/filterasset.R"))` threw an error with unexpected message.
  Expected match: "can only be"
  Actual message: "'names' attribute [5] must be the same length as the vector [0]"
  Backtrace:
       █
    1. ├─testthat::expect_error(...) test-filters.R:29:2
    2. │ └─testthat:::quasi_capture(...)
    3. │   ├─testthat:::.capture(...)
    4. │   │ └─base::withCallingHandlers(...)
    5. │   └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
    6. └─plumber::pr(test_path("files/filterasset.R"))
    7.   └─Plumber$new(file = file, filters = filters, envir = envir)
    8.     └─plumber:::initialize(...)
    9.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   10.         └─plumber:::make_parser(parsers)
   11.           └─stats::setNames(...)
  ── Error (test-filters.R:33:3): Terminal filters indeed terminate ──────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/terminal-filter.R")) test-filters.R:33:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-filters.R:38:3): complete addFilter works ───────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-filters.R:38:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-filters.R:64:3): sparse addFilter works ─────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-filters.R:64:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-filters.R:86:3): sparse addFilter with a function works ─────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-filters.R:86:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-injection.R:4:3): Injected arguments on req$args get passed on. ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/filter-inject.R")) test-injection.R:4:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-legacy.R:5:3): postBody is still available ──────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/legacy.R")) test-legacy.R:5:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-legacy.R:27:3): postBody is not enabled by default ──────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/legacy.R")) test-legacy.R:27:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-multibytes.R:23:3): support files with multibytes ───────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
       █
    1. ├─plumber:::with_locale(...) test-multibytes.R:23:2
    2. │ └─base::force(expr) test-multibytes.R:9:2
    3. ├─plumber:::with_locale(...) test-multibytes.R:24:4
    4. │ └─base::force(expr) test-multibytes.R:9:2
    5. └─plumber::pr(test_path("files/multibytes.R")) test-multibytes.R:26:6
    6.   └─Plumber$new(file = file, filters = filters, envir = envir)
    7.     └─plumber:::initialize(...)
    8.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
    9.         └─plumber:::make_parser(parsers)
   10.           └─stats::setNames(...)
  ── Error (test-parse-block.R:228:3): Plumbing block use the right environment ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
       █
    1. ├─testthat::expect_silent(plumb(test_path("files/plumb-envir.R"))) test-parse-block.R:228:2
    2. │ └─testthat:::quasi_capture(enquo(object), NULL, evaluate_promise)
    3. │   ├─testthat:::.capture(...)
    4. │   │ ├─withr::with_output_sink(...)
    5. │   │ │ └─base::force(code)
    6. │   │ ├─base::withCallingHandlers(...)
    7. │   │ └─base::withVisible(code)
    8. │   └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
    9. └─plumber::plumb(test_path("files/plumb-envir.R"))
   10.   └─Plumber$new(file)
   11.     └─plumber:::initialize(...)
   12.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   13.         └─plumber:::make_parser(parsers)
   14.           └─stats::setNames(...)
  ── Error (test-parse-body.R:4:3): JSON is consumed on POST ─────────────────────
  Error: 'names' attribute [1] must be the same length as the vector [0]
  Backtrace:
      █
   1. ├─testthat::expect_equal(...) test-parse-body.R:4:2
   2. │ └─testthat::quasi_label(enquo(object), label, arg = "object")
   3. │   └─rlang::eval_bare(expr, quo_get_env(quo))
   4. ├─plumber:::parse_body("{\"a\":\"1\"}", content_type = NULL, parsers = make_parser("json"))
   5. └─plumber:::make_parser("json")
   6.   └─stats::setNames(...)
  ── Error (test-parse-body.R:10:3): ending in `==` does not produce a unexpected key ──
  Error: 'names' attribute [1] must be the same length as the vector [0]
  Backtrace:
      █
   1. ├─testthat::expect_equal(...) test-parse-body.R:10:2
   2. │ └─testthat::quasi_label(enquo(object), label, arg = "object")
   3. │   └─rlang::eval_bare(expr, quo_get_env(quo))
   4. ├─plumber:::parse_body(...)
   5. └─plumber:::make_parser("form")
   6.   └─stats::setNames(...)
  ── Error (test-parse-body.R:14:3): Form query strings on post are handled correctly ──
  Error: 'names' attribute [1] must be the same length as the vector [0]
  Backtrace:
      █
   1. ├─testthat::expect_equivalent(...) test-parse-body.R:14:2
   2. │ └─testthat::quasi_label(enquo(object), label, arg = "object")
   3. │   └─rlang::eval_bare(expr, quo_get_env(quo))
   4. ├─plumber:::parse_body("a=", parsers = make_parser("form"))
   5. └─plumber:::make_parser("form")
   6.   └─stats::setNames(...)
  ── Error (test-parse-body.R:19:3): Able to handle UTF-8 ────────────────────────
  Error: 'names' attribute [1] must be the same length as the vector [0]
  Backtrace:
      █
   1. ├─testthat::expect_equal(...) test-parse-body.R:19:2
   2. │ └─testthat::quasi_label(enquo(object), label, arg = "object")
   3. │   └─rlang::eval_bare(expr, quo_get_env(quo))
   4. ├─plumber:::parse_body(...)
   5. └─plumber:::make_parser("json")
   6.   └─stats::setNames(...)
  ── Error (???): filter passes on content-type ──────────────────────────────────
  Error: 'names' attribute [1] must be the same length as the vector [0]
  Backtrace:
       █
    1. ├─testthat::expect_output(...)
    2. │ └─testthat:::quasi_capture(...)
    3. │   ├─testthat:::.capture(...)
    4. │   │ └─testthat::capture_output_lines(code, print, width = width)
    5. │   │   └─testthat:::eval_with_output(code, print = print, width = width)
    6. │   │     ├─withr::with_output_sink(temp, withVisible(code))
    7. │   │     │ └─base::force(code)
    8. │   │     └─base::withVisible(code)
    9. │   └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
   10. ├─plumber:::req_body_parser(req, make_parser("text"))
   11. └─plumber:::make_parser("text")
   12.   └─stats::setNames(...)
  ── Error (test-parse-body.R:42:3): Test text parser ────────────────────────────
  Error: 'names' attribute [1] must be the same length as the vector [0]
  Backtrace:
      █
   1. ├─testthat::expect_equal(...) test-parse-body.R:42:2
   2. │ └─testthat::quasi_label(enquo(object), label, arg = "object")
   3. │   └─rlang::eval_bare(expr, quo_get_env(quo))
   4. ├─plumber:::parse_body("Ceci est un texte.", "text/html", make_parser("text"))
   5. └─plumber:::make_parser("text")
   6.   └─stats::setNames(...)
  ── Error (test-parse-body.R:49:3): Test yaml parser ────────────────────────────
  Error: 'names' attribute [1] must be the same length as the vector [0]
  Backtrace:
      █
   1. ├─testthat::expect_equal(...) test-parse-body.R:49:2
   2. │ └─testthat::quasi_label(enquo(object), label, arg = "object")
   3. │   └─rlang::eval_bare(expr, quo_get_env(quo))
   4. ├─plumber:::parse_body(...)
   5. └─plumber:::make_parser("yaml")
   6.   └─stats::setNames(...)
  ── Error (test-parse-body.R:64:3): Test csv parser ─────────────────────────────
  Error: 'names' attribute [1] must be the same length as the vector [0]
  Backtrace:
      █
   1. ├─plumber:::parse_body(val, "application/csv", make_parser("csv")) test-parse-body.R:64:2
   2. └─plumber:::make_parser("csv")
   3.   └─stats::setNames(...)
  ── Error (test-parse-body.R:84:3): Test tsv parser ─────────────────────────────
  Error: 'names' attribute [1] must be the same length as the vector [0]
  Backtrace:
      █
   1. ├─plumber:::parse_body(...) test-parse-body.R:84:2
   2. └─plumber:::make_parser("tsv")
   3.   └─stats::setNames(...)
  ── Error (test-parse-body.R:104:3): Test feather parser ────────────────────────
  Error: 'names' attribute [1] must be the same length as the vector [0]
  Backtrace:
      █
   1. ├─plumber:::parse_body(val, "application/feather", make_parser("feather")) test-parse-body.R:104:2
   2. └─plumber:::make_parser("feather")
   3.   └─stats::setNames(...)
  ── Error (test-parse-body.R:121:3): Test multipart output is reduced for argument matching ──
  Error: 'names' attribute [3] must be the same length as the vector [0]
  Backtrace:
      █
   1. ├─plumber:::req_body_parser(...) test-parse-body.R:121:2
   2. └─plumber:::make_parser(c("multi", "octet", "json"))
   3.   └─stats::setNames(...)
  ── Error (test-parse-body.R:174:3): Test multipart parser ──────────────────────
  Error: 'names' attribute [4] must be the same length as the vector [0]
  Backtrace:
      █
   1. ├─plumber:::req_body_parser(...) test-parse-body.R:174:2
   2. └─plumber:::make_parser(c("multi", "json", "rds", "octet"))
   3.   └─stats::setNames(...)
  ── Error (test-parse-body.R:222:3): Test multipart respect content-type ────────
  Error: 'names' attribute [2] must be the same length as the vector [0]
  Backtrace:
      █
   1. ├─plumber:::req_body_parser(req, make_parser(c("multi", "tsv"))) test-parse-body.R:222:2
   2. └─plumber:::make_parser(c("multi", "tsv"))
   3.   └─stats::setNames(...)
  ── Error (test-parse-body.R:252:3): Test an array of files upload ──────────────
  Error: 'names' attribute [3] must be the same length as the vector [0]
  Backtrace:
      █
   1. ├─plumber:::req_body_parser(...) test-parse-body.R:252:2
   2. └─plumber:::make_parser(c("multi", "octet", "json"))
   3.   └─stats::setNames(...)
  ── Error (test-parser.R:14:3): parsers can be combined ─────────────────────────
  Error: 'names' attribute [1] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber:::expect_parsers("json", "json") test-parser.R:14:2
   2.   └─plumber:::make_parser(names) test-parser.R:6:4
   3.     └─stats::setNames(...)
  ── Error (test-parser.R:38:3): parsers work ────────────────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/parsers.R")) test-parser.R:38:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-path-subst.R:90:3): integration of path parsing works ───────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/path-params.R")) test-path-subst.R:90:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:9:3): Endpoints are properly identified ───────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/endpoints.R")) test-plumber.R:9:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:20:3): Empty file is OK ───────────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:20:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:25:3): The file is sourced in the envir ───────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/in-env.R")) test-plumber.R:25:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:32:3): Verbs translate correctly ──────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/verbs.R")) test-plumber.R:32:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:52:3): plumb accepts a file ───────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::plumb(test_path("files/endpoints.R")) test-plumber.R:52:2
   2.   └─Plumber$new(file)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:71:3): plumb accepts a directory with a `plumber.R` file ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::plumb(dir = test_path("files")) test-plumber.R:71:2
   2.   └─Plumber$new(file)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:96:3): plumb() a dir leverages `entrypoint.R` ─────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
       █
    1. ├─plumber:::with_tmp_serializers(...) test-plumber.R:96:2
    2. │ └─base::force(expr) helper-with-temp-serializers.R:9:2
    3. └─plumber::plumb(dir = test_path("files/entrypoint/")) test-plumber.R:102:4
    4.   └─plumber:::sourceUTF8(entrypoint, new.env(parent = globalenv()))
    5.     └─base::eval(exprs, envir)
    6.       └─base::eval(exprs, envir)
    7.         └─plumber::pr("./plumber.R")
    8.           └─Plumber$new(file = file, filters = filters, envir = envir)
    9.             └─plumber:::initialize(...)
   10.               └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   11.                 └─plumber:::make_parser(parsers)
   12.                   └─stats::setNames(...)
  ── Error (test-plumber.R:124:3): plumb() a dir works with `entrypoint.R` and without `plumber.R` ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
       █
    1. └─plumber::plumb(dir = test_path("files/no-plumber/")) test-plumber.R:124:2
    2.   └─plumber:::sourceUTF8(entrypoint, new.env(parent = globalenv()))
    3.     └─base::eval(exprs, envir)
    4.       └─base::eval(exprs, envir)
    5.         └─plumber::pr("./not-plumber.R")
    6.           └─Plumber$new(file = file, filters = filters, envir = envir)
    7.             └─plumber:::initialize(...)
    8.               └─self$setParsers(c("json", "form", "text", "octet", "multi"))
    9.                 └─plumber:::make_parser(parsers)
   10.                   └─stats::setNames(...)
  ── Failure (test-plumber.R:130:3): Empty endpoints error ───────────────────────
  `pr(test_path("files/endpoints-empty.R"))` threw an error with unexpected message.
  Expected match: "No path specified"
  Actual message: "'names' attribute [5] must be the same length as the vector [0]"
  Backtrace:
       █
    1. ├─testthat::expect_error(...) test-plumber.R:130:2
    2. │ └─testthat:::quasi_capture(...)
    3. │   ├─testthat:::.capture(...)
    4. │   │ └─base::withCallingHandlers(...)
    5. │   └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
    6. └─plumber::pr(test_path("files/endpoints-empty.R"))
    7.   └─Plumber$new(file = file, filters = filters, envir = envir)
    8.     └─plumber:::initialize(...)
    9.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   10.         └─plumber:::make_parser(parsers)
   11.           └─stats::setNames(...)
  ── Error (test-plumber.R:134:3): The old roxygen-style comments work ───────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/endpoints-old.R")) test-plumber.R:134:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:145:3): routes can be constructed correctly ───────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:145:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:166:3): mounts can be read correctly ──────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:166:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:194:3): mounts work ───────────────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:194:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:216:3): mounting at root path works ───────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:216:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:231:3): conflicting mounts behave consistently ────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:231:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:247:3): hooks can be registered ───────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:247:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:260:3): preroute hook gets the right data ─────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:260:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:273:3): postroute hook gets the right data and can modify ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:273:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:288:3): preserialize hook gets the right data and can modify ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:288:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:303:3): postserialize hook gets the right data and can modify ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:303:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:319:3): invalid hooks err ─────────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:319:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:324:3): handle invokes correctly ──────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:324:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:345:3): No 405 on same path, different verb ───────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:345:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:355:3): handle with an endpoint works ─────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:355:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:364:3): handle with and enpoint and endpoint def fails ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:364:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:370:3): full handle call works ────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:370:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:392:3): Expressions and functions both work on handle ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:392:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:403:3): Expressions and functions both work on filter ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:403:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:429:3): filters and endpoint expressions evaluated in the appropriate (possibly injected) environment ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(envir = env) test-plumber.R:429:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:450:3): filters and endpoints executed in the appropriate environment ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(envir = env) test-plumber.R:450:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:496:3): unmount works ─────────────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:496:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:509:3): removeHandle works ────────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:509:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-plumber.R:520:3): routes that don't start with a slash are prepended with a slash ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-plumber.R:520:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-preempt.R:4:3): preempts work ───────────────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/preempt.R")) test-preempt.R:4:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Failure (test-preempt.R:13:3): Redundant preempts fail ──────────────────────
  `pr(test_path("files/preempt-redundant.R"))` threw an error with unexpected message.
  Expected match: "Multiple @preempts"
  Actual message: "'names' attribute [5] must be the same length as the vector [0]"
  Backtrace:
       █
    1. ├─testthat::expect_error(...) test-preempt.R:13:2
    2. │ └─testthat:::quasi_capture(...)
    3. │   ├─testthat:::.capture(...)
    4. │   │ └─base::withCallingHandlers(...)
    5. │   └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
    6. └─plumber::pr(test_path("files/preempt-redundant.R"))
    7.   └─Plumber$new(file = file, filters = filters, envir = envir)
    8.     └─plumber:::initialize(...)
    9.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   10.         └─plumber:::make_parser(parsers)
   11.           └─stats::setNames(...)
  ── Failure (test-preempt.R:17:3): Empty preempts fail ──────────────────────────
  `pr(test_path("files/preempt-empty.R"))` threw an error with unexpected message.
  Expected match: "No @preempt specified"
  Actual message: "'names' attribute [5] must be the same length as the vector [0]"
  Backtrace:
       █
    1. ├─testthat::expect_error(...) test-preempt.R:17:2
    2. │ └─testthat:::quasi_capture(...)
    3. │   ├─testthat:::.capture(...)
    4. │   │ └─base::withCallingHandlers(...)
    5. │   └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
    6. └─plumber::pr(test_path("files/preempt-empty.R"))
    7.   └─Plumber$new(file = file, filters = filters, envir = envir)
    8.     └─plumber:::initialize(...)
    9.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   10.         └─plumber:::make_parser(parsers)
   11.           └─stats::setNames(...)
  ── Failure (test-preempt.R:21:3): Non-existant preempts fail ───────────────────
  `pr(test_path("files/preempt-nonexistent.R"))` threw an error with unexpected message.
  Expected match: "The given @preempt"
  Actual message: "'names' attribute [5] must be the same length as the vector [0]"
  Backtrace:
       █
    1. ├─testthat::expect_error(...) test-preempt.R:21:2
    2. │ └─testthat:::quasi_capture(...)
    3. │   ├─testthat:::.capture(...)
    4. │   │ └─base::withCallingHandlers(...)
    5. │   └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
    6. └─plumber::pr(test_path("files/preempt-nonexistent.R"))
    7.   └─Plumber$new(file = file, filters = filters, envir = envir)
    8.     └─plumber:::initialize(...)
    9.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   10.         └─plumber:::make_parser(parsers)
   11.           └─stats::setNames(...)
  ── Error (test-query-with-multibytes.R:4:3): Support multi-bytes queries ───────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/query-with-multibytes.R")) test-query-with-multibytes.R:4:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-querystring.R:10:3): path parameters do not convert + to space ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/path-params.R")) test-querystring.R:10:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Failure (test-router-modifier.R:4:3): router modifier works, run does nothing ──
  `pr(test_path("files/router-modifier-run.R"))` threw an error with unexpected message.
  Expected match: "method should not be called while"
  Actual message: "'names' attribute [5] must be the same length as the vector [0]"
  Backtrace:
       █
    1. ├─testthat::expect_error(...) test-router-modifier.R:4:2
    2. │ └─testthat:::quasi_capture(...)
    3. │   ├─testthat:::.capture(...)
    4. │   │ └─base::withCallingHandlers(...)
    5. │   └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
    6. └─plumber::pr(test_path("files/router-modifier-run.R"))
    7.   └─Plumber$new(file = file, filters = filters, envir = envir)
    8.     └─plumber:::initialize(...)
    9.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   10.         └─plumber:::make_parser(parsers)
   11.           └─stats::setNames(...)
  ── Error (test-router-modifier.R:7:3): router modifier works, run does nothing ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/router-modifier.R")) test-router-modifier.R:7:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-routing.R:4:3): Routing to errors and 404s works ────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/router.R")) test-routing.R:4:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-serializer-feather.R:12:3): feather serializes properly ─────────
  Error: 'names' attribute [1] must be the same length as the vector [0]
  Backtrace:
      █
   1. ├─plumber:::parse_body(val$body, "application/feather", make_parser("feather")) test-serializer-feather.R:12:2
   2. └─plumber:::make_parser("feather")
   3.   └─stats::setNames(...)
  ── Error (test-serializer.R:6:3): Responses returned directly aren't serialized ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/router.R")) test-serializer.R:6:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-serializer.R:15:3): JSON is the default serializer ──────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/router.R")) test-serializer.R:15:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-serializer.R:21:3): Overridden serializers apply on filters and endpoints ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. ├─plumber:::with_tmp_serializers(...) test-serializer.R:21:2
   2. │ └─base::force(expr) helper-with-temp-serializers.R:9:2
   3. └─plumber::pr(test_path("files/serializer.R")) test-serializer.R:49:4
   4.   └─Plumber$new(file = file, filters = filters, envir = envir)
   5.     └─plumber:::initialize(...)
   6.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   7.         └─plumber:::make_parser(parsers)
   8.           └─stats::setNames(...)
  ── Failure (test-serializer.R:102:3): Redundant serializers fail ───────────────
  `pr(test_path("files/serializer-redundant.R"))` threw an error with unexpected message.
  Expected match: "Multiple @serializers"
  Actual message: "'names' attribute [5] must be the same length as the vector [0]"
  Backtrace:
       █
    1. ├─plumber:::with_tmp_serializers(...) test-serializer.R:102:2
    2. │ └─base::force(expr) helper-with-temp-serializers.R:9:2
    3. ├─testthat::expect_error(...) test-serializer.R:106:4
    4. │ └─testthat:::quasi_capture(...)
    5. │   ├─testthat:::.capture(...)
    6. │   │ └─base::withCallingHandlers(...)
    7. │   └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
    8. └─plumber::pr(test_path("files/serializer-redundant.R"))
    9.   └─Plumber$new(file = file, filters = filters, envir = envir)
   10.     └─plumber:::initialize(...)
   11.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   12.         └─plumber:::make_parser(parsers)
   13.           └─stats::setNames(...)
  ── Failure (test-serializer.R:112:3): Empty serializers fail ───────────────────
  `pr(test_path("files/serializer-empty.R"))` threw an error with unexpected message.
  Expected match: "No @serializer specified"
  Actual message: "'names' attribute [5] must be the same length as the vector [0]"
  Backtrace:
       █
    1. ├─testthat::expect_error(...) test-serializer.R:112:2
    2. │ └─testthat:::quasi_capture(...)
    3. │   ├─testthat:::.capture(...)
    4. │   │ └─base::withCallingHandlers(...)
    5. │   └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
    6. └─plumber::pr(test_path("files/serializer-empty.R"))
    7.   └─Plumber$new(file = file, filters = filters, envir = envir)
    8.     └─plumber:::initialize(...)
    9.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   10.         └─plumber:::make_parser(parsers)
   11.           └─stats::setNames(...)
  ── Failure (test-serializer.R:116:3): Non-existant serializers fail ────────────
  `pr(test_path("files/serializer-nonexistent.R"))` threw an error with unexpected message.
  Expected match: "No such @serializer"
  Actual message: "'names' attribute [5] must be the same length as the vector [0]"
  Backtrace:
       █
    1. ├─testthat::expect_error(...) test-serializer.R:116:2
    2. │ └─testthat:::quasi_capture(...)
    3. │   ├─testthat:::.capture(...)
    4. │   │ └─base::withCallingHandlers(...)
    5. │   └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
    6. └─plumber::pr(test_path("files/serializer-nonexistent.R"))
    7.   └─Plumber$new(file = file, filters = filters, envir = envir)
    8.     └─plumber:::initialize(...)
    9.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   10.         └─plumber:::make_parser(parsers)
   11.           └─stats::setNames(...)
  ── Error (test-serializer.R:140:3): Error handler is passed to serializer ──────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. ├─plumber:::with_tmp_serializers(...) test-serializer.R:140:2
   2. │ └─base::force(expr) helper-with-temp-serializers.R:9:2
   3. └─plumber::pr(test_path("files/serializer-error.R")) test-serializer.R:149:4
   4.   └─Plumber$new(file = file, filters = filters, envir = envir)
   5.     └─plumber:::initialize(...)
   6.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   7.         └─plumber:::make_parser(parsers)
   8.           └─stats::setNames(...)
  ── Error (test-sessions.R:32:3): cookies are set ───────────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-sessions.R:32:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-sessions.R:57:3): cookies are unset ─────────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-sessions.R:57:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-sessions.R:88:3): cookies are read ──────────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-sessions.R:88:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-sessions.R:119:3): invalid cookies/JSON are handled ─────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-sessions.R:119:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-sessions.R:152:3): cookie attributes are set ────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-sessions.R:152:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-shared-secret.R:6:3): requests with shared secrets pass, w/o fail ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-shared-secret.R:6:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-source-values.R:6:5): Variables are populated in local environment, even if created after functions that use them ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/source_values.R")) test-source-values.R:6:4
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-static.R:5:1): (code run outside of `test_that()`) ──────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─PlumberStatic$new(test_path("files/static")) test-static.R:5:0
   2.   └─plumber:::initialize(...)
   3.     └─super$initialize(filters = NULL)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-tidy-plumber.R:4:3): pr creates new router ──────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-tidy-plumber.R:4:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-tidy-plumber.R:9:3): pr_handle functions add routes ─────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
       █
    1. ├─pr() %>% pr_handle(c("GET", "POST"), "/foo", function() "bar") test-tidy-plumber.R:9:2
    2. ├─plumber::pr_handle(., c("GET", "POST"), "/foo", function() "bar")
    3. │ └─plumber:::validate_pr(pr)
    4. │   └─plumber::is_plumber(pr)
    5. └─plumber::pr()
    6.   └─Plumber$new(file = file, filters = filters, envir = envir)
    7.     └─plumber:::initialize(...)
    8.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
    9.         └─plumber:::make_parser(parsers)
   10.           └─stats::setNames(...)
  ── Error (test-tidy-plumber.R:49:3): pr_mount mounts router ────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
       █
    1. ├─pr() %>% pr_get("/hello", function() "Hello") test-tidy-plumber.R:49:2
    2. ├─plumber::pr_get(., "/hello", function() "Hello")
    3. │ └─plumber::pr_handle(...)
    4. │   └─plumber:::validate_pr(pr)
    5. │     └─plumber::is_plumber(pr)
    6. └─plumber::pr()
    7.   └─Plumber$new(file = file, filters = filters, envir = envir)
    8.     └─plumber:::initialize(...)
    9.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   10.         └─plumber:::make_parser(parsers)
   11.           └─stats::setNames(...)
  ── Error (test-tidy-plumber.R:59:3): pr_static mounts a static router ──────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
       █
    1. ├─pr() %>% pr_static("/ex", system.file("plumber", package = "plumber")) test-tidy-plumber.R:59:2
    2. ├─plumber::pr_static(., "/ex", system.file("plumber", package = "plumber"))
    3. │ └─plumber::pr_mount(pr, path, PlumberStatic$new(direc))
    4. │   └─plumber:::validate_pr(pr)
    5. │     └─plumber::is_plumber(pr)
    6. └─plumber::pr()
    7.   └─Plumber$new(file = file, filters = filters, envir = envir)
    8.     └─plumber:::initialize(...)
    9.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   10.         └─plumber:::make_parser(parsers)
   11.           └─stats::setNames(...)
  ── Error (test-tidy-plumber.R:68:3): pr_hooks registers hooks ──────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
       █
    1. ├─`%>%`(...) test-tidy-plumber.R:68:2
    2. ├─plumber::pr_get(., "/hello", function() "Hello")
    3. │ └─plumber::pr_handle(...)
    4. │   └─plumber:::validate_pr(pr)
    5. │     └─plumber::is_plumber(pr)
    6. ├─plumber::pr_hook(., "preroute", function() print("Pre-route hook"))
    7. │ └─plumber:::validate_pr(pr)
    8. │   └─plumber::is_plumber(pr)
    9. └─plumber::pr()
   10.   └─Plumber$new(file = file, filters = filters, envir = envir)
   11.     └─plumber:::initialize(...)
   12.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   13.         └─plumber:::make_parser(parsers)
   14.           └─stats::setNames(...)
  ── Error (test-tidy-plumber.R:94:3): pr_cookie adds cookie ─────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
       █
    1. ├─`%>%`(...) test-tidy-plumber.R:94:2
    2. ├─plumber::pr_get(...)
    3. │ └─plumber::pr_handle(...)
    4. │   └─plumber:::validate_pr(pr)
    5. │     └─plumber::is_plumber(pr)
    6. ├─plumber::pr_cookie(., random_cookie_key(), name = "counter")
    7. │ └─plumber:::validate_pr(pr)
    8. │   └─plumber::is_plumber(pr)
    9. └─plumber::pr()
   10.   └─Plumber$new(file = file, filters = filters, envir = envir)
   11.     └─plumber:::initialize(...)
   12.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   13.         └─plumber:::make_parser(parsers)
   14.           └─stats::setNames(...)
  ── Error (test-tidy-plumber.R:120:3): pr default functions perform as expected ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
       █
    1. ├─`%>%`(...) test-tidy-plumber.R:120:2
    2. ├─plumber::pr_get(., "/hello", function() "Hello")
    3. │ └─plumber::pr_handle(...)
    4. │   └─plumber:::validate_pr(pr)
    5. │     └─plumber::is_plumber(pr)
    6. ├─plumber::pr_set_serializer(., serialized())
    7. │ └─plumber:::validate_pr(pr)
    8. │   └─plumber::is_plumber(pr)
    9. └─plumber::pr()
   10.   └─Plumber$new(file = file, filters = filters, envir = envir)
   11.     └─plumber:::initialize(...)
   12.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   13.         └─plumber:::make_parser(parsers)
   14.           └─stats::setNames(...)
  ── Error (test-tidy-plumber.R:166:3): pr_filter adds filters ───────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-tidy-plumber.R:166:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-warnings.R:4:3): Routing to errors and 404s works ───────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/warn.R")) test-warnings.R:4:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-zzz-openapi.R:65:3): getApiSpec works with mounted routers ──────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-zzz-openapi.R:65:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-zzz-openapi.R:308:3): custom spec works ─────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-zzz-openapi.R:308:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-zzz-openapi.R:324:3): no params plumber router still produces spec when there is a func params ──
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr() test-zzz-openapi.R:324:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  ── Error (test-zzz-plumb_api.R:64:3): all example plumber apis plumb ───────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
       █
    1. └─plumber:::for_each_plumber_api(identity) test-zzz-plumb_api.R:64:2
    2.   └─base::lapply(...) helper-for-each-plumber-api.R:3:2
    3.     └─plumber:::FUN(X[[i]], ...)
    4.       └─plumber::plumb_api(package, name) helper-for-each-plumber-api.R:18:10
    5.         └─plumber::plumb(...)
    6.           └─Plumber$new(file)
    7.             └─plumber:::initialize(...)
    8.               └─self$setParsers(c("json", "form", "text", "octet", "multi"))
    9.                 └─plumber:::make_parser(parsers)
   10.                   └─stats::setNames(...)
  ── Error (test-zzzz-include.R:4:3): Includes work ──────────────────────────────
  Error: 'names' attribute [5] must be the same length as the vector [0]
  Backtrace:
      █
   1. └─plumber::pr(test_path("files/includes.R")) test-zzzz-include.R:4:2
   2.   └─Plumber$new(file = file, filters = filters, envir = envir)
   3.     └─plumber:::initialize(...)
   4.       └─self$setParsers(c("json", "form", "text", "octet", "multi"))
   5.         └─plumber:::make_parser(parsers)
   6.           └─stats::setNames(...)
  
  [ FAIL 123 | WARN 0 | SKIP 12 | PASS 583 ]
  Error: Test failures
  Execution halted