Remove unneeded #includes.
[pspp] / tests / language / data-io / save-translate.at
1 dnl PSPP - a program for statistical analysis.
2 dnl Copyright (C) 2017 Free Software Foundation, Inc.
3 dnl
4 dnl This program is free software: you can redistribute it and/or modify
5 dnl it under the terms of the GNU General Public License as published by
6 dnl the Free Software Foundation, either version 3 of the License, or
7 dnl (at your option) any later version.
8 dnl
9 dnl This program is distributed in the hope that it will be useful,
10 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
11 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 dnl GNU General Public License for more details.
13 dnl
14 dnl You should have received a copy of the GNU General Public License
15 dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 dnl
17 AT_BANNER([SAVE TRANSLATE /TYPE=CSV])
18
19 m4_define([PREPARE_SAVE_TRANSLATE_CSV], [dnl
20 AT_KEYWORDS([SAVE TRANSLATE])
21 AT_DATA([data.txt], [dnl
22 0 '1 9:30:05' 1/2/2003 "25/8/1995 15:30:00" "'a,b,c'",0
23 , '-0 5:17' 10/31/2010 "9/4/2008 9:29:00" " xxx ",1
24 1.625,'0 12:00',,,xyzzy,1
25 ])
26 AT_DATA([save-translate.pspp], [dnl
27 SET DECIMAL=DOT.
28 DATA LIST LIST NOTABLE FILE="data.txt"
29     /number(F8.3) time(DTIME10) date(ADATE10) datetime(DATETIME20) string(A8)
30      filter(F1.0).
31 MISSING VALUES number(0) time('0 12:00') string('xyzzy').
32 FILTER BY filter.
33 SAVE TRANSLATE /OUTFILE="data.csv" /TYPE=m4_if([$2], [], [CSV], [$2])
34     $1.
35 ])
36 AT_CHECK([pspp -O format=csv save-translate.pspp], [0])
37 ])
38
39 AT_SETUP([CSV output -- defaults])
40 PREPARE_SAVE_TRANSLATE_CSV
41 AT_CHECK([cat data.csv], [0], [dnl
42 0,33:30:05,01/02/2003,08/25/1995 15:30:00,"'a,b,c'",0
43  ,-05:17:00,10/31/2010,04/09/2008 09:29:00, xxx,1
44 1.625,12:00:00, , ,xyzzy,1
45 ])
46 AT_CLEANUP
47
48 AT_SETUP([CSV output -- recode missing, delete unselected])
49 PREPARE_SAVE_TRANSLATE_CSV([/MISSING=RECODE /UNSELECTED=DELETE])
50 AT_CHECK([cat data.csv], [0], [dnl
51  ,-05:17:00,10/31/2010,04/09/2008 09:29:00, xxx,1
52 1.625, , , ,,1
53 ])
54 AT_CLEANUP
55
56 AT_SETUP([CSV output -- var names, formats])
57 PREPARE_SAVE_TRANSLATE_CSV(
58   [/FIELDNAMES /TEXTOPTIONS FORMAT=VARIABLE /UNSELECTED=RETAIN])
59 AT_CHECK([cat data.csv], [0], [dnl
60 number,time,date,datetime,string,filter
61 .000,1 09:30:05,01/02/2003,25-AUG-1995 15:30:00,"'a,b,c'",0
62  ,-0 05:17,10/31/2010,09-APR-2008 09:29:00, xxx,1
63 1.625,0 12:00:00, , ,xyzzy,1
64 ])
65 AT_CLEANUP
66
67 AT_SETUP([CSV output -- comma as decimal point])
68 PREPARE_SAVE_TRANSLATE_CSV([/FIELDNAMES /TEXTOPTIONS DECIMAL=COMMA])
69 AT_CHECK([cat data.csv], [0], [dnl
70 number;time;date;datetime;string;filter
71 0;33:30:05;01/02/2003;08/25/1995 15:30:00;'a,b,c';0
72  ;-05:17:00;10/31/2010;04/09/2008 09:29:00; xxx;1
73 1,625;12:00:00; ; ;xyzzy;1
74 ])
75 AT_CLEANUP
76
77 AT_SETUP([CSV output -- custom delimiter, qualifier])
78 PREPARE_SAVE_TRANSLATE_CSV(
79   [/FIELDNAMES /TEXTOPTIONS DELIMITER=':' QUALIFIER="'"])
80 AT_CHECK([cat data.csv], [0], [dnl
81 number:time:date:datetime:string:filter
82 0:'33:30:05':01/02/2003:'08/25/1995 15:30:00':'''a,b,c''':0
83  :'-05:17:00':10/31/2010:'04/09/2008 09:29:00': xxx:1
84 1.625:'12:00:00': : :xyzzy:1
85 ])
86 AT_CLEANUP
87
88 AT_SETUP([CSV output -- KEEP, RENAME quoted])
89 PREPARE_SAVE_TRANSLATE_CSV(
90   [/FIELDNAMES /KEEP=time string /RENAME string='long name with spaces' /UNSELECTED=DELETE])
91 AT_CHECK([cat data.csv], [0], [dnl
92 time,long name with spaces
93 -05:17:00, xxx
94 12:00:00,xyzzy
95 ])
96 AT_CLEANUP
97
98
99 AT_SETUP([CSV output -- KEEP, RENAME multi quoted])
100 PREPARE_SAVE_TRANSLATE_CSV(
101   [/FIELDNAMES
102   /RENAME =
103         number = "this one"
104         time = "that one"
105         date = "which one?"
106         datetime = "another variable replacement"
107         string="long name with spaces"
108   /UNSELECTED=DELETE])
109 AT_CHECK([cat data.csv], [0], [dnl
110 this one,that one,which one?,another variable replacement,long name with spaces,filter
111  ,-05:17:00,10/31/2010,04/09/2008 09:29:00, xxx,1
112 1.625,12:00:00, , ,xyzzy,1
113 ])
114 AT_CLEANUP
115
116
117 AT_SETUP([CSV output -- KEEP, RENAME bad name ])
118 AT_KEYWORDS([SAVE TRANSLATE])
119 AT_DATA([bad.sps], [
120 data list notable list /Var1 Var2 Var3 Var4 Var5 *.
121 begin data
122 1 2 3 4 5
123 end data.
124
125 SAVE TRANSLATE
126 /OUTFILE="foo.csv"
127   /TYPE=CSV
128   /MAP
129   /REPLACE
130   /FIELDNAMES
131   /Unselected=DELETE
132    /RENAME =
133         Var4 = Var5
134         (Var1 Var2 = one Var3 )
135         (Var3 = "The second")
136   /CELLS=VALUES
137 .
138 ])
139
140 AT_CHECK([pspp -O format=csv bad.sps], [1], [dnl
141 "bad.sps:15.9-17.29: error: SAVE TRANSLATE: Requested renaming duplicates variable name Var5.
142    15 |         Var4 = Var5
143       |         ^~~~~~~~~~~
144    16 |         (Var1 Var2 = one Var3 )
145       | -------------------------------
146    17 |         (Var3 = ""The second"")
147       | -----------------------------"
148 ])
149
150
151 AT_CLEANUP
152
153
154
155 AT_BANNER([SAVE TRANSLATE /TYPE=TAB])
156
157 AT_SETUP([TAB output])
158 PREPARE_SAVE_TRANSLATE_CSV([/FIELDNAMES], [TAB])
159 AT_CHECK([cat data.csv], [0], [dnl
160 number  time    date    datetime        string  filter
161 0       33:30:05        01/02/2003      08/25/1995 15:30:00     'a,b,c' 0
162         -05:17:00       10/31/2010      04/09/2008 09:29:00      xxx    1
163 1.625   12:00:00                        xyzzy   1
164 ])
165 AT_CLEANUP
166
167 AT_SETUP([SAVE TRANSLATE syntax errors])
168 : > xyzzy.csv
169 AT_DATA([save-translate.sps], [dnl
170 DATA LIST LIST NOTABLE /v1 to v10.
171 SAVE TRANSLATE **.
172 SAVE TRANSLATE/OUTFILE=**.
173 SAVE TRANSLATE/OUTFILE='xyzzy.txt'/OUTFILE='xyzzy.txt'.
174 SAVE TRANSLATE/TYPE=CSV/TYPE=**.
175 SAVE TRANSLATE/TYPE=**.
176 SAVE TRANSLATE/MISSING=**.
177 SAVE TRANSLATE/CELLS=**.
178 SAVE TRANSLATE/TEXTOPTIONS DELIMITER=**.
179 SAVE TRANSLATE/TEXTOPTIONS DELIMITER='ab'.
180 SAVE TRANSLATE/TEXTOPTIONS QUALIFIER=**.
181 SAVE TRANSLATE/TEXTOPTIONS QUALIFIER='ab'.
182 SAVE TRANSLATE/TEXTOPTIONS DECIMAL=**.
183 SAVE TRANSLATE/UNSELECTED=**.
184 SAVE TRANSLATE/ **.
185 SAVE TRANSLATE/OUTFILE='xyzzy.csv'.
186 SAVE TRANSLATE/TYPE=CSV.
187 SAVE TRANSLATE/OUTFILE='xyzzy.csv'/TYPE=CSV.
188 SAVE TRANSLATE/RENAME **.
189 SAVE TRANSLATE/RENAME v1**.
190 SAVE TRANSLATE/RENAME(v1**).
191 SAVE TRANSLATE/RENAME v1=.
192 SAVE TRANSLATE/RENAME v1=**.
193 SAVE TRANSLATE/RENAME v1 to v5=v6.
194 SAVE TRANSLATE/RENAME (v1=v2 v3).
195 SAVE TRANSLATE/RENAME (v1 v2=v3).
196 SAVE TRANSLATE/RENAME (v1=v3**.
197 SAVE TRANSLATE/RENAME v1=v5.
198 SAVE TRANSLATE/RENAME v1 v5=v5 v1.
199 SAVE TRANSLATE/RENAME(v1 v5=v5 v1).
200 SAVE TRANSLATE/RENAME(v1 to v10=v01 to v10).
201 SAVE TRANSLATE/RENAME=v1=v1.
202 SAVE TRANSLATE/DROP=ALL.
203 SAVE TRANSLATE/DROP=**.
204 SAVE TRANSLATE/KEEP=**.
205 ])
206 AT_CHECK([pspp -O format=csv save-translate.sps], [1], [dnl
207 "save-translate.sps:2.16-2.17: error: SAVE TRANSLATE: Syntax error expecting `/'.
208     2 | SAVE TRANSLATE **.
209       |                ^~"
210
211 "save-translate.sps:3.24-3.25: error: SAVE TRANSLATE: Syntax error expecting a file name or handle name.
212     3 | SAVE TRANSLATE/OUTFILE=**.
213       |                        ^~"
214
215 "save-translate.sps:4.36-4.42: error: SAVE TRANSLATE: Subcommand OUTFILE may only be specified once.
216     4 | SAVE TRANSLATE/OUTFILE='xyzzy.txt'/OUTFILE='xyzzy.txt'.
217       |                                    ^~~~~~~"
218
219 "save-translate.sps:5.25-5.28: error: SAVE TRANSLATE: Subcommand TYPE may only be specified once.
220     5 | SAVE TRANSLATE/TYPE=CSV/TYPE=**.
221       |                         ^~~~"
222
223 "save-translate.sps:6.21-6.22: error: SAVE TRANSLATE: Syntax error expecting CSV or TAB.
224     6 | SAVE TRANSLATE/TYPE=**.
225       |                     ^~"
226
227 "save-translate.sps:7.24-7.25: error: SAVE TRANSLATE: Syntax error expecting IGNORE or RECODE.
228     7 | SAVE TRANSLATE/MISSING=**.
229       |                        ^~"
230
231 "save-translate.sps:8.22-8.23: error: SAVE TRANSLATE: Syntax error expecting VALUES or LABELS.
232     8 | SAVE TRANSLATE/CELLS=**.
233       |                      ^~"
234
235 "save-translate.sps:9.38-9.39: error: SAVE TRANSLATE: Syntax error expecting string.
236     9 | SAVE TRANSLATE/TEXTOPTIONS DELIMITER=**.
237       |                                      ^~"
238
239 "save-translate.sps:10.38-10.41: error: SAVE TRANSLATE: The DELIMITER string must contain exactly one character.
240    10 | SAVE TRANSLATE/TEXTOPTIONS DELIMITER='ab'.
241       |                                      ^~~~"
242
243 "save-translate.sps:11.38-11.39: error: SAVE TRANSLATE: Syntax error expecting string.
244    11 | SAVE TRANSLATE/TEXTOPTIONS QUALIFIER=**.
245       |                                      ^~"
246
247 "save-translate.sps:12.38-12.41: error: SAVE TRANSLATE: The QUALIFIER string must contain exactly one character.
248    12 | SAVE TRANSLATE/TEXTOPTIONS QUALIFIER='ab'.
249       |                                      ^~~~"
250
251 "save-translate.sps:13.36-13.37: error: SAVE TRANSLATE: Syntax error expecting DOT or COMMA.
252    13 | SAVE TRANSLATE/TEXTOPTIONS DECIMAL=**.
253       |                                    ^~"
254
255 "save-translate.sps:14.27-14.28: error: SAVE TRANSLATE: Syntax error expecting RETAIN or DELETE.
256    14 | SAVE TRANSLATE/UNSELECTED=**.
257       |                           ^~"
258
259 "save-translate.sps:15.17-15.18: error: SAVE TRANSLATE: Syntax error expecting MAP, DROP, KEEP, or RENAME.
260    15 | SAVE TRANSLATE/ **.
261       |                 ^~"
262
263 "save-translate.sps:16.1-16.35: error: SAVE TRANSLATE: Required subcommand TYPE was not specified.
264    16 | SAVE TRANSLATE/OUTFILE='xyzzy.csv'.
265       | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
266
267 "save-translate.sps:17.1-17.24: error: SAVE TRANSLATE: Required subcommand OUTFILE was not specified.
268    17 | SAVE TRANSLATE/TYPE=CSV.
269       | ^~~~~~~~~~~~~~~~~~~~~~~~"
270
271 "save-translate.sps:18.16-18.34: error: SAVE TRANSLATE: Output file `xyzzy.csv' exists but REPLACE was not specified.
272    18 | SAVE TRANSLATE/OUTFILE='xyzzy.csv'/TYPE=CSV.
273       |                ^~~~~~~~~~~~~~~~~~~"
274
275 "save-translate.sps:19.23-19.24: error: SAVE TRANSLATE: Syntax error expecting variable name.
276    19 | SAVE TRANSLATE/RENAME **.
277       |                       ^~"
278
279 "save-translate.sps:20.25-20.26: error: SAVE TRANSLATE: Syntax error expecting `='.
280    20 | SAVE TRANSLATE/RENAME v1**.
281       |                         ^~"
282
283 "save-translate.sps:21.25-21.26: error: SAVE TRANSLATE: Syntax error expecting `='.
284    21 | SAVE TRANSLATE/RENAME(v1**).
285       |                         ^~"
286
287 "save-translate.sps:22.26: error: SAVE TRANSLATE: Syntax error expecting variable name.
288    22 | SAVE TRANSLATE/RENAME v1=.
289       |                          ^"
290
291 "save-translate.sps:23.26-23.27: error: SAVE TRANSLATE: Syntax error expecting variable name.
292    23 | SAVE TRANSLATE/RENAME v1=**.
293       |                          ^~"
294
295 save-translate.sps:24: error: SAVE TRANSLATE: Old and new variable counts do not match.
296
297 "save-translate.sps:24.23-24.30: note: SAVE TRANSLATE: There are 5 old variables.
298    24 | SAVE TRANSLATE/RENAME v1 to v5=v6.
299       |                       ^~~~~~~~"
300
301 "save-translate.sps:24.32-24.33: note: SAVE TRANSLATE: There is 1 new variable name.
302    24 | SAVE TRANSLATE/RENAME v1 to v5=v6.
303       |                                ^~"
304
305 save-translate.sps:25: error: SAVE TRANSLATE: Old and new variable counts do not match.
306
307 "save-translate.sps:25.24-25.25: note: SAVE TRANSLATE: There is 1 old variable.
308    25 | SAVE TRANSLATE/RENAME (v1=v2 v3).
309       |                        ^~"
310
311 "save-translate.sps:25.27-25.31: note: SAVE TRANSLATE: There are 2 new variable names.
312    25 | SAVE TRANSLATE/RENAME (v1=v2 v3).
313       |                           ^~~~~"
314
315 save-translate.sps:26: error: SAVE TRANSLATE: Old and new variable counts do not match.
316
317 "save-translate.sps:26.24-26.28: note: SAVE TRANSLATE: There are 2 old variables.
318    26 | SAVE TRANSLATE/RENAME (v1 v2=v3).
319       |                        ^~~~~"
320
321 "save-translate.sps:26.30-26.31: note: SAVE TRANSLATE: There is 1 new variable name.
322    26 | SAVE TRANSLATE/RENAME (v1 v2=v3).
323       |                              ^~"
324
325 "save-translate.sps:27.29-27.30: error: SAVE TRANSLATE: Syntax error expecting `)'.
326    27 | SAVE TRANSLATE/RENAME (v1=v3**.
327       |                             ^~"
328
329 "save-translate.sps:28.23-28.27: error: SAVE TRANSLATE: Requested renaming duplicates variable name v5.
330    28 | SAVE TRANSLATE/RENAME v1=v5.
331       |                       ^~~~~"
332
333 "save-translate.sps:29.26-29.27: error: SAVE TRANSLATE: Syntax error expecting `='.
334    29 | SAVE TRANSLATE/RENAME v1 v5=v5 v1.
335       |                          ^~"
336
337 "save-translate.sps:30.1-30.35: error: SAVE TRANSLATE: Required subcommand TYPE was not specified.
338    30 | SAVE TRANSLATE/RENAME(v1 v5=v5 v1).
339       | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
340
341 "save-translate.sps:31.1-31.44: error: SAVE TRANSLATE: Required subcommand TYPE was not specified.
342    31 | SAVE TRANSLATE/RENAME(v1 to v10=v01 to v10).
343       | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
344
345 "save-translate.sps:32.1-32.28: error: SAVE TRANSLATE: Required subcommand TYPE was not specified.
346    32 | SAVE TRANSLATE/RENAME=v1=v1.
347       | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~"
348
349 "save-translate.sps:33.16-33.23: error: SAVE TRANSLATE: Cannot DROP all variables from dictionary.
350    33 | SAVE TRANSLATE/DROP=ALL.
351       |                ^~~~~~~~"
352
353 "save-translate.sps:34.21-34.22: error: SAVE TRANSLATE: Syntax error expecting variable name.
354    34 | SAVE TRANSLATE/DROP=**.
355       |                     ^~"
356
357 "save-translate.sps:35.21-35.22: error: SAVE TRANSLATE: Syntax error expecting variable name.
358    35 | SAVE TRANSLATE/KEEP=**.
359       |                     ^~"
360 ])
361 AT_CLEANUP