SCM

SCM Repository

[inlinedocs] Annotation of /pkg/inlinedocs/R/test.R
ViewVC logotype

Annotation of /pkg/inlinedocs/R/test.R

Parent Directory Parent Directory | Revision Log Revision Log


Revision 307 - (view) (download)

1 : tdhock 110 test.file <- function
2 :     ### Check an R code file with inlinedocs to see if the
3 :     ### extract.docs.file parser accurately extracts all the code inside!
4 :     ### The code file should contain a variable .result which is the
5 :     ### documentation list that you should get when you apply
6 :     ### extract.docs.file to the file. We check for identity of elements
7 :     ### of elements of the list, so the order of elements should not
8 :     ### matter, and thus this should be a good robust unit test.
9 : tdhock 113 (f,
10 : tdhock 110 ### File name of R code file with inlinedocs to parse and check.
11 : tdhock 113 verbose=TRUE
12 :     ### Show output?
13 : tdhock 110 ){
14 :     e <- new.env()
15 : tdhock 156 suppressWarnings(sys.source(f,e))
16 : tdhock 110 ## these are the items to check for, in no particular order
17 :     .result <- e$.result
18 : tdhock 239 parsers <- e$.parsers
19 :     result <- extract.docs.file(f,parsers)
20 : tdhock 113 for(FUN in names(.result)){
21 :     if(verbose)cat(FUN,"")
22 : tdhock 138 fun <- result[[FUN]]
23 :     .fun <- .result[[FUN]]
24 :     ## first check to make sure all the stored items are there
25 :     for(N in names(.fun)){
26 :     .res <- .fun[[N]]
27 :     res <- fun[[N]]
28 :     if(is.null(res) || is.na(res) || is.na(.res) || .res!=res){
29 : tdhock 307 cat("\n-----\n",res,"\n-----\nin ",FUN,
30 :     "$",N,", expected:\n-----\n",.res,"\n-----\n")
31 :     stop("docs mismatch in ",f)
32 : tdhock 113 }
33 : tdhock 110 }
34 : tdhock 138 ## now check and see if there are no additional items!
35 :     additional <- !names(fun)%in%names(.fun)
36 :     show <- fun[additional] ##ignore NULL extracted items
37 :     show <- show[!sapply(show,is.null)]
38 :     if(length(show)){
39 :     cat("\n")
40 :     print(show)
41 :     stop("extracted some unexpected docs!")
42 :     }
43 : tdhock 110 }
44 : tdhock 202 ## make sure there are no unexpected outer lists
45 :     not.expected <- names(result)[!names(result)%in%names(.result)]
46 :     if(length(not.expected)){
47 :     print(not.expected)
48 :     stop("extracted some unexpected documentation objects!")
49 :     }
50 : tdhock 156 ## finally make a package using this file and see if it passes
51 : tdhock 275 ## without warnings TDH 27 May 2011 added !interactive() since
52 :     ## recursive calling R CMD check seems to systematically
53 :     ## fail... ERROR: startup.Rs not found. This file is usually copied
54 :     ## to the check directory and read as a .Rprofile, as done in
55 :     ## tools:::.runPackageTests ... is this a bug in R? Anyway for now
56 :     ## let's just not run the R CMD check.
57 :     if(!is.null(e$.dontcheck) || !interactive())return()
58 : tdhock 247 make.package.and.check(f,parsers,verbose)
59 : tdhock 239 if(verbose)cat("\n")
60 :     }
61 :    
62 : tdhock 249 make.package.and.check <- function
63 :     ### Assemble some R code into a package and process it using R CMD
64 :     ### check, stopping with an error if the check resulted in any errors
65 :     ### or warnings.
66 :     (f, ##<< R code file name from which we will make a package
67 :     parsers=default.parsers,
68 :     ### Parsers to use to make the package documentation.
69 :     verbose=TRUE
70 :     ### print the check command line?
71 :     ){
72 : tdhock 274 pkgname <- sub("[.][rR]$","",basename(f))
73 : tdhock 156 pkgdir <- file.path(tempdir(),pkgname)
74 :     if(file.exists(pkgdir))unlink(pkgdir,recursive=TRUE)
75 :     rdir <- file.path(pkgdir,"R")
76 : tdhock 275 if(verbose)print(rdir)
77 : tdhock 156 dir.create(rdir,recursive=TRUE)
78 : tdhock 274 desc <- system.file(file.path("silly","DESCRIPTION"),package="inlinedocs")
79 : tdhock 156 file.copy(desc,pkgdir)
80 :     file.copy(f,rdir)
81 : tdhock 239 package.skeleton.dx(pkgdir,parsers)
82 : tdhock 156 cmd <- sprintf("%s CMD check %s",file.path(R.home("bin"), "R"),pkgdir)
83 :     if(verbose)cat(cmd,"\n")
84 :     checkLines <- system(cmd,intern=TRUE)
85 : tdhock 275 warnLines <- grep("(WARNING|ERROR)",checkLines,value=TRUE)
86 : tdhock 156 if(length(warnLines)>0){
87 :     print(warnLines)
88 : tdhock 275 stop("ERROR/WARNING encountered in package check!")
89 : tdhock 156 }
90 : tdhock 110 }
91 : tdhock 156
92 : tdhock 111 save.test.result <- function
93 :     ### For unit tests, this is an easy way of getting a text
94 :     ### representation of the list result of extract.docs.file.
95 :     (f
96 :     ### R code file with inlinedocs to process with extract.docs.file.
97 :     ){
98 : tdhock 113 .result <- extract.docs.file(f)
99 : tdhock 118 dump(".result",tmp <- tempfile(),control=NULL)
100 :     lines <- readLines(tmp)
101 : tdhock 113 cat(paste(lines,"\n"))
102 : tdhock 111 }

root@r-forge.r-project.org
ViewVC Help
Powered by ViewVC 1.0.0  
Thanks to:
Vienna University of Economics and Business Powered By FusionForge