Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion R/docs.R
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,9 @@ methods_prep <- function(x, package = NULL) {

# Suppress self-links (methods documented on the same page as the generic)
generic_topic <- help_topic(x, package)
meth$topic[meth$topic == generic_topic] <- NA
same_topic <- meth$topic == generic_topic
same_package <- meth$package == package
meth$topic[same_topic & same_package] <- NA

documented <- !is.na(meth$topic)
external <- meth$package != package
Expand Down
9 changes: 9 additions & 0 deletions R/utils.R
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
# for internal use only
document_test_packages <- function() {
pkgs <- list.dirs("tests/testthat", recursive = FALSE, full.names = TRUE)
pkgs <- pkgs[file.exists(file.path(pkgs, "DESCRIPTION"))]
for (pkg in pkgs) {
getNamespace("roxygen2")$roxygenise(pkg)
}
}

local_load_all <- function(path, env = parent.frame()) {
pkgload::load_all(path, quiet = TRUE)
defer(pkgload::unload(path), env = env)
Expand Down
51 changes: 32 additions & 19 deletions tests/testthat/_snaps/docs.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
# methods from multiple packages

Code
cat(methods_list("multi_method"))
cat(methods_list("uni"))
Output
\itemize{
\item \code{character}
\item \code{\link[=multi-method-3]{data.frame}}
\item \code{\link[=multi-method-2]{default}}
\item \code{\link[testMultiPackage:multi-method-4]{matrix}} (\pkg{testMultiPackage})
\item \code{\link[=uni.data.frame]{data.frame}}
\item \code{\link[=uni.default]{default}}
\item \code{\link[testExtendsS3:uni.matrix]{matrix}} (\pkg{testExtendsS3})
}

# S4 bullets print with no issues

Code
cat(methods_list("multi_method"))
cat(methods_list("multi"))
Output
\itemize{
\item \code{ANY,ANY}
Expand All @@ -25,16 +25,29 @@
# S4 and S3 packages can intermingle

Code
cat(methods_list("multi_method"))
cat(methods_list("uni", "testS4"))
Output
\itemize{
\item \code{\link[testS4Docs:multi_method]{ANY,ANY}} (\pkg{testS4Docs})
\item \code{character,ANY} (\pkg{testS4Docs})
\item \code{\link[testS4Docs:multi_method]{numeric,ANY}} (\pkg{testS4Docs})
\item \code{\link[testS4Docs:multi_method]{numeric,integer}} (\pkg{testS4Docs})
\item \code{ANY}
\item \code{character}
\item \code{\link[=multi-method-3]{data.frame}}
\item \code{\link[=multi-method-2]{default}}
\item \code{numeric}
\item \code{character} (\pkg{testS3})
\item \code{\link[testS3:uni.data.frame]{data.frame}} (\pkg{testS3})
\item \code{\link[testS3:uni.default]{default}} (\pkg{testS3})
}

---

Code
cat(methods_list("uni", "testS3"))
Output
\itemize{
\item \code{\link[testS4:uni]{ANY}} (\pkg{testS4})
\item \code{character} (\pkg{testS4})
\item \code{\link[testS4:uni]{numeric}} (\pkg{testS4})
\item \code{character}
\item \code{\link[=uni.data.frame]{data.frame}}
\item \code{\link[=uni.default]{default}}
}

# multiple methods with same rdname
Expand All @@ -43,8 +56,8 @@
cat(methods_list("same_rd_name"))
Output
\itemize{
\item \code{\link[=same_rd_name-2]{data.frame}}
\item \code{\link[=same_rd_name-2]{default}}
\item \code{\link[=same_rd_name.default]{data.frame}}
\item \code{\link[=same_rd_name.default]{default}}
}

# self-links are suppressed
Expand All @@ -53,16 +66,16 @@
cat(methods_list("self_link"))
Output
\itemize{
\item \code{\link[=self_link-data.frame]{data.frame}}
\item \code{\link[=self_link.data.frame]{data.frame}}
\item \code{default}
}

# methods_inline() produces comma-separated output

Code
cat(methods_inline("multi_method"))
cat(methods_inline("uni"))
Output
\code{character}, \code{\link[=multi-method-3]{data.frame}},
\code{\link[=multi-method-2]{default}},
\code{\link[testMultiPackage:multi-method-4]{matrix}} (\pkg{testMultiPackage})
\code{character}, \code{\link[=uni.data.frame]{data.frame}},
\code{\link[=uni.default]{default}},
\code{\link[testExtendsS3:uni.matrix]{matrix}} (\pkg{testExtendsS3})

8 changes: 4 additions & 4 deletions tests/testthat/_snaps/find-s7.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
# S7 methods_list output

Code
cat(methods_list("s7_method"))
cat(methods_list("uni"))
Output
\itemize{
\item \code{\link[=s7-method-2]{character}}
\item \code{\link[=uni-character-method]{character}}
\item \code{integer}
}

# S7 multi-dispatch methods_list output

Code
cat(methods_list("s7_multi"))
cat(methods_list("multi"))
Output
\itemize{
\item \code{\link[=s7-multi-2]{character,integer}}
\item \code{\link[=multi-character-integer-method]{character,integer}}
\item \code{integer,character}
}

27 changes: 14 additions & 13 deletions tests/testthat/test-docs.R
Original file line number Diff line number Diff line change
@@ -1,36 +1,37 @@
test_that("methods from multiple packages", {
local_load_all("testMultiMethod")
local_load_all("testMultiPackage")
expect_snapshot(cat(methods_list("multi_method")))
local_load_all("testS3")
local_load_all("testExtendsS3")
expect_snapshot(cat(methods_list("uni")))
})

test_that("S4 bullets print with no issues", {
local_load_all("testS4Docs")
local_load_all("testS4")

expect_snapshot(cat(methods_list("multi_method")))
expect_snapshot(cat(methods_list("multi")))
})

test_that("S4 and S3 packages can intermingle", {
local_load_all("testS4Docs")
local_load_all("testMultiMethod")
local_load_all("testS4")
local_load_all("testS3")

expect_snapshot(cat(methods_list("multi_method")))
expect_snapshot(cat(methods_list("uni", "testS4")))
expect_snapshot(cat(methods_list("uni", "testS3")))
})

test_that("multiple methods with same rdname", {
local_load_all("testSameRd")
local_load_all("testS3")
expect_snapshot(cat(methods_list("same_rd_name")))
})

test_that("self-links are suppressed", {
local_load_all("testSelfLink")
local_load_all("testS3")
expect_snapshot(cat(methods_list("self_link")))
})

test_that("methods_inline() produces comma-separated output", {
local_load_all("testMultiMethod")
local_load_all("testMultiPackage")
expect_snapshot(cat(methods_inline("multi_method")))
local_load_all("testS3")
local_load_all("testExtendsS3")
expect_snapshot(cat(methods_inline("uni")))
})

test_that("no methods returns empty string", {
Expand Down
24 changes: 12 additions & 12 deletions tests/testthat/test-find-s7.R
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
test_that("methods_find finds S7 methods", {
local_load_all("testS7Docs")
result <- methods_find("s7_method")
local_load_all("testS7")
result <- methods_find("uni")
expect_equal(result$class, c("character", "integer"))
expect_equal(result$package, rep("testS7Docs", 2))
expect_equal(result$topic, c("s7-method-2", "s7_method"))
expect_equal(result$package, rep("testS7", 2))
expect_equal(result$topic, c("uni-character-method", "uni"))
})

test_that("methods_find finds S7 multi-dispatch methods", {
local_load_all("testS7Docs")
result <- methods_find("s7_multi")
local_load_all("testS7")
result <- methods_find("multi")
expect_equal(result$class, c("character,integer", "integer,character"))
expect_equal(result$package, rep("testS7Docs", 2))
expect_equal(result$topic, c("s7-multi-2", "s7_multi"))
expect_equal(result$package, rep("testS7", 2))
expect_equal(result$topic, c("multi-character-integer-method", "multi"))
})

test_that("S7 methods_list output", {
local_load_all("testS7Docs")
expect_snapshot(cat(methods_list("s7_method")))
local_load_all("testS7")
expect_snapshot(cat(methods_list("uni")))
})

test_that("S7 multi-dispatch methods_list output", {
local_load_all("testS7Docs")
expect_snapshot(cat(methods_list("s7_multi")))
local_load_all("testS7")
expect_snapshot(cat(methods_list("multi")))
})
48 changes: 24 additions & 24 deletions tests/testthat/test-find.R
Original file line number Diff line number Diff line change
@@ -1,35 +1,35 @@
test_that("methods_find returns expected columns", {
local_load_all("testMultiMethod")
result <- methods_find("multi_method")
local_load_all("testS3")
result <- methods_find("uni")
expect_named(
result,
c("method", "class", "package", "topic", "visible", "source")
)
})

test_that("methods_find finds S3 methods", {
local_load_all("testMultiMethod")
result <- methods_find("multi_method")
local_load_all("testS3")
result <- methods_find("uni")
expect_equal(result$class, c("character", "data.frame", "default"))
expect_equal(result$package, rep("testMultiMethod", 3))
expect_equal(result$topic, c(NA, "multi-method-3", "multi-method-2"))
expect_equal(result$package, rep("testS3", 3))
expect_equal(result$topic, c(NA, "uni.data.frame", "uni.default"))
})

test_that("methods_find finds S4 methods", {
local_load_all("testS4Docs")
result <- methods_find("multi_method")
local_load_all("testS4")
result <- methods_find("multi")
expect_equal(
result$class,
c("ANY,ANY", "character,ANY", "numeric,ANY", "numeric,integer")
)
expect_equal(result$package, rep("testS4Docs", 4))
expect_equal(result$package, rep("testS4", 4))
})

test_that("methods_find finds methods across packages", {
local_load_all("testMultiMethod")
local_load_all("testMultiPackage")
result <- methods_find("multi_method")
expect_contains(result$package, c("testMultiMethod", "testMultiPackage"))
local_load_all("testS3")
local_load_all("testExtendsS3")
result <- methods_find("uni")
expect_contains(result$package, c("testS3", "testExtendsS3"))
})

test_that("methods_find returns empty result for generic with no methods", {
Expand All @@ -38,35 +38,35 @@ test_that("methods_find returns empty result for generic with no methods", {
})

test_that("methods_find groups same rdname methods under same topic", {
local_load_all("testSameRd")
local_load_all("testS3")
result <- methods_find("same_rd_name")
expect_equal(result$topic, c("same_rd_name-2", "same_rd_name-2"))
expect_equal(result$topic, c("same_rd_name.default", "same_rd_name.default"))
expect_equal(result$class, c("data.frame", "default"))
})

test_that("lookup_package finds S3 method package", {
local_load_all("testMultiMethod")
local_load_all("testS3")
expect_equal(
lookup_package("multi_method", "default", FALSE),
"testMultiMethod"
lookup_package("uni", "default", FALSE),
"testS3"
)
expect_equal(
lookup_package("multi_method", "data.frame", FALSE),
"testMultiMethod"
lookup_package("uni", "data.frame", FALSE),
"testS3"
)
})

test_that("lookup_package finds S4 method package", {
local_load_all("testS4Docs")
local_load_all("testS4")
expect_equal(
lookup_package("multi_method", "numeric,ANY", TRUE),
"testS4Docs"
lookup_package("multi", "numeric,ANY", TRUE),
"testS4"
)
})

test_that("lookup_package returns NA for nonexistent method", {
expect_equal(
lookup_package("multi_method", "nonexistent_class", FALSE),
lookup_package("uni", "nonexistent_class", FALSE),
NA_character_
)
})
4 changes: 4 additions & 0 deletions tests/testthat/testExtendsS3/DESCRIPTION
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Package: testExtendsS3
Version: 0.1
Encoding: UTF-8
Config/roxygen2/version: 7.3.3.9000
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
# Generated by roxygen2: do not edit by hand

export(uni.matrix)
7 changes: 7 additions & 0 deletions tests/testthat/testExtendsS3/R/uni.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#' Test data frame
#'
#' @param x,y A parameter
#' @export
uni.matrix <- function(x, y) {
x
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 0 additions & 9 deletions tests/testthat/testMultiMethod/DESCRIPTION

This file was deleted.

6 changes: 0 additions & 6 deletions tests/testthat/testMultiMethod/NAMESPACE

This file was deleted.

Loading
Loading