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([files handling])

AT_SETUP([Write error - directory exists])

mkdir foobar.sav

AT_DATA([file.sps], [dnl
DATA LIST NOTABLE/x 1.
BEGIN DATA.
5
END DATA.
SAVE OUTFILE='foobar.sav'.
])

AT_CHECK([pspp -O format=csv file.sps], [1], [dnl
error: Opening foobar.sav for writing: Is a directory.

error: Error opening `foobar.sav' for writing as a system file: Is a directory.
])

AT_CLEANUP


AT_SETUP([Write error - no permission])

AT_CHECK([
    mkdir directory
    touch directory/foobar.sav
    chmod 000 directory
])

# If we can write to the directory, then permissions just don't work
# properly.  (Perhaps we're running as root.)
AT_SKIP_IF([: > directory/foo])

AT_DATA([file.sps], [dnl
DATA LIST NOTABLE/x 1.
BEGIN DATA.
5
END DATA.
SAVE OUTFILE='directory/foobar.sav'.
])

AT_CHECK([pspp -O format=csv file.sps], [1], [dnl
error: Creating temporary file to replace directory/foobar.sav: Permission denied.

error: Error opening `directory/foobar.sav' for writing as a system file: Permission denied.
])

chmod 700 directory

AT_CLEANUP



AT_SETUP([Write error - temp file disappeared])

AT_DATA([file.sps], [dnl
DATA LIST NOTABLE/x 1.
BEGIN DATA.
5
END DATA.
XSAVE OUTFILE='foobar.sav'.
HOST COMMAND=[['rm foobar.savtmp*']].
EXECUTE.
])

AT_CHECK([pspp -O format=csv file.sps], [1], [ignore])

AT_CLEANUP



AT_SETUP([Write fifo])

dnl The Fifo feature is not available in w32 builds
AT_SKIP_IF([$MINGW])

AT_DATA([file.sps], [dnl
DATA LIST NOTABLE/x 1.
BEGIN DATA.
5
END DATA.
SAVE OUTFILE='foobar.sav'.
])

mkfifo foobar.sav
cat foobar.sav > /dev/null &
pid=$!

AT_CHECK([pspp -O format=csv file.sps], [0], [ignore])

AT_CLEANUP



AT_SETUP([Reading from pipe])

AT_DATA([pipe.sps], [dnl
data list file='printf "1 2\n 3 4\n 5 6\n" |' notable list /x * y *.
list.
])

AT_CHECK([pspp -O format=csv pipe.sps], [0], [dnl
Table: Data List
x,y
1.00,2.00
3.00,4.00
5.00,6.00
])

AT_CLEANUP


dnl This was seen to crash pspp
AT_SETUP([Reusing inline file])

AT_DATA([inline-reuse.sps], [dnl
get data /type=txt /file=inline  /variables=A f7.2 .

data list notable list /foo.
begin data.
end data.

data list notable list /foo.
])

AT_CHECK([pspp inline-reuse.sps], [0], [ignore])

AT_CLEANUP
