summaryrefslogtreecommitdiff
path: root/pkgtools/R2pkg
diff options
context:
space:
mode:
authorrillig <rillig@pkgsrc.org>2019-10-13 18:13:03 +0000
committerrillig <rillig@pkgsrc.org>2019-10-13 18:13:03 +0000
commit9316f1940ab51035a330409e51c22d9ddf1e9129 (patch)
tree07acf0fffb79375e4e5aa3ee5bf10c8ae424cf40 /pkgtools/R2pkg
parent2ed0be4f2e134db9296f5171001a3c6f0fca80cc (diff)
downloadpkgsrc-9316f1940ab51035a330409e51c22d9ddf1e9129.tar.gz
pkgtools/R2pkg: add unit tests
Diffstat (limited to 'pkgtools/R2pkg')
-rw-r--r--pkgtools/R2pkg/Makefile9
-rw-r--r--pkgtools/R2pkg/files/R2pkg.R18
-rw-r--r--pkgtools/R2pkg/files/R2pkg_test.R128
3 files changed, 144 insertions, 11 deletions
diff --git a/pkgtools/R2pkg/Makefile b/pkgtools/R2pkg/Makefile
index 45ee742c5df..d9acc11ebdb 100644
--- a/pkgtools/R2pkg/Makefile
+++ b/pkgtools/R2pkg/Makefile
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.7 2019/10/13 13:26:22 rillig Exp $
+# $NetBSD: Makefile,v 1.8 2019/10/13 18:13:03 rillig Exp $
#
VERS= 0.6.2
@@ -16,6 +16,8 @@ USE_LANGUAGES= # none
AUTO_MKDIRS= yes
DEPENDS+= curl>=7.52.1:../../www/curl
+TEST_DEPENDS+= R-testthat>=2.2.1:../../devel/R-testthat
+TEST_DEPENDS+= R-withr>=2.1.2:../../devel/R-withr
SUBST_CLASSES+= R
SUBST_STAGE.R= pre-configure
@@ -24,7 +26,10 @@ SUBST_VARS.R= VERS MAKE LIBDIR
LIBDIR= ${PREFIX}/lib/R2pkg
do-extract:
- cd ${FILESDIR} && ${CP} R2pkg.* ${WRKSRC}
+ cd ${FILESDIR} && ${CP} R2pkg*.* ${WRKSRC}
+
+do-test:
+ cd ${WRKSRC} && LC_ALL=C ${PREFIX}/bin/Rscript R2pkg_test.R
do-install:
${INSTALL_SCRIPT} ${WRKSRC}/R2pkg.sh ${DESTDIR}${PREFIX}/sbin/R2pkg
diff --git a/pkgtools/R2pkg/files/R2pkg.R b/pkgtools/R2pkg/files/R2pkg.R
index e825a1b0048..01d0c0212f0 100644
--- a/pkgtools/R2pkg/files/R2pkg.R
+++ b/pkgtools/R2pkg/files/R2pkg.R
@@ -1,4 +1,4 @@
-# $NetBSD: R2pkg.R,v 1.5 2019/10/13 17:23:29 rillig Exp $
+# $NetBSD: R2pkg.R,v 1.6 2019/10/13 18:13:03 rillig Exp $
#
# Copyright (c) 2014,2015,2016,2017,2018,2019
# Brook Milligan. All rights reserved.
@@ -271,7 +271,7 @@ fix.continued.lines <- function(df,line='line')
df
}
-read.Makefile.as.dataframe <- function()
+read.Makefile.as.dataframe <- function(filename = 'Makefile.orig')
{
# message('===> read.Makefile.as.dataframe():')
@@ -322,7 +322,7 @@ read.Makefile.as.dataframe <- function()
re.value,
'$')
- df <- read.file.as.dataframe('Makefile.orig')
+ df <- read.file.as.dataframe(filename)
df$order <- 1:nrow(df)
df$category <- NA
@@ -498,9 +498,9 @@ sed.license <- function(license)
}
sed.r_pkgver <- function(r_pkgver) make.sed.command('R_PKGVER',r_pkgver)
-find.Rcpp <- function(s1, s2) grepl('Rcpp', paste(s1, s2))
+find.Rcpp <- function(imps, deps) grepl('Rcpp', paste(imps, deps))
-buildlink3.mk <- function(s1,s2)
+buildlink3.mk <- function(imps,deps)
{
BUILDLINK3.MK <- data.frame()
buildlink3.mk.list <- read.file.as.list('BUILDLINK3.MK')
@@ -511,7 +511,7 @@ buildlink3.mk <- function(s1,s2)
value <- line
BUILDLINK3.MK <- rbind(BUILDLINK3.MK,data.frame(key=key,value=value))
}
- if (find.Rcpp(s1,s2))
+ if (find.Rcpp(imps,deps))
{
buildlink3.line <- '.include "../../devel/R-Rcpp/buildlink3.mk"'
key <- 'devel'
@@ -696,13 +696,13 @@ update.dependency <- function(dependency,index=1)
level.warning('error updating dependency for ',depends(dependency))
}
-make.depends <- function(s1,s2)
+make.depends <- function(imps,deps)
{
- imports <- make.imports(s1,s2)
+ imports <- make.imports(imps,deps)
# XXX message('===> imports:')
# XXX print(imports)
DEPENDS <- data.frame()
- BUILDLINK3.MK <- buildlink3.mk(s1,s2)
+ BUILDLINK3.MK <- buildlink3.mk(imps,deps)
if (length(imports) > 0)
{
for (i in 1:length(imports))
diff --git a/pkgtools/R2pkg/files/R2pkg_test.R b/pkgtools/R2pkg/files/R2pkg_test.R
new file mode 100644
index 00000000000..5fa7c20f7d8
--- /dev/null
+++ b/pkgtools/R2pkg/files/R2pkg_test.R
@@ -0,0 +1,128 @@
+# $NetBSD: R2pkg_test.R,v 1.1 2019/10/13 18:13:03 rillig Exp $
+#
+# Copyright (c) 2019
+# Roland Illig. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. Neither the name of the author nor the names of any contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+source('R2pkg.R')
+library(testthat)
+library(withr)
+
+test_that('make.imports', {
+ imports <- make.imports('first (>= 1.0)', 'second')
+
+ expect_equal(imports, c('first(>=1.0)', 'second'))
+})
+
+test_that('make.dependency', {
+ imports <- make.dependency('first(>=1.0)')
+
+ expect_equal(imports, c('first', '>=1.0'))
+})
+
+test_that('buildlink3.file with matching version number', {
+ local_dir('..')
+ dependency <- make.dependency('ellipsis(>=0.1)')
+
+ bl3 <- buildlink3.file(dependency)
+
+ expect_equal(bl3, '../../math/R-ellipsis/buildlink3.mk')
+})
+
+# The version number of the dependency is not checked against
+# the resolved buildlink3 file.
+test_that('buildlink3.file with too high version number', {
+ local_dir('..')
+ dependency <- make.dependency('ellipsis(>=1000.0)')
+
+ bl3 <- buildlink3.file(dependency)
+
+ expect_equal(bl3, '../../math/R-ellipsis/buildlink3.mk')
+})
+
+test_that('level.warning', {
+ output <- ''
+ mock_message <- function(...) output <<- paste0(output, ..., '\n')
+
+ arg.level <<- 123 # XXX: should use with_environment instead
+ with_mock(message = mock_message, {
+ level.warning('mess', 'age', ' text')
+ })
+
+ expect_equal(output, '[ 123 ] WARNING: message text\n')
+})
+
+test_that('read.file.as.dataframe', {
+ content <- textConnection('VAR=value\nVAR2=value2\n')
+
+ df <- read.file.as.dataframe(content)
+
+ expect_equal(length(df$line), 3)
+ expect_equal(df$line[[1]], 'VAR=value')
+ expect_equal(df$line[[2]], 'VAR2=value2')
+ expect_equal(df$line[[3]], '')
+})
+
+test_that('read.Makefile.as.dataframe', {
+ lines <- c(
+ '# comment',
+ 'VAR= value',
+ '',
+ '.include "other.mk"',
+ '.if 0',
+ '.endif'
+ )
+ content <- paste0(paste(lines, collapse = '\n'), '\n')
+ expect_equal(content, '# comment\nVAR= value\n\n.include "other.mk"\n.if 0\n.endif\n')
+
+ df <- read.Makefile.as.dataframe(textConnection(content))
+
+ out <- ''
+ with_output_sink(textConnection('out', 'w', local = TRUE), {
+ print(df)
+ })
+
+ expected.out <- c(
+ ' line order category key_value key depends buildlink3.mk',
+ '1 # comment 1 NA FALSE <NA> FALSE FALSE',
+ '2 VAR= value 2 NA TRUE VAR FALSE FALSE',
+ '3 3 NA FALSE <NA> FALSE FALSE',
+ '4 .include "other.mk" 4 NA FALSE <NA> FALSE FALSE',
+ '5 .if 0 5 NA FALSE <NA> FALSE FALSE',
+ '6 .endif 6 NA FALSE <NA> FALSE FALSE',
+ '7 7 NA FALSE <NA> FALSE FALSE',
+ ' operator delimiter old_value old_todo',
+ '1 <NA> <NA> <NA> <NA>',
+ '2 = value ',
+ '3 <NA> <NA> <NA> <NA>',
+ '4 <NA> <NA> <NA> <NA>',
+ '5 <NA> <NA> <NA> <NA>',
+ '6 <NA> <NA> <NA> <NA>',
+ '7 <NA> <NA> <NA> <NA>'
+ )
+ expect_equal(out, expected.out)
+})