pkgsrc/pkgtools/R2pkg/files/R2pkg_test.R
2019-10-25 19:00:16 +00:00

966 lines
26 KiB
R

# $NetBSD: R2pkg_test.R,v 1.22 2019/10/25 19:00:16 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)
# TODO: use a test fixture for setting these
arg.recursive <- FALSE
arg.update <- FALSE
original_wd <- getwd()
package_dir <- file.path(Sys.getenv('PKGSRCDIR'), 'pkgtools', 'R2pkg')
#' don't use tabs in the output; see https://stackoverflow.com/q/58465177
expect_printed <- function(obj, ...) {
out <- ''
with_output_sink(textConnection('out', 'w', local = TRUE), {
print(obj, right = FALSE)
})
exp <- c(...)
if (!identical(out, exp)) {
write(out, file.path(original_wd, 'R2pkg_test.out.txt'))
write(exp, file.path(original_wd, 'R2pkg_test.exp.txt'))
}
expect_equal(length(out), length(exp))
expect_equal(!!out, !!exp)
}
linesConnection <- function(...)
textConnection(paste0(c(...), collapse = '\n'))
make_mklines <- function(...)
read_mklines(linesConnection(...))
mocked_system <- function() {
commands <- list()
mock <- function(cmd) {
commands <<- append(commands, cmd)
0
}
get_commands <- function()
unlist(commands)
expect_commands <- function(...)
expect_equal(!!get_commands(), !!c(...))
list(
mock = mock,
commands = get_commands,
expect_commands = expect_commands)
}
mocked_message <- function() {
messages <- list()
mock <- function(...)
messages <<- append(messages, paste0(...))
get_messages <- function()
unlist(messages)
expect_messages <- function(...)
expect_equal(!!get_messages(), !!c(...))
list(
mock = mock,
messages = get_messages,
expect_messages = expect_messages)
}
test_that('linesConnection', {
lines <- readLines(linesConnection('1', '2', '3'))
expect_equal(lines, c('1', '2', '3'))
})
test_that('level.message', {
message <- mocked_message()
local_mock(message = message$mock)
arg.level <<- 123 # XXX: should use with_environment instead
level.message('mess', 'age', ' text')
message$expect_messages(
'[ 123 ] message text')
})
test_that('level.warning', {
message <- mocked_message()
local_mock(message = message$mock)
arg.level <<- 321 # XXX: should use with_environment instead
level.warning('mess', 'age', ' text')
message$expect_messages(
'[ 321 ] WARNING: message text')
})
test_that('trim.space', {
expect_equal(trim.space(' hello, \t\nworld '), 'hello,world')
})
test_that('one.line', {
expect_equal(
one.line(' \t\nhello, \t\nworld \t\n'),
' \t hello, \t world \t ')
})
test_that('pkg.vers', {
expect_equal(pkg.vers('1_0-2.3'), '1.0-2.3')
})
test_that('varassign', {
expect_equal(varassign('VAR', 'value'), 'VAR=\tvalue')
})
test_that('relpath_category', {
expect_equal(relpath_category('../../other/pkgbase'), 'other')
expect_equal(relpath_category('../../wip/pkgbase/Makefile'), 'wip')
expect_equal(
relpath_category(c(
'../../wip/pkgbase/Makefile',
'../../other/pkgbase')),
c(
'wip',
'other'))
# undefined behavior
expect_equal(relpath_category('..'), NA_character_)
})
test_that('adjacent.duplicates', {
expect_equal(
adjacent.duplicates(c(1, 2, 2, 2, 3, 3, 4)),
c(FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE))
})
test_that('paste2', {
expect_equal(paste2(NA, NA), '')
expect_equal(paste2('', NA), '')
expect_equal(paste2(NA, ''), '')
expect_equal(paste2('', ''), ' ')
expect_equal(paste2('one', 'two'), 'one two')
})
test_that('end.paragraph', {
expect_equal(end.paragraph(list()), list())
expect_equal(end.paragraph(list('line')), list('line', ''))
})
test_that('as.sorted.list', {
expect_equal(as.sorted.list(data.frame()), list())
expect_equal(
as.sorted.list(data.frame(
varnames = c('A', 'B', 'B', 'B', 'A'),
values = c('1', '3', '2', '1', '1'))),
list('1', '1', '2', '3'))
})
test_that('categorize.key_value', {
mklines <- make_mklines(
'\tPATH=/bin echo',
'DEPENDS+= R-ellipsis>=0:../../math/R-ellipsis',
'.include "../../math/R-ellipsis/buildlink3.mk"')
expect_printed(
data.frame(
key_value = mklines$key_value,
key = mklines$key,
old_value = mklines$old_value),
' key_value key old_value ',
'1 FALSE <NA> <NA> ',
'2 TRUE DEPENDS R-ellipsis>=0:../../math/R-ellipsis',
'3 FALSE <NA> <NA> ')
})
test_that('categorize.depends', {
mklines <- make_mklines(
'DEPENDS+=\tR-ellipsis>=0:../../math/R-ellipsis',
'.include "../../math/R-ellipsis/buildlink3.mk"')
expect_equal(mklines$depends, c(TRUE, FALSE))
})
test_that('categorize.buildlink', {
mklines <- make_mklines(
'DEPENDS+=\tR-ellipsis>=0:../../math/R-ellipsis',
'.include "../../math/R-ellipsis/buildlink3.mk"')
expect_equal(mklines$buildlink3.mk, c(FALSE, TRUE))
})
test_that('fix.continued.lines', {
message <- mocked_message()
local_mock(message = message$mock)
mklines <- make_mklines(
'# comment \\',
'continued=comment',
'VAR1= \\',
'\tvalue',
'VAR2=\tvalue')
expect_equal(mklines$key_value, c(FALSE, TRUE, TRUE, TRUE, TRUE))
expect_equal(mklines$line, c(
'# comment \\',
'continued=comment', # FIXME: continuation from line 1
'VAR1=',
'VAR1+=\tvalue', # FIXME: extra space at the beginning
'VAR2=\tvalue'))
message$expect_messages(
'[ 321 ] WARNING: unhandled continued line(s)')
})
test_that('fix.continued.lines, single continued line at EOF', {
mklines <- make_mklines(
'VAR= \\')
expect_equal(mklines$line, 'VAR= \\')
})
test_that('fix.continued.lines, no continued lines', {
mklines <- make_mklines(
'VAR= value',
'VAR= value',
'VAR= value')
expect_equal(mklines$line, rep('VAR= value', 3))
})
test_that('read_mklines', {
mklines <- make_mklines(
'# comment',
'VAR= value',
'',
'.include "other.mk"',
'.if 0',
'.endif')
expect_printed(mklines,
' line order key_value old_todo key operator delimiter',
'1 # comment 1 FALSE <NA> <NA> <NA> <NA> ',
'2 VAR= value 2 TRUE VAR = ',
'3 3 FALSE <NA> <NA> <NA> <NA> ',
'4 .include "other.mk" 4 FALSE <NA> <NA> <NA> <NA> ',
'5 .if 0 5 FALSE <NA> <NA> <NA> <NA> ',
'6 .endif 6 FALSE <NA> <NA> <NA> <NA> ',
' old_value category depends buildlink3.mk',
'1 <NA> NA FALSE FALSE ',
'2 value NA FALSE FALSE ',
'3 <NA> NA FALSE FALSE ',
'4 <NA> NA FALSE FALSE ',
'5 <NA> NA FALSE FALSE ',
'6 <NA> NA FALSE FALSE ')
})
test_that('read.file.as.list can read an empty file', {
filename <- ''
local_tempfile('filename')
file.create(filename)
lines <- read.file.as.list(filename)
expect_equal(lines, list())
})
test_that('read.file.as.list can read lines from a file', {
filename <- ''
local_tempfile('filename')
writeLines(c('first', 'second \\', 'third'), filename)
lines <- read.file.as.list(filename)
expect_equal(lines, list('first', 'second \\', 'third'))
})
test_that('mklines.get_value, exactly 1 variable assignment, no space', {
mklines <- make_mklines(
'VAR=value')
str <- mklines.get_value(mklines, 'VAR')
expect_equal(str, 'value')
})
test_that('read.file.as.value, exactly 1 variable assignment', {
mklines <- make_mklines(
'VAR=\tvalue')
str <- mklines.get_value(mklines, 'VAR')
expect_equal(str, 'value')
})
test_that('read.file.as.value, commented variable assignment', {
mklines <- make_mklines(
'#VAR=\tvalue')
str <- mklines.get_value(mklines, 'VAR')
# TODO: Check whether commented variables should really be considered.
expect_equal(str, 'value')
})
test_that('read.file.as.value, multiple variable assignments', {
mklines <- make_mklines(
'VAR=\tvalue',
'VAR=\tvalue2')
str <- mklines.get_value(mklines, 'VAR')
expect_equal(str, '')
})
# test_that('read.file.as.values', {
# })
test_that('simplify.whitespace', {
expect_equal(simplify.whitespace('\t \nword \t\n\f'), ' \nword \n\f')
})
test_that('remove.punctuation', {
expect_equal(remove.punctuation('+,-./'), '+./')
})
test_that('remove.quotes', {
expect_equal(remove.quotes('"\'hello`,,'), 'hello,,')
})
test_that('remove.articles', {
expect_equal(remove.articles('Get a life'), 'Get life')
expect_equal(remove.articles('An apple a day'), ' apple day') # TODO: uppercase the first letter
expect_equal(remove.articles('Annnnnnnnnn apple'), 'Annnnnnnnnn apple')
expect_equal(remove.articles('Grade A'), 'Grade ')
expect_equal(remove.articles('Grade A is best'), 'Grade is best')
})
test_that('case.insensitive.equals', {
expect_equal(case.insensitive.equals('HELLO', 'hello'), TRUE)
expect_equal(case.insensitive.equals('HELLO', 'hellx'), FALSE)
expect_equal(case.insensitive.equals(' "HELLO"', 'hello'), FALSE)
expect_equal(case.insensitive.equals(' "HELLO"', ' hello'), FALSE)
expect_equal(case.insensitive.equals(' HELLO', 'hello'), FALSE)
expect_equal(case.insensitive.equals(' HELLO', ' hello'), TRUE)
})
test_that('weakly.equals', {
expect_equal(weakly.equals('HELLO', 'hello'), TRUE)
expect_equal(weakly.equals('HELLO', 'hellx'), FALSE)
expect_equal(weakly.equals(' "HELLO"', 'hello'), FALSE)
expect_equal(weakly.equals(' "HELLO"', ' hello'), TRUE)
expect_equal(weakly.equals(' HELLO', 'hello'), FALSE)
expect_equal(weakly.equals(' HELLO', ' hello'), TRUE)
})
# test_that('pkgsrc.license', {
# })
# test_that('use.tools', {
# })
# test_that('license', {
# })
# test_that('maintainer', {
# })
test_that('find.Rcpp', {
expect_equal(find.Rcpp(list(), list()), FALSE)
expect_equal(find.Rcpp(list('Other'), list('Other')), FALSE)
expect_equal(find.Rcpp(list('Rcpp'), list()), TRUE)
expect_equal(find.Rcpp(list(), list('Rcpp')), TRUE)
})
# test_that('buildlink3.mk', {
# })
test_that('varassigns', {
expect_equal(
varassigns('VARNAME', c('value1', 'value2', '', 'value3')),
list(
'VARNAME=\tvalue1',
'VARNAME=\tvalue2', # FIXME: This doesn't make sense.
'',
'VARNAME=\tvalue3'))
})
# test_that('categories', {
# })
# test_that('description', {
# })
# test_that('filter.imports', {
# })
test_that('make.imports', {
expect_equal(
make.imports(NA_character_, NA_character_),
character(0))
expect_equal(
make.imports('first (>= 1.0)', 'second'),
c('first(>=1.0)', 'second'))
expect_equal(
make.imports('first(>=1)', 'second(>=1)'),
c('first(>=1)second(>=1)'))
expect_equal(
make.imports('first(>=1) second(>=1)', NA_character_),
c('first(>=1)second(>=1)'))
})
test_that('make.dependency', {
expect_equal(make.dependency('pkgname'), c('pkgname'))
expect_equal(make.dependency('pkgname(>=1.0)'), c('pkgname', '>=1.0'))
# undefined behavior
expect_equal(make.dependency('pkgname (>= 1.0)'), c('pkgname ', '>= 1.0'))
})
test_that('depends', {
expect_equal(depends(make.dependency('pkg')), 'pkg')
expect_equal(depends(make.dependency('pkg(>=1.0)')), 'pkg')
expect_equal(depends(make.dependency('ellipsis(>=1.0)')), 'ellipsis')
# undefined behavior
expect_equal(depends(make.dependency('pkg (>= 1.0)')), 'pkg ')
expect_equal(depends(make.dependency('ellipsis (>= 1.0)')), 'ellipsis ')
})
test_that('depends.pkg', {
local_dir(package_dir)
expect_equal(depends.pkg('ellipsis'), '../../math/R-ellipsis')
})
test_that('new.depends.pkg', {
local_dir(package_dir)
if (dir.exists('../../wip'))
expect_equal(new.depends.pkg('C50'), '../../wip/R-C50')
})
# test_that('depends.pkg.fullname', {
# })
# test_that('depends.pkg.name', {
# })
# test_that('depends.pkg.vers', {
# })
# test_that('depends.vers', {
# })
# test_that('depends.vers.2', {
# })
# test_that('depends.dir', {
# })
# test_that('depends.line', {
# })
# test_that('depends.line.2', {
# })
test_that('buildlink3.file with matching version number', {
local_dir(package_dir)
dependency <- make.dependency('bitops(>=0.1)')
bl3 <- buildlink3.file(dependency)
expect_equal(bl3, '../../math/R-bitops/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(package_dir)
dependency <- make.dependency('bitops(>=1000.0)')
bl3 <- buildlink3.file(dependency)
expect_equal(bl3, '../../math/R-bitops/buildlink3.mk')
})
test_that('buildlink3.line', {
local_dir(package_dir)
expect_equal(
buildlink3.line(make.dependency('ellipsis')),
'.include "../../math/R-ellipsis/buildlink3.mk"')
# undefined behavior
expect_equal(
buildlink3.line(make.dependency('not-found')),
'.include "NA/buildlink3.mk"')
})
# test_that('dependency.dir', {
# })
# test_that('message.wip.dependency', {
# })
test_that('update.dependency', {
system <- mocked_system()
message <- mocked_message()
local_mock(system = system$mock, message = message$mock)
local_dir(package_dir)
arg.packages_list <<- 'already-updated'
arg.r2pkg <<- 'pkg/bin/R2pkg'
arg.args <<- '-u'
update.dependency(make.dependency('assertthat'))
system$expect_commands(
paste0(
'grep -E -q -e "assertthat" already-updated ',
'|| ',
'(cd ../../devel/R-assertthat && pkg/bin/R2pkg -u assertthat)'))
message$expect_messages(
"[ 321 ] updating dependency for assertthat: ../../devel/R-assertthat")
})
# test_that('make.depends', {
# })
test_that('use_languages without Rcpp as dependency', {
languages <- use_languages(list(), list())
expect_equal(languages, '# none')
})
test_that('use_languages with Rcpp as dependency', {
languages <- use_languages(list('Rcpp(>=0)'), list())
expect_equal(languages, 'c c++')
})
test_that('write.Makefile', {
tmpdir <- paste(tempdir(), 'category', 'pkgdir', sep = '/')
dir.create(tmpdir, recursive = TRUE)
local_dir(tmpdir)
metadata <- make.metadata(linesConnection(
'Package: pkgname',
'Version: 1.3',
'Depends: ellipsis'))
orig <- make_mklines()
write.Makefile(orig, metadata)
expect_equal(readLines('Makefile'), c(
mkcvsid,
'',
'R_PKGNAME=\tpkgname',
'R_PKGVER=\t1.3',
'CATEGORIES=\tcategory',
'',
'MAINTAINER=\t', # FIXME
'COMMENT=\tNA', # FIXME
'LICENSE=\tNA', # FIXME
'',
'USE_LANGUAGES=\t# none',
'',
'.include "../../math/R/Makefile.extension"',
'.include "../../mk/bsd.pkg.mk"'))
})
test_that('element', {
mklines <- make_mklines(
'COMMENT=\tThe comment',
'EMPTY=')
expect_equal(element(mklines, 'COMMENT', 'order'), 1)
expect_equal(element(mklines, 'COMMENT', 'old_value'), 'The comment')
expect_equal(element(mklines, 'UNKNOWN', 'order'), '???') # FIXME: should be a number
expect_equal(element(mklines, 'EMPTY', 'old_value'), '')
})
# test_that('make.categories', {
# })
# test_that('make.maintainer', {
# })
test_that('make.comment', {
mklines <- make_mklines(
'COMMENT=\tOld comment')
mklines$new_value[[1]] <- 'New comment'
expect_equal(make.comment(mklines), 'Old comment\t# [R2pkg] updated to: New comment')
mklines$new_value[[1]] <- 'old Comment'
expect_equal(make.comment(mklines), 'Old comment')
})
# test_that('make.new_license', {
# })
# test_that('license.marked.todo', {
# })
# test_that('license.in.pkgsrc', {
# })
test_that('make.license, old and new known and equal', {
mklines <- make_mklines(
'LICENSE=\tgnu-gpl-v2')
mklines$new_value <- 'gnu-gpl-v2'
updated <- make.license(mklines)
expect_equal(updated$value, 'gnu-gpl-v2')
expect_equal(updated$todo, '')
})
test_that('make.license, old and new known and changed', {
mklines <- make_mklines(
'LICENSE=\tgnu-gpl-v2')
mklines$new_value <- 'gnu-gpl-v3'
updated <- make.license(mklines)
expect_equal(updated$value, 'gnu-gpl-v3\t# [R2pkg] previously: gnu-gpl-v2')
expect_equal(updated$todo, '')
})
test_that('make.license, old known, new unknown', {
mklines <- make_mklines(
'LICENSE=\tgnu-gpl-v2')
mklines$new_value <- 'unknown-license'
updated <- make.license(mklines)
expect_equal(updated$value, 'gnu-gpl-v2\t# [R2pkg] updated to: unknown-license')
expect_equal(updated$todo, '# TODO: ')
})
test_that('make.license, old unknown, new known', {
mklines <- make_mklines(
'LICENSE=\tunknown-license')
mklines$new_value <- 'gnu-gpl-v2'
updated <- make.license(mklines)
expect_equal(updated$value, 'gnu-gpl-v2\t# [R2pkg] previously: unknown-license')
expect_equal(updated$todo, '')
})
test_that('make.license, old unknown, new also unknown', {
mklines <- make_mklines(
'LICENSE=\tunknown-license')
mklines$new_value <- 'new-unknown'
updated <- make.license(mklines)
expect_equal(updated$value, 'new-unknown\t# [R2pkg] previously: unknown-license')
expect_equal(updated$todo, '# TODO: ')
})
test_that('find.order', {
mklines <- make_mklines(
'CATEGORIES=',
'HOMEPAGE=',
'USE_TOOLS+=',
'.include "other.mk"',
'# comment')
vars_order <- find.order(mklines, 'key_value', 'order')
include_order <- find.order(mklines, 'buildlink3.mk', 'order')
expect_equal(mklines[, 'key_value'], c(TRUE, TRUE, TRUE, FALSE, FALSE))
expect_equal(mklines[, 'buildlink3.mk'], c(FALSE, FALSE, FALSE, FALSE, FALSE))
expect_equal(vars_order, c(1))
expect_equal(include_order, NA_integer_)
})
test_that('mklines.update_with_metadata with CATEGORIES', {
local_dir(package_dir) # to get a realistic category
arg.maintainer_email <<- 'with-categories@example.org'
df <- make_mklines(
'CATEGORIES=\told categories',
'MAINTAINER=\told_maintainer@example.org',
'COMMENT=\told comment',
'R_PKGVER=\t1.0')
metadata = list(Title = 'Package comment', Version = '19.3', License = 'license')
updated <- mklines.update_with_metadata(df, metadata)
expect_printed(data.frame(varname = updated$key, new_value = updated$new_value),
' varname new_value ',
'1 CATEGORIES pkgtools ',
'2 MAINTAINER with-categories@example.org', # FIXME: Should not always be reset.
'3 COMMENT Package comment ',
'4 R_PKGVER 19.3 ')
})
# If the variable has been removed from the Makefile, it is not updated.
test_that('mklines.update_with_metadata without CATEGORIES', {
arg.maintainer_email <<- 'without-categories@example.org'
df <- make_mklines(
'MAINTAINER=',
'COMMENT=',
'R_PKGVER=')
metadata = list(Title = 'Package comment', Version = '19.3', License = 'license')
updated <- mklines.update_with_metadata(df, metadata)
expect_printed(data.frame(varname = updated$key, new_value = updated$new_value),
' varname new_value ',
'1 MAINTAINER without-categories@example.org',
'2 COMMENT Package comment ',
'3 R_PKGVER 19.3 ')
})
test_that('mklines.update_value', {
local_dir(package_dir)
mklines <- make_mklines(
'R_PKGVER=\t1.0',
'CATEGORIES=\told categories',
'MAINTAINER=\told_maintainer@example.org',
'COMMENT=\tOld comment',
'LICENSE=\told-license')
mklines$new_value <- mklines$old_value
updated <- mklines.update_value(mklines)
expect_equal(updated$value, c(
'1.0',
'pkgtools old categories',
'old_maintainer@example.org',
'Old comment',
'old-license\t# [R2pkg] previously: old-license')) # FIXME: no comment necessary
expect_equal(updated$todo, c(
'',
'',
'',
'',
'# TODO: '))
})
test_that('mklines.update_new_line', {
mklines <- make_mklines(
'VALUE=\tvalue',
'VALUE_WITH_COMMENT=\tvalue # comment',
'VALUE_NA=\tvalue',
'#COMMENTED=\tcommented value')
mklines <- mklines.update_value(mklines)
mklines$value[mklines$key == 'VALUE'] <- 'new value'
mklines$value[mklines$key == 'VALUE_WITH_COMMENT'] <- 'new value # new comment'
mklines$value[mklines$key == '#COMMENTED'] <- 'new commented'
updated <- mklines.update_new_line(mklines)
expect_equal(updated$new_line, c(
'VALUE=\tnew value',
'VALUE_WITH_COMMENT=\tnew value # new comment',
'VALUE_NA=\tvalue',
'#COMMENTED=\tnew commented'))
})
test_that('mklines.annotate_distname', {
mklines <- make_mklines(
'DISTNAME=\tpkg_1.0')
mklines$new_line <- mklines$line
annotated <- mklines.annotate_distname(mklines)
expect_equal(
annotated$new_line,
'DISTNAME=\tpkg_1.0\t# [R2pkg] replace this line with R_PKGNAME=pkg and R_PKGVER=1.0 as first stanza')
})
test_that('mklines.remove_lines_before_update', {
mklines <- make_mklines(
'MASTER_SITES=',
'HOMEPAGE=',
'BUILDLINK_API_DEPENDS.dependency+=',
'BUILDLINK_ABI_DEPENDS.dependency+=',
'COMMENT=')
mklines$new_line <- mklines$line
cleaned <- mklines.remove_lines_before_update(mklines)
expect_equal(cleaned$key, c(
'COMMENT'))
})
test_that('mklines.reassign_order, no change necessary', {
mklines <- make_mklines(
'R_PKGNAME= ellipsis',
'R_PKGVER= 0.1',
'CATEGORIES= pkgtools')
updated <- mklines.reassign_order(mklines)
expect_equal(updated, mklines)
})
test_that('mklines.reassign_order, reordered', {
mklines <- make_mklines(
'CATEGORIES= pkgtools',
'R_PKGNAME= ellipsis',
'R_PKGVER= 0.1')
expect_printed(data.frame(varname = mklines$key, order = mklines$order),
' varname order',
'1 CATEGORIES 1 ',
'2 R_PKGNAME 2 ',
'3 R_PKGVER 3 ')
updated <- mklines.reassign_order(mklines)
expect_printed(data.frame(varname = updated$key, order = updated$order),
' varname order',
'1 CATEGORIES 1.0 ',
'2 R_PKGNAME 0.8 ',
'3 R_PKGVER 0.9 ')
})
test_that('conflicts', {
expect_equal(conflicts('UnknownPackage'), list())
expect_equal(
conflicts('lattice'),
list('CONFLICTS=\tR>=3.6.1', ''))
expect_equal(
conflicts(c('lattice', 'methods', 'general', 'UnknownPackage')),
list('CONFLICTS=\tR>=3.6.1', ''))
})
# test_that('make.df.conflicts', {
# })
# test_that('make.df.depends', {
# })
# test_that('make.df.buildlink3', {
# })
# test_that('make.df.makefile', {
# })
test_that('update.Makefile', {
local_dir(tempdir())
system <- mocked_system()
local_mock(system = system$mock)
writeLines(
c(
mkcvsid,
'',
'.include "../../mk/bsd.pkg.mk"'),
'Makefile.orig')
orig <- read_mklines('Makefile.orig')
metadata <- make.metadata(linesConnection(
'Package: pkgname',
'Version: 1.0',
'Depends: dep1 dep2(>=2.0)'))
expect_printed(
as.data.frame(metadata),
' Package Version Title Description License Imports Depends ',
'1 pkgname 1.0 <NA> <NA> <NA> <NA> dep1 dep2(>=2.0)')
expect_printed(metadata$Imports, '[1] NA')
expect_printed(metadata$Depends, '[1] "dep1 dep2(>=2.0)"')
expect_printed(
paste2(metadata$Imports, metadata$Depends),
'[1] "dep1 dep2(>=2.0)"')
expect_printed(
make.imports(metadata$Imports, metadata$Depends),
'[1] "dep1" "dep2(>=2.0)"')
FALSE && expect_printed(# FIXME
make.depends(metadata$Imports, metadata$Depends),
'[1] "dep1" "dep2(>=2.0)"')
FALSE && update.Makefile(orig, metadata) # FIXME
FALSE && expect_equal(# FIXME
c(
mkcvsid,
'',
'asdf'),
readLines('Makefile'))
system$expect_commands(c())
})
# test_that('create.Makefile', {
# })
test_that('create.DESCR', {
local_dir(tempdir())
metadata <- make.metadata(linesConnection(
'Description: First line',
' .',
' Second paragraph',
' has 2 lines'))
create.DESCR(metadata)
lines <- readLines('DESCR', encoding = 'UTF-8')
expect_equal(lines, c(
'First line',
'',
'Second paragraph has 2 lines'
))
})
test_that('create.DESCR for a package without Description', {
local_dir(tempdir())
metadata <- make.metadata(linesConnection('Package: pkgname'))
create.DESCR(metadata)
lines <- readLines('DESCR', encoding = 'UTF-8')
expect_equal(lines, c('NA')) # FIXME
})
test_that('make.metadata', {
description <- paste(
c(
'Package: pkgname',
'Version: 1.0',
'Imports: dep1 other'
),
collapse = '\n')
metadata <- make.metadata(textConnection(description))
expect_equal(metadata$Package, 'pkgname')
expect_equal(metadata$Version, '1.0')
expect_equal(metadata$Imports, 'dep1 other')
expect_equal(metadata$Depends, NA_character_)
})
# test_that('main', {
# })