X-Git-Url: https://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/b4d7689f9255b93b9ea02e01dc490f1416f77782..3159fcf14519f02c79ad84b441985982cb1efeb9:/tests/build-utils.scm diff --git a/tests/build-utils.scm b/tests/build-utils.scm index 1c9084514d..47a57a984b 100644 --- a/tests/build-utils.scm +++ b/tests/build-utils.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2015, 2016 Ludovic Courtès +;;; Copyright © 2012, 2015, 2016, 2019 Ludovic Courtès ;;; Copyright © 2019 Ricardo Wurmus ;;; ;;; This file is part of GNU Guix. @@ -26,6 +26,7 @@ #:use-module (gnu packages) #:use-module (gnu packages bootstrap) #:use-module (srfi srfi-34) + #:use-module (srfi srfi-35) #:use-module (srfi srfi-64) #:use-module (rnrs io ports) #:use-module (ice-9 popen)) @@ -108,20 +109,39 @@ ;; 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"))) + (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") + ;; 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)))))) + (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-assert "invoke/quiet, success" + (begin + (invoke/quiet "true") + #t)) + +(test-assert "invoke/quiet, failure" + (guard (c ((message-condition? c) + (string-contains (condition-message c) "This is an error."))) + (invoke/quiet "sh" "-c" "echo This is an error. ; false") + #f)) + +(test-assert "invoke/quiet, failure, message on stderr" + (guard (c ((message-condition? c) + (string-contains (condition-message c) + "This is another error."))) + (invoke/quiet "sh" "-c" "echo This is another error. >&2 ; false") + #f)) (let ((script-contents "\ #!/anything/cabbage-bash-1.2.3/bin/sh @@ -131,11 +151,12 @@ echo hello world")) (test-equal "wrap-script, simple case" (string-append (format #f "\ -#!GUILE --no-auto-compile +#!~a --no-auto-compile #!#; Guix wrapper #\\-~s #\\-~s " + (which "guile") '(begin (let ((current (getenv "GUIX_FOO"))) (setenv "GUIX_FOO" (if current @@ -155,11 +176,9 @@ echo hello world")) (lambda (port) (format port script-contents))) (chmod script-file-name #o777) - - (mock ((guix build utils) which (const "GUILE")) - (wrap-script script-file-name - `("GUIX_FOO" prefix ("/some/path" - "/some/other/path")))) + (wrap-script script-file-name + `("GUIX_FOO" prefix ("/some/path" + "/some/other/path"))) (let ((str (call-with-input-file script-file-name get-string-all))) (with-directory-excursion directory (delete-file "foo")) @@ -215,13 +234,11 @@ print('hello world')")) (lambda (port) (format port "This is not a script"))) (chmod script-file-name #o777) - (catch 'srfi-34 - (lambda () - (wrap-script script-file-name - #:guile "MYGUILE" - `("GUIX_FOO" prefix ("/some/path" - "/some/other/path")))) - (lambda (type obj) - (wrap-error? obj))))))) + (guard (c ((wrap-error? c) #t)) + (wrap-script script-file-name + #:guile "MYGUILE" + `("GUIX_FOO" prefix ("/some/path" + "/some/other/path"))) + #f))))) (test-end)