On Thu, Sep 30 2021, Andrew Tropin wrote: > * tests/guix-home.sh: New file. > * Makefile.am (SH_TESTS): Add tests/guix-home.sh. > --- > > > Makefile.am | 1 + > tests/guix-home.sh | 99 ++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 100 insertions(+) > create mode 100644 tests/guix-home.sh > > diff --git a/Makefile.am b/Makefile.am > index b66789fa0b..5bf2567dc8 100644 > --- a/Makefile.am > +++ b/Makefile.am > @@ -546,6 +546,7 @@ SH_TESTS = \ > tests/guix-package-aliases.sh \ > tests/guix-package-net.sh \ > tests/guix-system.sh \ > + tests/guix-home.sh \ > tests/guix-archive.sh \ > tests/guix-authenticate.sh \ > tests/guix-environment.sh \ > diff --git a/tests/guix-home.sh b/tests/guix-home.sh > new file mode 100644 > index 0000000000..cb015c907f > --- /dev/null > +++ b/tests/guix-home.sh > @@ -0,0 +1,99 @@ > +# GNU Guix --- Functional package management for GNU > +# Copyright © 2021 Andrew Tropin > +# > +# This file is part of GNU Guix. > +# > +# GNU Guix is free software; you can redistribute it and/or modify it > +# under the terms of the GNU General Public License as published by > +# the Free Software Foundation; either version 3 of the License, or (at > +# your option) any later version. > +# > +# GNU Guix is distributed in the hope that it will be useful, but > +# WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with GNU Guix. If not, see . > + > +# > +# Test 'guix home' cli. > +# > + > +set -e > + > +guix home --version > + > +tmpfile="t-guix-home-$$" > +errorfile="t-guix-home-error-$$" > + > +# Note: This directory is chosen outside $builddir so that relative file name > +# canonicalization doesn't mess up with 'current-source-directory', used by > +# 'local-file' ('load' forces 'relative' for > +# %FILE-PORT-NAME-CANONICALIZATION.) > +tmpdir="${TMPDIR:-/tmp}/t-guix-home-$$" > +mkdir "$tmpdir" > + > +trap 'rm -f "$tmpfile" "$errorfile" "$tmpdir"/*; rmdir "$tmpdir"' EXIT > + > +# Reporting of syntax errors. > + > +cat > "$tmpfile"< +;; This is line 1, and the next one is line 2. > + (home-environment > + (packages)) > +;; The 'T' is at column 3. > +EOF > + > +if guix home build "$tmpfile" 2> "$errorfile" > +then > + # This must not succeed. > + exit 1 > +else > + grep "$tmpfile:3:4: error: (packages): invalid field specifier" "$errorfile" > +fi > + > + > +cat > "$tmpfile"< +;; This is line 1, and the next one is line 2. > + (home-environment > +;; This is line 3, and there is no closing paren! > +EOF > + > +if guix home build "$tmpfile" 2> "$errorfile" > +then > + # This must not succeed. > + exit 1 > +else > + # Guile 3.0.6 gets line/column numbers for 'read-error' wrong > + # (zero-indexed): . > + grep "$tmpfile:4:1: missing closing paren" "$errorfile" || \ > + grep "$tmpfile:3:0: missing closing paren" "$errorfile" > +fi > + > +# Reporting of duplicate system service declaration. > + > +cat > "$tmpfile" < +(use-modules (gnu)) > +(use-modules (gnu home-services shepherd)) > + > +(home-environment > + (services (list (service home-shepherd-service-type) > + (simple-service 'test-shepherd-extension > + home-shepherd-service-type '()) > + (service home-shepherd-service-type) > + (service home-shepherd-service-type)))) > +EOF > + > +if guix home build "$tmpfile" 2> "$errorfile" > +then > + # This must not succeed. > + exit 1 > +else > + grep "guix home: error: more than one target service of type 'home-shepherd'" "$errorfile" > +fi > + > +# Searching. > + > +guix home search mcron | grep "^name: home-mcron" > +guix home search job manager | grep "^name: home-mcron" > -- > 2.33.0 The tests themselves LGTM, but some additional things should probably be tested * The provided file doesn’t return a guix home build /tmp/test.scm guix home: error: '/tmp/test.scm' does not return a home environment * Maybe something like ‘Reporting unmet shepherd requirements’ in ‘guix-system.sh’ ‘guix home import’ should also be tested, but we will have to wait for the fixes[1] to get merged first. [1]: