To get a feel for the various options for testing, I played around with all the options suggested.

First, I downloaded all the source code from github into pkg/ and unzipped, renaming the unzipped dir from codemetar-master/ to codemetar.


cmd line testing

Then in the terminal, I navigated to dir pkg/

build package:

Anna [master|✚ 2…190]

    17:27 $ R CMD build codemetar
    * checking for file ‘codemetar/DESCRIPTION’ ... OK
    * preparing ‘codemetar’:
    * checking DESCRIPTION meta-information ... OK
    * installing the package to build vignettes
    * creating vignettes ... OK
    * checking for LF line-endings in source and make files
    * checking for empty or unneeded directories
    * looking to see if a ‘data/datalist’ file should be added
    * building ‘codemetar_0.1.0.tar.gz’

All ok

check package

Anna [master|✚ 2…190]

    17:29 $ R CMD check codemetar_0.1.0.tar.gz
    * using log directory ‘/Users/Anna/Documents/workflows/rOpenSci/codemetar-review/pkg/codemetar.Rcheck’
    * using R version 3.4.1 (2017-06-30)
    * using platform: x86_64-apple-darwin15.6.0 (64-bit)
    * using session charset: UTF-8
    * checking for file ‘codemetar/DESCRIPTION’ ... OK
    * checking extension type ... Package
    * this is package ‘codemetar’ version ‘0.1.0’
    * package encoding: UTF-8
    * checking package namespace information ... OK
    * checking package dependencies ... OK
    * checking if this is a source package ... OK
    * checking if there is a namespace ... OK
    * checking for executable files ... OK
    * checking for hidden files and directories ... OK
    * checking for portable file names ... OK
    * checking for sufficient/correct file permissions ... OK
    * checking whether package ‘codemetar’ can be installed ... OK
    * checking installed package size ... OK
    * checking package directory ... OK
    * checking ‘build’ directory ... OK
    * checking DESCRIPTION meta-information ... OK
    * checking top-level files ... OK
    * checking for left-over files ... OK
    * checking index information ... OK
    * checking package subdirectories ... OK
    * checking R files for non-ASCII characters ... OK
    * checking R files for syntax errors ... OK
    * checking whether the package can be loaded ... OK
    * checking whether the package can be loaded with stated dependencies ... OK
    * checking whether the package can be unloaded cleanly ... OK
    * checking whether the namespace can be loaded with stated dependencies ... OK
    * checking whether the namespace can be unloaded cleanly ... OK
    * checking loading without being on the library search path ... OK
    * checking dependencies in R code ... OK
    * checking S3 generic/method consistency ... OK
    * checking replacement functions ... OK
    * checking foreign function calls ... OK
    * checking R code for possible problems ... OK
    * checking Rd files ... OK
    * checking Rd metadata ... OK
    * checking Rd cross-references ... OK
    * checking for missing documentation entries ... OK
    * checking for code/documentation mismatches ... OK
    * checking Rd \usage sections ... OK
    * checking Rd contents ... OK
    * checking for unstated dependencies in examples ... OK
    * checking R/sysdata.rda ... OK
    * checking installed files from ‘inst/doc’ ... OK
    * checking files in ‘vignettes’ ... OK
    * checking examples ... OK
    * checking for unstated dependencies in ‘tests’ ... OK
    * checking tests ...
      Running ‘testthat.R’
     OK
    * checking for unstated dependencies in vignettes ... OK
    * checking package vignettes in ‘inst/doc’ ... OK
    * checking running R code from vignettes ...
       ‘codemeta-intro.Rmd’ using ‘UTF-8’ ... OK
       ‘codemeta-parsing.Rmd’ using ‘UTF-8’ ... OK
       ‘translating.Rmd’ using ‘UTF-8’ ... OK
       ‘validation-in-json-ld.Rmd’ using ‘UTF-8’ ... OK
     NONE
    * checking re-building of vignette outputs ... OK
    * checking PDF version of manual ... OK
    * DONE
    
    Status: OK

