summary refs log tree commit diff
path: root/tests/guix-system.sh
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2020-01-16 15:00:18 +0100
committerLudovic Courtès <ludo@gnu.org>2020-01-16 18:30:57 +0100
commit47212fc763788660ff9051ccee1f6fa8a0db7bdd (patch)
tree909f449ea0d8100fc019a4ef2c78a16416bd5054 /tests/guix-system.sh
parent84c5da08dda4fa8fd0e0f1e6a8a115190005f84a (diff)
downloadguix-47212fc763788660ff9051ccee1f6fa8a0db7bdd.tar.gz
records: Improve reporting of "invalid field specifier" errors.
Previously users would just see:

  error: invalid field specifier

without source location or hints.

* guix/records.scm (expand): Add optional 'parent-form' parameter and
pass it to 'syntax-violation' when it is true.
(make-syntactic-constructor): Pass S as a third argument to
'report-invalid-field-specifier'.
* guix/ui.scm (report-load-error): For 'syntax-error', show SUBFORM or
FORM in the message.
* tests/records.scm ("define-record-type* & wrong field specifier"): Add
a 'subform' parameter and adjust test accordingly.
("define-record-type* & wrong field specifier, identifier"): New test.
* tests/guix-system.sh: Add test.
Diffstat (limited to 'tests/guix-system.sh')
-rw-r--r--tests/guix-system.sh22
1 files changed, 21 insertions, 1 deletions
diff --git a/tests/guix-system.sh b/tests/guix-system.sh
index 1b2c425725..271627c2a5 100644
--- a/tests/guix-system.sh
+++ b/tests/guix-system.sh
@@ -1,5 +1,5 @@
 # GNU Guix --- Functional package management for GNU
-# Copyright © 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+# Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 # Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 # Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
 #
@@ -130,6 +130,26 @@ else
     fi
 fi
 
+cat > "$tmpfile" <<EOF
+(use-modules (gnu))                                    ; 1
+
+(operating-system                                      ; 3
+  (file-systems (cons (file-system                     ; 4
+                        (device (file-system-label "root"))
+                        (mount-point "/")              ; 6
+                        (type "ext4"))))               ; 7 (!!)
+                      %base-file-systems)
+EOF
+
+if guix system build "$tmpfile" -n 2> "$errorfile"
+then false
+else
+    # Here '%base-file-systems' appears as if it were a field specified of the
+    # enclosing 'operating-system' form due to parenthesis mismatch.
+    grep "$tmpfile:3:[0-9]\+:.*%base-file-system.*invalid field specifier" \
+	 "$errorfile"
+fi
+
 OS_BASE='
   (host-name "antelope")
   (timezone "Europe/Paris")