dnl PSPP - a program for statistical analysis.
dnl Copyright (C) 2017 Free Software Foundation, Inc.
dnl
dnl This program is free software: you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation, either version 3 of the License, or
dnl (at your option) any later version.
dnl
dnl This program is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
dnl GNU General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
dnl
AT_BANNER([portable files])

AT_SETUP([overwriting portable file])
AT_DATA([output.por], [abcdef
])
cp output.por output.por.backup
AT_DATA([porfile.sps], [dnl
DATA LIST NOTABLE/x 1.
BEGIN DATA.
5
END DATA.
EXPORT OUTFILE='output.por'.
])
AT_CHECK([pspp -O format=csv porfile.sps])
AT_CHECK([cmp output.por output.por.backup], [1], [ignore])
AT_CLEANUP

AT_SETUP([overwriting portable file atomically])
AT_DATA([output.por], [abcdef
])
cp output.por output.por.backup
AT_DATA([porfile.sps],
[[DATA LIST NOTABLE/x 1.
BEGIN DATA.
5
END DATA.
XEXPORT OUTFILE='output.por'.
HOST COMMAND=['kill -TERM $PPID'].
]])
AT_CHECK([pspp -O format=csv porfile.sps], [143], [], [ignore])
AT_CHECK([cmp output.por output.por.backup])
AT_CHECK(
  [for file in *.tmp*; do if test -e $file; then echo $file; exit 1; fi; done])
AT_CLEANUP

AT_SETUP([write to same portable file being read])
AT_DATA([export.sps], [dnl
DATA LIST NOTABLE/x 1.
BEGIN DATA.
2
END DATA.
EXPORT OUTFILE='data.por'.
])
AT_CHECK([pspp -O format=csv export.sps])
AT_CHECK([test -s data.por])
AT_CHECK(
  [for file in *.tmp*; do if test -e $file; then echo $file; exit 1; fi; done])
AT_DATA([export2.sps], [dnl
IMPORT FILE='data.por'.
COMPUTE y = x * 2.
EXPORT OUTFILE='data.por'.
])
AT_CHECK([pspp -O format=csv export2.sps])
AT_CHECK(
  [for file in *.tmp*; do if test -e $file; then echo $file; exit 1; fi; done])
AT_DATA([export3.sps], [dnl
IMPORT FILE='data.por'.
LIST.
])
AT_CHECK([pspp -O format=csv export3.sps], [0], [dnl
Table: Data List
X,Y
2,4.00
])
AT_CLEANUP

dnl This checks for a bug in the portable file writer that caused an infinite
dnl loop in some cases, and other problems in other cases, when a variable
dnl had value labels.
AT_SETUP([write portable file with value labels])
AT_DATA([export.sps], [dnl
DATA LIST NOTABLE/var1 TO var5 1-5.
VALUE LABELS
	/var1 1 'one'
	/var2 2 'two'
	/var3 3 'three'
	/var4 4 'four'
	/var5 5 'five'.
BEGIN DATA.
12345
END DATA.
EXPORT OUTFILE='data.por'.
])
AT_CHECK([pspp -O format=csv export.sps])
AT_DATA([import.sps], [dnl
IMPORT FILE='data.por'.
EXECUTE.
DISPLAY DICTIONARY.
LIST.
])
AT_CHECK([pspp -O format=csv import.sps], [0], [dnl
Table: Variables
Name,Position,Measurement Level,Role,Width,Alignment,Print Format,Write Format
VAR1,1,Nominal,Input,8,Right,F1.0,F1.0
VAR2,2,Nominal,Input,8,Right,F1.0,F1.0
VAR3,3,Nominal,Input,8,Right,F1.0,F1.0
VAR4,4,Nominal,Input,8,Right,F1.0,F1.0
VAR5,5,Nominal,Input,8,Right,F1.0,F1.0

Table: Value Labels
Variable Value,,Label
VAR1,1,one
VAR2,2,two
VAR3,3,three
VAR4,4,four
VAR5,5,five

Table: Data List
VAR1,VAR2,VAR3,VAR4,VAR5
1,2,3,4,5
])
AT_DATA([sys-file-info.sps], [SYSFILE INFO FILE='data.por'
])
AT_CHECK([pspp -O format=csv sys-file-info.sps | sed '/Encoding/d
/Integer Format/d
/Real Format/d
/Created/d
/Product/d
'], [0], [dnl
Table: File Information
File,data.por
Variables,5
Cases,Unknown
Type,SPSS Portable File
Weight,Not weighted
Compression,None

Table: Variables
Name,Position,Measurement Level,Role,Width,Alignment,Print Format,Write Format
VAR1,1,Unknown,Input,8,Right,F1.0,F1.0
VAR2,2,Unknown,Input,8,Right,F1.0,F1.0
VAR3,3,Unknown,Input,8,Right,F1.0,F1.0
VAR4,4,Unknown,Input,8,Right,F1.0,F1.0
VAR5,5,Unknown,Input,8,Right,F1.0,F1.0

Table: Value Labels
Variable Value,,Label
VAR1,1,one
VAR2,2,two
VAR3,3,three
VAR4,4,four
VAR5,5,five
])
AT_CLEANUP