testing in Rstudio (from within notebook)

ran devtools test and check

library(devtools)
devtools::check("../pkg/codemetar")
Updating codemetar documentation
Loading codemetar
Setting env vars ---------------------------------------------------------
CFLAGS  : -Wall -pedantic
CXXFLAGS: -Wall -pedantic
Building codemetar -------------------------------------------------------
'/Library/Frameworks/R.framework/Resources/bin/R' --no-site-file  \
  --no-environ --no-save --no-restore --quiet CMD build  \
  '/Users/Anna/Documents/workflows/rOpenSci/codemetar-review/pkg/codemetar'  \
  --no-resave-data --no-manual 
Setting env vars ---------------------------------------------------------
_R_CHECK_CRAN_INCOMING_ : FALSE
_R_CHECK_FORCE_SUGGESTS_: FALSE
Checking codemetar -------------------------------------------------------
'/Library/Frameworks/R.framework/Resources/bin/R' --no-site-file  \
  --no-environ --no-save --no-restore --quiet CMD check  \
  '/var/folders/8p/87cqdx2s34vfvcgh04l6z72w0000gr/T//RtmplZ2dJ9/codemetar_0.1.0.tar.gz'  \
  --as-cran --timings --no-manual 
R CMD check results
0 errors | 0 warnings | 0 notes
devtools::test("../pkg/codemetar")
Loading codemetar
Loading required package: testthat
Testing codemetar
cloned repo: ..
codemeta_description.R: 
validate: ..
crosswalk.R: ....
test frame: ....
guess_metadata: ........
test-many-packages: S
parse citation: .
parse_depends.R: ....
parse_people.R: ....
spdx_license.R: ..
utils.R: ..
write_codemeta: ...W.W.

