On 12/12/2020 4:41 p.m., Ben Bolker wrote:


On 12/12/20 4:08 PM, Spencer Graves wrote:
Hi, Ben et al.:


On 2020-12-12 13:43, Ben Bolker wrote:
    Apologies if I'm telling you something you already know:

    By default, fda::CRAN() uses the presence of environment variables
matched by the regexp "^_R_" as a heuristic to decide whether it's
being running on CRAN.

    testthat::skip_on_cran()  calls testthat::on_cran() to look for an
environment variable called NOT_CRAN equal to "true". The
devtools::check() machinery automatically sets this variable.


  > testthat::on_cran
Error: 'on_cran' is not an exported object from 'namespace:testthat'

       on_cran() is intended to be used via testthat::skip_on_cran()
(which is exported, unlike on_cran()).


        Besides, on my Mac, I get:


  > testthat:::on_cran()
[1] TRUE


        My Mac is NOT CRAN, and I don't want that function to return TRUE
on my computer unless I explicitly run "R CMD check --on-cran".

    The assumption of testthat is that it's going to be deployed via
devtools::check(), which automatically sets the environment variable
NOT_CRAN equal to 'true'. For testing on your machine, you could use

Sys.setenv(NOT_CRAN="true"); testthat:::on_cran()

or you could put

export NOT_CRAN=true

in the shell/in your testing pipeline.




    So: fda::CRAN() depends on breakable assumptions, defaults to FALSE
in an empty environment.  skip_on_cran() defaults to TRUE in an empty
environment (but defaults to FALSE in a devtools::check() environment).

        If future changes break fda::CRAN, I will have to deal with it then.


        I'd be happier if the CRAN maintainers would develop a procedure
to make it easier for package maintainers do two things:


              * Include tests in their package that run longer than the
time limit permitted on CRAN.


              * Give error messages that the package maintainer wants to
see but that should be suppressed on CRAN or when the user decides to
run "R CMD check --as-cran".

   I agree that this would be nice.

    A simple mechanism would be to set an official/sanctioned/stable
environment variable such as _R_ON_CRAN in all CRAN testing pipelines.

What's wrong with users setting NOT_CRAN on all non-CRAN testing pipelines?

Most people want the same tests in both places. Those who like writing lots of time consuming tests are the ones who shouldn't mind a small step to control them.

Duncan Murdoch

______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel

Reply via email to