diff --git a/guix/tests.scm b/guix/tests.scm index 749a4edd7abd496e31989a623e47c41b90a8b5bd..35ebf8464d664bdc3b68e5c10cc9c45321cd8057 100644 --- a/guix/tests.scm +++ b/guix/tests.scm @@ -39,6 +39,8 @@ (define-module (guix tests) canonical-file? network-reachable? shebang-too-long? + with-environment-variable + mock %test-substitute-urls test-assertm @@ -195,6 +197,19 @@ (define-syntax-rule (test-equalm name value exp) (run-with-store store exp #:guile-for-build (%guile-for-build))))) +(define-syntax-rule (with-environment-variable variable value body ...) + "Run BODY with VARIABLE set to VALUE." + (let ((orig (getenv variable))) + (dynamic-wind + (lambda () + (setenv variable value)) + (lambda () + body ...) + (lambda () + (if orig + (setenv variable orig) + (unsetenv variable)))))) + ;;; ;;; Narinfo files, as used by the substituter. diff --git a/tests/build-utils.scm b/tests/build-utils.scm index 7d49446f6669491cc8d258e14ffcc8c5e9aabcc6..03216f9a35d490abef24748fcc5f0c03f94e469e 100644 --- a/tests/build-utils.scm +++ b/tests/build-utils.scm @@ -107,19 +107,21 @@ (define-module (test-build-utils) ;; it can't know about the bootstrap bash in the store, since it's not ;; named "bash". Help it out a bit by providing a symlink it this ;; package's output. - (setenv "PATH" (dirname bash)) - (wrap-program foo `("GUIX_FOO" prefix ("hello"))) - (wrap-program foo `("GUIX_BAR" prefix ("world"))) - - ;; The bootstrap Bash is linked against an old libc and would abort with - ;; an assertion failure when trying to load incompatible locale data. - (unsetenv "LOCPATH") - - (let* ((pipe (open-input-pipe foo)) - (str (get-string-all pipe))) - (with-directory-excursion directory - (for-each delete-file '("foo" ".foo-real"))) - (and (zero? (close-pipe pipe)) - str)))))) + (with-environment-variable "PATH" (dirname bash) + (wrap-program foo `("GUIX_FOO" prefix ("hello"))) + (wrap-program foo `("GUIX_BAR" prefix ("world"))) + + ;; The bootstrap Bash is linked against an old libc and would abort + ;; with an assertion failure when trying to load incompatible locale + ;; data. + (unsetenv "LOCPATH") + + (let* ((pipe (open-input-pipe foo)) + (str (get-string-all pipe))) + (with-directory-excursion directory + (for-each delete-file '("foo" ".foo-real"))) + (and (zero? (close-pipe pipe)) + str))))))) + (test-end) diff --git a/tests/scripts.scm b/tests/scripts.scm index 390171095332cf8999b7757a02469519bdc50626..efee271197f311d9f6673f3d142efcbd26713b0c 100644 --- a/tests/scripts.scm +++ b/tests/scripts.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2015, 2019 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -25,19 +25,6 @@ (define-module (test-scripts) ;; Test the (guix scripts) module. -(define-syntax-rule (with-environment-variable variable value body ...) - "Run BODY with VARIABLE set to VALUE." - (let ((orig (getenv variable))) - (dynamic-wind - (lambda () - (setenv variable value)) - (lambda () - body ...) - (lambda () - (if orig - (setenv variable orig) - (unsetenv variable)))))) - (test-begin "scripts")