From 37fefa66cbd61bc592aba42b0ed3aefc0cf3abb0 Mon Sep 17 00:00:00 2001 From: felixcheung Date: Tue, 19 Jan 2016 16:33:48 -0800 Subject: [SPARK-12168][SPARKR] Add automated tests for conflicted function in R MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently this is reported when loading the SparkR package in R (probably would add is.nan) ``` Loading required package: methods Attaching package: ‘SparkR’ The following objects are masked from ‘package:stats’: cov, filter, lag, na.omit, predict, sd, var The following objects are masked from ‘package:base’: colnames, colnames<-, intersect, rank, rbind, sample, subset, summary, table, transform ``` Adding this test adds an automated way to track changes to masked method. Also, the second part of this test check for those functions that would not be accessible without namespace/package prefix. Incidentally, this might point to how we would fix those inaccessible functions in base or stats. Looking for feedback for adding this test. Author: felixcheung Closes #10171 from felixcheung/rmaskedtest. --- R/pkg/NAMESPACE | 2 +- R/pkg/inst/tests/testthat/test_context.R | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/R/pkg/NAMESPACE b/R/pkg/NAMESPACE index 34d14373b9..27d2f9822f 100644 --- a/R/pkg/NAMESPACE +++ b/R/pkg/NAMESPACE @@ -271,10 +271,10 @@ export("as.DataFrame", "createExternalTable", "dropTempTable", "jsonFile", - "read.json", "loadDF", "parquetFile", "read.df", + "read.json", "read.parquet", "read.text", "sql", diff --git a/R/pkg/inst/tests/testthat/test_context.R b/R/pkg/inst/tests/testthat/test_context.R index 1707e314be..92dbd575c2 100644 --- a/R/pkg/inst/tests/testthat/test_context.R +++ b/R/pkg/inst/tests/testthat/test_context.R @@ -17,6 +17,29 @@ context("test functions in sparkR.R") +test_that("Check masked functions", { + # Check that we are not masking any new function from base, stats, testthat unexpectedly + masked <- conflicts(detail = TRUE)$`package:SparkR` + expect_true("describe" %in% masked) # only when with testthat.. + func <- lapply(masked, function(x) { capture.output(showMethods(x))[[1]] }) + funcSparkROrEmpty <- grepl("\\(package SparkR\\)$|^$", func) + maskedBySparkR <- masked[funcSparkROrEmpty] + expect_equal(length(maskedBySparkR), 18) + expect_equal(sort(maskedBySparkR), sort(c("describe", "cov", "filter", "lag", "na.omit", + "predict", "sd", "var", "colnames", "colnames<-", + "intersect", "rank", "rbind", "sample", "subset", + "summary", "table", "transform"))) + # above are those reported as masked when `library(SparkR)` + # note that many of these methods are still callable without base:: or stats:: prefix + # there should be a test for each of these, except followings, which are currently "broken" + funcHasAny <- unlist(lapply(masked, function(x) { + any(grepl("=\"ANY\"", capture.output(showMethods(x)[-1]))) + })) + maskedCompletely <- masked[!funcHasAny] + expect_equal(length(maskedCompletely), 4) + expect_equal(sort(maskedCompletely), sort(c("cov", "filter", "sample", "table"))) +}) + test_that("repeatedly starting and stopping SparkR", { for (i in 1:4) { sc <- sparkR.init() -- cgit v1.2.3