Rev 68857 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
## PR 1271 detach("package:base") crashes R.tools::assertError(detach("package:base"))## invalid 'lib.loc'stopifnot(length(installed.packages("mgcv")) == 0)## gave a low-level error message## package.skeleton() with metadata-only code## work in current (= ./tests/ directory):tmp <- tempfile()writeLines(c('setClass("foo", contains="numeric")','setMethod("show", "foo",',' function(object) cat("I am a \\"foo\\"\\n"))'),tmp)if(file.exists("myTst")) unlink("myTst", recursive=TRUE)package.skeleton("myTst", code_files = tmp)# with a file name warningfile.copy(tmp, (tm2 <- paste(tmp,".R", sep="")))unlink("myTst", recursive=TRUE)op <- options(warn=2) # *NO* "invalid file name" warning {failed in 2.7.[01]}:package.skeleton("myTst", code_files = tm2)options(op)##_2_ only a class, no generics/methods:writeLines(c('setClass("DocLink",','representation(name="character",',' desc="character"))'), tmp)if(file.exists("myTst2")) unlink("myTst2", recursive=TRUE)package.skeleton("myTst2", code_files = tmp)##- end_2_ # failed in R 2.11.0stopifnot(1 == grep("setClass",readLines(list.files("myTst/R", full.names=TRUE))),c("foo-class.Rd","show-methods.Rd") %in% list.files("myTst/man"))## failed for several reasons in R < 2.7.0#### Part 2: -- build, install, load and "inspect" the package:build.pkg <- function(dir) {stopifnot(dir.exists(dir))patt <- paste(basename(dir), ".*tar\\.gz$", sep="_")unlink(dir('.', pattern = patt))Rcmd <- paste(file.path(R.home("bin"), "R"), "CMD")r <- tail(system(paste(Rcmd, "build --keep-empty-dirs", shQuote(dir)),intern = TRUE), 3)## return name of tar file builtdir('.', pattern = patt)}build.pkg("myTst")## clean up any previous attempt (which might have left a 00LOCK)unlink("myLib", recursive = TRUE)dir.create("myLib")install.packages("myTst", lib = "myLib", repos=NULL, type = "source") # with warningsprint(installed.packages(lib.loc= "myLib", priority= "NA"))## (PR#13332)stopifnot(require("myTst",lib = "myLib"))sm <- findMethods(show, where= as.environment("package:myTst"))stopifnot(names(sm@names) == "foo")unlink("myTst_*")## getPackageName() for "package:foo":require('methods')library(tools)oo <- options(warn=2)detach("package:tools", unload=TRUE)options(oo)## gave warning (-> Error) about creating package name## --- keep this at end --- so we do not need a large if(.) { .. }## More building & installing packages## NB: tests were added here for 2.11.0.## NB^2: do not do this in the R sources!## and this testdir is not installed.pkgSrcPath <- file.path(Sys.getenv("SRCDIR"), "Pkgs")if(!file_test("-d", pkgSrcPath) && !interactive()) {unlink("myTst", recursive=TRUE)print(proc.time())q("no")}## else w/o clause:## could use file.copy(recursive = TRUE)system(paste('cp -R', shQuote(pkgSrcPath), shQuote(tempdir())))pkgPath <- file.path(tempdir(), "Pkgs")## pkgB tests an empty R directorydir.create(file.path(pkgPath, "pkgB", "R"), recursive = TRUE,showWarnings = FALSE)p.lis <- if("Matrix" %in% row.names(installed.packages(.Library)))c("pkgA", "pkgB", "exNSS4") else "exNSS4"for(p. in p.lis) {cat("building package", p., "...\n")r <- build.pkg(file.path(pkgPath, p.))cat("installing package", p., "using file", r, "...\n")## we could install the tar file ... (see build.pkg()'s definition)install.packages(r, lib = "myLib", repos=NULL, type = "source")stopifnot(require(p.,lib = "myLib", character.only=TRUE))detach(pos = match(p., sub("^package:","", search())))}(res <- installed.packages(lib.loc = "myLib", priority = "NA"))stopifnot(identical(res[,"Package"], setNames(,sort(c(p.lis, "myTst")))),res[,"LibPath"] == "myLib")### Specific Tests on our "special" packages: ------------------------------## Find objects which are NULL via "::" -- not to be expected often## we have one in our pkgA, but only if Matrix is presentif(dir.exists(file.path("myLib", "pkgA"))) {require(pkgA, lib="myLib")data(package = "pkgA") # -> nilDatastopifnot(is.null( pkgA:: nil),is.null( pkgA::: nil),is.null( pkgA:: nilData)) # <-## R-devel (pre 3.2.0) wrongly errored for NULL lazy data## ::: does not apply to data sets:tools::assertError(is.null(pkgA:::nilData))}if(dir.exists(file.path("myLib", "exNSS4"))) {for(ns in c("pkgB", "pkgA", "Matrix", "exNSS4")) unloadNamespace(ns)## Both exNSS4 and Matrix define "atomicVector" *the same*,## but 'exNSS4' has it extended - and hence *both* are registered in cache -> "conflicts"requireNamespace("exNSS4", lib= "myLib")requireNamespace("Matrix", lib= .Library)tools::assertCondition( ## condition, because this *still* uses message():acl <- getClass("atomicVector")) ## gave an Error: “atomicVector” is not a defined class## ... because it was found non-uniquelystopifnot(is(acl, "classRepresentation"), isVirtualClass(acl))}## clean upunlink("myLib", recursive = TRUE)unlink(file.path(pkgPath), recursive = TRUE)unlink("myTst", recursive = TRUE)proc.time()