Skipped -------------------------------------------------------------------
1. Test the creation of codemeta for many packages (@test-many-packages.R#11) - not also testing against 100 random installed packages today...,
    consider testing that locally instead

Warnings ------------------------------------------------------------------
1. We can parse author lists
                    that use Authors@R, Authors, or both (@test-write_codemeta.R#64) - the condition has length > 1 and only the first element will be used

2. We can parse author lists
                    that use Authors@R, Authors, or both (@test-write_codemeta.R#77) - the condition has length > 1 and only the first element will be used

DONE ======================================================================

ran goodpractice checks

library(goodpractice)
gp("../pkg/codemetar")
Preparing: covr
Preparing: cyclocomp
Skipping 1 packages ahead of CRAN: Rcpp
Preparing: description
Preparing: lintr
Preparing: namespace
Preparing: rcmdcheck
── GP codemetar ───────────────────────────────────────────────────────────

It is good practice to

  ✖ write unit tests for all functions, and all package code in
    general. 98% of code lines are covered by test cases.

    R/codemeta_description.R:24:NA
    R/codemeta_validate.R:23:NA
    R/guess_metadata.R:127:NA
    R/guess_metadata.R:144:NA
    R/parse_citation.R:77:NA
    ... and 2 more lines

─────────────────────────────────────────────────────────────────────────── 

Also performed checks using testthat on the installed package from github

library(testthat)
library(codemetar)
test_package("codemetar")
cloned repo: ..
codemeta_description.R: 
validate: ..
crosswalk.R: ....
test frame: ....
guess_metadata: ........
test-many-packages: S
parse citation: .
parse_depends.R: ....
parse_people.R: ....
spdx_license.R: ..
utils.R: ..
write_codemeta: ...W.W.

Skipped -------------------------------------------------------------------
1. Test the creation of codemeta for many packages (@test-many-packages.R#7) - On CRAN

Warnings ------------------------------------------------------------------
1. We can parse author lists
                    that use Authors@R, Authors, or both (@test-write_codemeta.R#64) - the condition has length > 1 and only the first element will be used

2. We can parse author lists
                    that use Authors@R, Authors, or both (@test-write_codemeta.R#77) - the condition has length > 1 and only the first element will be used

DONE ======================================================================

This is essentially what is launched when running devtools::test()

LS0tCnRpdGxlOiAicGFja2FnZSB0ZXN0aW5nIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgoqKioKClRvIGdldCBhIGZlZWwgZm9yIHRoZSB2YXJpb3VzIG9wdGlvbnMgZm9yIHRlc3RpbmcsIEkgcGxheWVkIGFyb3VuZCB3aXRoIGFsbCB0aGUgb3B0aW9ucyBzdWdnZXN0ZWQuCgpGaXJzdCwgSSBkb3dubG9hZGVkIGFsbCB0aGUgc291cmNlIGNvZGUgZnJvbSBnaXRodWIgaW50byAqKnBrZy8qKiBhbmQgdW56aXBwZWQsIHJlbmFtaW5nIHRoZSB1bnppcHBlZCBkaXIgZnJvbSAqKmNvZGVtZXRhci1tYXN0ZXIvKiogdG8gKipjb2RlbWV0YXIqKi4gCgoqKiogCgojIGNtZCBsaW5lIHRlc3RpbmcKClRoZW4gaW4gdGhlIHRlcm1pbmFsLCBJIG5hdmlnYXRlZCB0byBkaXIgKipwa2cvKioKCiMjIGJ1aWxkIHBhY2thZ2U6CgpBbm5hIFttYXN0ZXJ84pyaIDLigKYxOTBdIAoKICAgICAgICAxNzoyNyAkIFIgQ01EIGJ1aWxkIGNvZGVtZXRhcgogICAgICAgICogY2hlY2tpbmcgZm9yIGZpbGUg4oCYY29kZW1ldGFyL0RFU0NSSVBUSU9O4oCZIC4uLiBPSwogICAgICAgICogcHJlcGFyaW5nIOKAmGNvZGVtZXRhcuKAmToKICAgICAgICAqIGNoZWNraW5nIERFU0NSSVBUSU9OIG1ldGEtaW5mb3JtYXRpb24gLi4uIE9LCiAgICAgICAgKiBpbnN0YWxsaW5nIHRoZSBwYWNrYWdlIHRvIGJ1aWxkIHZpZ25ldHRlcwogICAgICAgICogY3JlYXRpbmcgdmlnbmV0dGVzIC4uLiBPSwogICAgICAgICogY2hlY2tpbmcgZm9yIExGIGxpbmUtZW5kaW5ncyBpbiBzb3VyY2UgYW5kIG1ha2UgZmlsZXMKICAgICAgICAqIGNoZWNraW5nIGZvciBlbXB0eSBvciB1bm5lZWRlZCBkaXJlY3RvcmllcwogICAgICAgICogbG9va2luZyB0byBzZWUgaWYgYSDigJhkYXRhL2RhdGFsaXN04oCZIGZpbGUgc2hvdWxkIGJlIGFkZGVkCiAgICAgICAgKiBidWlsZGluZyDigJhjb2RlbWV0YXJfMC4xLjAudGFyLmd64oCZCgpBbGwgb2sKCiMjIGNoZWNrIHBhY2thZ2UKCkFubmEgW21hc3RlcnzinJogMuKApjE5MF0gIAoKICAgICAgICAxNzoyOSAkIFIgQ01EIGNoZWNrIGNvZGVtZXRhcl8wLjEuMC50YXIuZ3oKICAgICAgICAqIHVzaW5nIGxvZyBkaXJlY3Rvcnkg4oCYL1VzZXJzL0FubmEvRG9jdW1lbnRzL3dvcmtmbG93cy9yT3BlblNjaS9jb2RlbWV0YXItcmV2aWV3L3BrZy9jb2RlbWV0YXIuUmNoZWNr4oCZCiAgICAgICAgKiB1c2luZyBSIHZlcnNpb24gMy40LjEgKDIwMTctMDYtMzApCiAgICAgICAgKiB1c2luZyBwbGF0Zm9ybTogeDg2XzY0LWFwcGxlLWRhcndpbjE1LjYuMCAoNjQtYml0KQogICAgICAgICogdXNpbmcgc2Vzc2lvbiBjaGFyc2V0OiBVVEYtOAogICAgICAgICogY2hlY2tpbmcgZm9yIGZpbGUg4oCYY29kZW1ldGFyL0RFU0NSSVBUSU9O4oCZIC4uLiBPSwogICAgICAgICogY2hlY2tpbmcgZXh0ZW5zaW9uIHR5cGUgLi4uIFBhY2thZ2UKICAgICAgICAqIHRoaXMgaXMgcGFja2FnZSDigJhjb2RlbWV0YXLigJkgdmVyc2lvbiDigJgwLjEuMOKAmQogICAgICAgICogcGFja2FnZSBlbmNvZGluZzogVVRGLTgKICAgICAgICAqIGNoZWNraW5nIHBhY2thZ2UgbmFtZXNwYWNlIGluZm9ybWF0aW9uIC4uLiBPSwogICAgICAgICogY2hlY2tpbmcgcGFja2FnZSBkZXBlbmRlbmNpZXMgLi4uIE9LCiAgICAgICAgKiBjaGVja2luZyBpZiB0aGlzIGlzIGEgc291cmNlIHBhY2thZ2UgLi4uIE9LCiAgICAgICAgKiBjaGVja2luZyBpZiB0aGVyZSBpcyBhIG5hbWVzcGFjZSAuLi4gT0sKICAgICAgICAqIGNoZWNraW5nIGZvciBleGVjdXRhYmxlIGZpbGVzIC4uLiBPSwogICAgICAgICogY2hlY2tpbmcgZm9yIGhpZGRlbiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgLi4uIE9LCiAgICAgICAgKiBjaGVja2luZyBmb3IgcG9ydGFibGUgZmlsZSBuYW1lcyAuLi4gT0sKICAgICAgICAqIGNoZWNraW5nIGZvciBzdWZmaWNpZW50L2NvcnJlY3QgZmlsZSBwZXJtaXNzaW9ucyAuLi4gT0sKICAgICAgICAqIGNoZWNraW5nIHdoZXRoZXIgcGFja2FnZSDigJhjb2RlbWV0YXLigJkgY2FuIGJlIGluc3RhbGxlZCAuLi4gT0sKICAgICAgICAqIGNoZWNraW5nIGluc3RhbGxlZCBwYWNrYWdlIHNpemUgLi4uIE9LCiAgICAgICAgKiBjaGVja2luZyBwYWNrYWdlIGRpcmVjdG9yeSAuLi4gT0sKICAgICAgICAqIGNoZWNraW5nIOKAmGJ1aWxk4oCZIGRpcmVjdG9yeSAuLi4gT0sKICAgICAgICAqIGNoZWNraW5nIERFU0NSSVBUSU9OIG1ldGEtaW5mb3JtYXRpb24gLi4uIE9LCiAgICAgICAgKiBjaGVja2luZyB0b3AtbGV2ZWwgZmlsZXMgLi4uIE9LCiAgICAgICAgKiBjaGVja2luZyBmb3IgbGVmdC1vdmVyIGZpbGVzIC4uLiBPSwogICAgICAgICogY2hlY2tpbmcgaW5kZXggaW5mb3JtYXRpb24gLi4uIE9LCiAgICAgICAgKiBjaGVja2luZyBwYWNrYWdlIHN1YmRpcmVjdG9yaWVzIC4uLiBPSwogICAgICAgICogY2hlY2tpbmcgUiBmaWxlcyBmb3Igbm9uLUFTQ0lJIGNoYXJhY3RlcnMgLi4uIE9LCiAgICAgICAgKiBjaGVja2luZyBSIGZpbGVzIGZvciBzeW50YXggZXJyb3JzIC4uLiBPSwogICAgICAgICogY2hlY2tpbmcgd2hldGhlciB0aGUgcGFja2FnZSBjYW4gYmUgbG9hZGVkIC4uLiBPSwogICAgICAgICogY2hlY2tpbmcgd2hldGhlciB0aGUgcGFja2FnZSBjYW4gYmUgbG9hZGVkIHdpdGggc3RhdGVkIGRlcGVuZGVuY2llcyAuLi4gT0sKICAgICAgICAqIGNoZWNraW5nIHdoZXRoZXIgdGhlIHBhY2thZ2UgY2FuIGJlIHVubG9hZGVkIGNsZWFubHkgLi4uIE9LCiAgICAgICAgKiBjaGVja2luZyB3aGV0aGVyIHRoZSBuYW1lc3BhY2UgY2FuIGJlIGxvYWRlZCB3aXRoIHN0YXRlZCBkZXBlbmRlbmNpZXMgLi4uIE9LCiAgICAgICAgKiBjaGVja2luZyB3aGV0aGVyIHRoZSBuYW1lc3BhY2UgY2FuIGJlIHVubG9hZGVkIGNsZWFubHkgLi4uIE9LCiAgICAgICAgKiBjaGVja2luZyBsb2FkaW5nIHdpdGhvdXQgYmVpbmcgb24gdGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggLi4uIE9LCiAgICAgICAgKiBjaGVja2luZyBkZXBlbmRlbmNpZXMgaW4gUiBjb2RlIC4uLiBPSwogICAgICAgICogY2hlY2tpbmcgUzMgZ2VuZXJpYy9tZXRob2QgY29uc2lzdGVuY3kgLi4uIE9LCiAgICAgICAgKiBjaGVja2luZyByZXBsYWNlbWVudCBmdW5jdGlvbnMgLi4uIE9LCiAgICAgICAgKiBjaGVja2luZyBmb3JlaWduIGZ1bmN0aW9uIGNhbGxzIC4uLiBPSwogICAgICAgICogY2hlY2tpbmcgUiBjb2RlIGZvciBwb3NzaWJsZSBwcm9ibGVtcyAuLi4gT0sKICAgICAgICAqIGNoZWNraW5nIFJkIGZpbGVzIC4uLiBPSwogICAgICAgICogY2hlY2tpbmcgUmQgbWV0YWRhdGEgLi4uIE9LCiAgICAgICAgKiBjaGVja2luZyBSZCBjcm9zcy1yZWZlcmVuY2VzIC4uLiBPSwogICAgICAgICogY2hlY2tpbmcgZm9yIG1pc3NpbmcgZG9jdW1lbnRhdGlvbiBlbnRyaWVzIC4uLiBPSwogICAgICAgICogY2hlY2tpbmcgZm9yIGNvZGUvZG9jdW1lbnRhdGlvbiBtaXNtYXRjaGVzIC4uLiBPSwogICAgICAgICogY2hlY2tpbmcgUmQgXHVzYWdlIHNlY3Rpb25zIC4uLiBPSwogICAgICAgICogY2hlY2tpbmcgUmQgY29udGVudHMgLi4uIE9LCiAgICAgICAgKiBjaGVja2luZyBmb3IgdW5zdGF0ZWQgZGVwZW5kZW5jaWVzIGluIGV4YW1wbGVzIC4uLiBPSwogICAgICAgICogY2hlY2tpbmcgUi9zeXNkYXRhLnJkYSAuLi4gT0sKICAgICAgICAqIGNoZWNraW5nIGluc3RhbGxlZCBmaWxlcyBmcm9tIOKAmGluc3QvZG9j4oCZIC4uLiBPSwogICAgICAgICogY2hlY2tpbmcgZmlsZXMgaW4g4oCYdmlnbmV0dGVz4oCZIC4uLiBPSwogICAgICAgICogY2hlY2tpbmcgZXhhbXBsZXMgLi4uIE9LCiAgICAgICAgKiBjaGVja2luZyBmb3IgdW5zdGF0ZWQgZGVwZW5kZW5jaWVzIGluIOKAmHRlc3Rz4oCZIC4uLiBPSwogICAgICAgICogY2hlY2tpbmcgdGVzdHMgLi4uCiAgICAgICAgICBSdW5uaW5nIOKAmHRlc3R0aGF0LlLigJkKICAgICAgICAgT0sKICAgICAgICAqIGNoZWNraW5nIGZvciB1bnN0YXRlZCBkZXBlbmRlbmNpZXMgaW4gdmlnbmV0dGVzIC4uLiBPSwogICAgICAgICogY2hlY2tpbmcgcGFja2FnZSB2aWduZXR0ZXMgaW4g4oCYaW5zdC9kb2PigJkgLi4uIE9LCiAgICAgICAgKiBjaGVja2luZyBydW5uaW5nIFIgY29kZSBmcm9tIHZpZ25ldHRlcyAuLi4KICAgICAgICAgICDigJhjb2RlbWV0YS1pbnRyby5SbWTigJkgdXNpbmcg4oCYVVRGLTjigJkgLi4uIE9LCiAgICAgICAgICAg4oCYY29kZW1ldGEtcGFyc2luZy5SbWTigJkgdXNpbmcg4oCYVVRGLTjigJkgLi4uIE9LCiAgICAgICAgICAg4oCYdHJhbnNsYXRpbmcuUm1k4oCZIHVzaW5nIOKAmFVURi044oCZIC4uLiBPSwogICAgICAgICAgIOKAmHZhbGlkYXRpb24taW4tanNvbi1sZC5SbWTigJkgdXNpbmcg4oCYVVRGLTjigJkgLi4uIE9LCiAgICAgICAgIE5PTkUKICAgICAgICAqIGNoZWNraW5nIHJlLWJ1aWxkaW5nIG9mIHZpZ25ldHRlIG91dHB1dHMgLi4uIE9LCiAgICAgICAgKiBjaGVja2luZyBQREYgdmVyc2lvbiBvZiBtYW51YWwgLi4uIE9LCiAgICAgICAgKiBET05FCiAgICAgICAgCiAgICAgICAgU3RhdHVzOiBPSwoKCioqKiAKIyB0ZXN0aW5nIGluIFJzdHVkaW8gKGZyb20gd2l0aGluIG5vdGVib29rKQoKIyMjIHJhbiBkZXZ0b29scyBgdGVzdGAgYW5kIGBjaGVja2AKYGBge3J9CmxpYnJhcnkoZGV2dG9vbHMpCmRldnRvb2xzOjpjaGVjaygiLi4vcGtnL2NvZGVtZXRhciIpCmRldnRvb2xzOjp0ZXN0KCIuLi9wa2cvY29kZW1ldGFyIikKYGBgCgoKIyMjIHJhbiBnb29kcHJhY3RpY2UgY2hlY2tzCgpgYGB7cn0KbGlicmFyeShnb29kcHJhY3RpY2UpCmdwKCIuLi9wa2cvY29kZW1ldGFyIikKYGBgCgoKIyMjIEFsc28gcGVyZm9ybWVkIGNoZWNrcyB1c2luZyBgdGVzdHRoYXRgIG9uIHRoZSBpbnN0YWxsZWQgcGFja2FnZSBmcm9tIGdpdGh1YgoKCmBgYHtyfQpsaWJyYXJ5KHRlc3R0aGF0KQpsaWJyYXJ5KGNvZGVtZXRhcikKdGVzdF9wYWNrYWdlKCJjb2RlbWV0YXIiKQpgYGAKClRoaXMgaXMgZXNzZW50aWFsbHkgd2hhdCBpcyBsYXVuY2hlZCB3aGVuIHJ1bm5pbmcgKipgZGV2dG9vbHM6OnRlc3QoKWAqKgo=