DATA LIST: Improve error messages and coding style.
[pspp] / tests / language / data-io / data-list.at
index b20fd35b7b43870e7e8999f5d1bf215fb1e88161..dbd5e1c8a636e215fd609d172babeafb9ce589f3 100644 (file)
@@ -401,34 +401,182 @@ Case Number,A
 
 AT_CLEANUP
 
-
 AT_SETUP([DATA LIST syntax errors])
 AT_DATA([insert.sps], [dnl
 INSERT FILE='data-list.sps' ERROR=IGNORE.
 ])
 AT_DATA([data-list.sps], [dnl
-DATA LIST LIST FILE='f.in' NOTABLE SKIP=-1 /a b c d.
-DATA LIST LIST FILE='f.in' NOTABLE RECORDS=-1 /a b c d.
-DATA LIST FIXED FILE='f.in' NOTABLE/a (F8.0, F9.0).
-DATA LIST FIXED FILE='f.in' NOTABLE/a b 1-3.
+DATA LIST FILE=**.
+DATA LIST ENCODING=**.
+DATA LIST RECORDS=1 RECORDS=2.
+DATA LIST RECORDS=0.
+DATA LIST SKIP=-1.
+DATA LIST END=**.
+INPUT PROGRAM.
+DATA LIST END=xyzzy END=xyzzy.
+END INPUT PROGRAM.
+INPUT PROGRAM.
+DATA LIST END=**.
+END INPUT PROGRAM.
+DATA LIST XYZZY.
+DATA LIST FREE LIST.
+DATA LIST LIST (**).
+DATA LIST **.
+DATA LIST ENCODING='xyzzy'/x.
+INPUT PROGRAM.
+DATA LIST LIST END=xyzzy/x.
+END INPUT PROGRAM.
+DATA LIST FIXED/0.
+DATA LIST FIXED/ **.
+DATA LIST FIXED/x 1.5.
+DATA LIST FIXED/x -1.
+DATA LIST FIXED/x 5-3.
+DATA LIST FIXED/x y 1-3.
+DATA LIST FIXED/x 1-5 (xyzzy).
+DATA LIST FIXED/x 1-5 (**).
+DATA LIST FIXED/x 1 (F,5).
+DATA LIST FIXED/x (2F8.0).
+DATA LIST FIXED/x **.
+DATA LIST FIXED/x 1 x 2.
+INPUT PROGRAM.
+DATA LIST FIXED/x 1.
+DATA LIST FIXED/x 1 (a).
+END INPUT PROGRAM.
+INPUT PROGRAM.
+DATA LIST FIXED/y 2 (a).
+DATA LIST FIXED/y 3-4 (a).
+END INPUT PROGRAM.
+DATA LIST FIXED RECORDS=1/2 x 1-2.
 ])
 
 AT_CHECK([pspp --testing-mode -O format=csv insert.sps], [1], [dnl
-"data-list.sps:1.41-1.42: error: DATA LIST: Syntax error expecting non-negative integer for SKIP.
-    1 | DATA LIST LIST FILE='f.in' NOTABLE SKIP=-1 /a b c d.
-      |                                         ^~"
+"data-list.sps:1.16-1.17: error: DATA LIST: Syntax error expecting a file name or handle name.
+    1 | DATA LIST FILE=**.
+      |                ^~"
+
+"data-list.sps:2.20-2.21: error: DATA LIST: Syntax error expecting string.
+    2 | DATA LIST ENCODING=**.
+      |                    ^~"
+
+"data-list.sps:3.21-3.27: error: DATA LIST: Subcommand RECORDS may only be specified once.
+    3 | DATA LIST RECORDS=1 RECORDS=2.
+      |                     ^~~~~~~"
+
+"data-list.sps:4.20: error: DATA LIST: Syntax error expecting one of the following: FILE, ENCODING, RECORDS, SKIP, END, NOTABLE, TABLE, FIXED, FREE, LIST.
+    4 | DATA LIST RECORDS=0.
+      |                    ^"
+
+"data-list.sps:5.16-5.17: error: DATA LIST: Syntax error expecting non-negative integer for SKIP.
+    5 | DATA LIST SKIP=-1.
+      |                ^~"
+
+"data-list.sps:6.11-6.13: error: DATA LIST: The END subcommand may only be used within INPUT PROGRAM.
+    6 | DATA LIST END=**.
+      |           ^~~"
+
+"data-list.sps:8.21-8.23: error: DATA LIST: Subcommand END may only be specified once.
+    8 | DATA LIST END=xyzzy END=xyzzy.
+      |                     ^~~"
+
+"data-list.sps:11.15-11.16: error: DATA LIST: Syntax error expecting identifier.
+   11 | DATA LIST END=**.
+      |               ^~"
+
+"data-list.sps:13.11-13.15: error: DATA LIST: Syntax error expecting one of the following: FILE, ENCODING, RECORDS, SKIP, END, NOTABLE, TABLE, FIXED, FREE, LIST.
+   13 | DATA LIST XYZZY.
+      |           ^~~~~"
+
+"data-list.sps:14.16-14.19: error: DATA LIST: Only one of FIXED, FREE, or LIST may be specified.
+   14 | DATA LIST FREE LIST.
+      |                ^~~~"
+
+"data-list.sps:15.17-15.18: error: DATA LIST: Syntax error expecting TAB or delimiter string.
+   15 | DATA LIST LIST (**).
+      |                 ^~"
+
+"data-list.sps:16.11-16.12: error: DATA LIST: Syntax error expecting one of the following: FILE, ENCODING, RECORDS, SKIP, END, NOTABLE, TABLE, FIXED, FREE, LIST.
+   16 | DATA LIST **.
+      |           ^~"
+
+"data-list.sps:17.11-17.26: warning: DATA LIST: Encoding should not be specified for inline data. It will be ignored.
+   17 | DATA LIST ENCODING='xyzzy'/x.
+      |           ^~~~~~~~~~~~~~~~"
+
+"data-list.sps:17.29: error: DATA LIST: SPSS-like or Fortran-like format specification expected after variable names.
+   17 | DATA LIST ENCODING='xyzzy'/x.
+      |                             ^"
+
+"data-list.sps:19.16-19.24: error: DATA LIST: The END subcommand may be used only with DATA LIST FIXED.
+   19 | DATA LIST LIST END=xyzzy/x.
+      |                ^~~~~~~~~"
+
+"data-list.sps:21.17: error: DATA LIST: Syntax error expecting positive integer.
+   21 | DATA LIST FIXED/0.
+      |                 ^"
+
+"data-list.sps:22.18-22.19: error: DATA LIST: Syntax error expecting variable name.
+   22 | DATA LIST FIXED/ **.
+      |                  ^~"
+
+"data-list.sps:23.19-23.21: error: DATA LIST: Syntax error expecting integer.
+   23 | DATA LIST FIXED/x 1.5.
+      |                   ^~~"
+
+"data-list.sps:24.19-24.20: error: DATA LIST: Column positions for fields must be positive.
+   24 | DATA LIST FIXED/x -1.
+      |                   ^~"
+
+"data-list.sps:25.19-25.21: error: DATA LIST: The ending column for a field must be greater than the starting column.
+   25 | DATA LIST FIXED/x 5-3.
+      |                   ^~~"
+
+"data-list.sps:26.21-26.23: error: DATA LIST: The 3 columns 1-3 can't be evenly divided into 2 fields.
+   26 | DATA LIST FIXED/x y 1-3.
+      |                     ^~~"
+
+"data-list.sps:27.24-27.28: error: DATA LIST: Unknown format type `xyzzy'.
+   27 | DATA LIST FIXED/x 1-5 (xyzzy).
+      |                        ^~~~~"
+
+"data-list.sps:28.24-28.25: error: DATA LIST: Syntax error expecting `)'.
+   28 | DATA LIST FIXED/x 1-5 (**).
+      |                        ^~"
+
+"data-list.sps:29.19-29.25: error: DATA LIST: Input format F1.5 specifies 5 decimal places, but the given width allows at most 1 decimals.
+   29 | DATA LIST FIXED/x 1 (F,5).
+      |                   ^~~~~~~"
+
+"data-list.sps:30.20-30.25: error: DATA LIST: Number of variables specified (1) differs from number of variable formats (2).
+   30 | DATA LIST FIXED/x (2F8.0).
+      |                    ^~~~~~"
+
+"data-list.sps:31.19-31.20: error: DATA LIST: SPSS-like or Fortran-like format specification expected after variable names.
+   31 | DATA LIST FIXED/x **.
+      |                   ^~"
+
+"data-list.sps:32.21: error: DATA LIST: x is a duplicate variable name.
+   32 | DATA LIST FIXED/x 1 x 2.
+      |                     ^"
+
+Table: Reading 1 record from INLINE.
+Variable,Record,Columns,Format
+x,1,1-1,F1.0
+
+"data-list.sps:35.17-35.23: error: DATA LIST: There is already a variable x of a different type.
+   35 | DATA LIST FIXED/x 1 (a).
+      |                 ^~~~~~~"
 
-"data-list.sps:2.44-2.45: error: DATA LIST: Syntax error expecting non-negative integer for RECORDS.
-    2 | DATA LIST LIST FILE='f.in' NOTABLE RECORDS=-1 /a b c d.
-      |                                            ^~"
+Table: Reading 1 record from INLINE.
+Variable,Record,Columns,Format
+y,1,2-2,A1
 
-"data-list.sps:3.40-3.50: error: DATA LIST: Number of variables specified (1) differs from number of variable formats (2).
-    3 | DATA LIST FIXED FILE='f.in' NOTABLE/a (F8.0, F9.0).
-      |                                        ^~~~~~~~~~~"
+"data-list.sps:39.17-39.25: error: DATA LIST: There is already a string variable y of a different width.
+   39 | DATA LIST FIXED/y 3-4 (a).
+      |                 ^~~~~~~~~"
 
-"data-list.sps:4.41-4.43: error: DATA LIST: The 3 columns 1-3 can't be evenly divided into 2 fields.
-    4 | DATA LIST FIXED FILE='f.in' NOTABLE/a b 1-3.
-      |                                         ^~~"
+"data-list.sps:41.26-41.29: error: DATA LIST: Cannot place variable x on record 2 when RECORDS=1 is specified.
+   41 | DATA LIST FIXED RECORDS=1/2 x 1-2.
+      |                          ^~~~"
 ])
 
 AT_CLEANUP