m4_define([SPREADSHEET_TEST_PREP],[dnl
m4_if($1,[GNM],[dnl
AT_CHECK([gzip -c $top_srcdir/tests/language/data-io/Book1.gnm.unzipped > Book1.gnumeric])dnl
m4_define([testsheet],[Book1.gnumeric])dnl
AT_SKIP_IF([test n$GNM_READ_SUPPORT != nyes])dnl
]) dnl
m4_if($1,[ODS],[dnl
AT_CHECK([cp $top_srcdir/tests/language/data-io/test.ods test.ods])dnl
m4_define([testsheet],[test.ods])dnl
AT_SKIP_IF([test n$ODF_READ_SUPPORT != nyes])dnl
])dnl
])
m4_define([CHECK_SPREADSHEET_READER],
[dnl
AT_SETUP([GET DATA /TYPE=$1 with CELLRANGE])
SPREADSHEET_TEST_PREP($1)
AT_DATA([get-data.sps], [dnl
GET DATA /TYPE=$1 /FILE='testsheet' /READNAMES=off /SHEET=name 'This' /CELLRANGE=range 'g9:i13' .
DISPLAY VARIABLES.
LIST.
])
AT_CHECK([pspp -o pspp.csv get-data.sps])
AT_CHECK([cat pspp.csv], [0], [dnl
Variable,Description,,Position
VAR001,Format: F8.2,,1
,Measure: Scale,,
,Display Alignment: Right,,
,Display Width: 8,,
VAR002,Format: A8,,2
,Measure: Nominal,,
,Display Alignment: Left,,
,Display Width: 8,,
VAR003,Format: F8.2,,3
,Measure: Scale,,
,Display Alignment: Right,,
,Display Width: 8,,
Table: Data List
VAR001,VAR002,VAR003
.00,fred ,20.00
1.00,11 ,21.00
2.00,twelve ,22.00
3.00,13 ,23.00
4.00,14 ,24.00
])
AT_CLEANUP
AT_SETUP([GET DATA /TYPE=$1 with CELLRANGE and READNAMES])
SPREADSHEET_TEST_PREP($1)
AT_DATA([get-data.sps], [dnl
GET DATA /TYPE=$1 /FILE='testsheet' /READNAMES=on /SHEET=name 'This' /CELLRANGE=range 'g8:i13' .
DISPLAY VARIABLES.
LIST.
])
AT_CHECK([pspp -o pspp.csv get-data.sps])
AT_CHECK([cat pspp.csv], [0], [dnl
Variable,Description,,Position
V1,Format: F8.2,,1
,Measure: Scale,,
,Display Alignment: Right,,
,Display Width: 8,,
V2,Format: A8,,2
,Measure: Nominal,,
,Display Alignment: Left,,
,Display Width: 8,,
VAR001,Format: F8.2,,3
,Measure: Scale,,
,Display Alignment: Right,,
,Display Width: 8,,
Table: Data List
V1,V2,VAR001
.00,fred ,20.00
1.00,11 ,21.00
2.00,twelve ,22.00
3.00,13 ,23.00
4.00,14 ,24.00
])
AT_CLEANUP
AT_SETUP([GET DATA /TYPE=$1 without CELLRANGE])
SPREADSHEET_TEST_PREP($1)
AT_DATA([get-data.sps], [dnl
GET DATA /TYPE=$1 /FILE='testsheet' /SHEET=index 3.
DISPLAY VARIABLES.
LIST.
])
AT_CHECK([pspp -O format=csv get-data.sps], [0], [dnl
Variable,Description,,Position
name,Format: A8,,1
,Measure: Nominal,,
,Display Alignment: Left,,
,Display Width: 8,,
id,Format: F8.2,,2
,Measure: Scale,,
,Display Alignment: Right,,
,Display Width: 8,,
height,Format: F8.2,,3
,Measure: Scale,,
,Display Alignment: Right,,
,Display Width: 8,,
warning: Cannot convert the value in the spreadsheet cell C4 to format (F8.2): Field contents are not numeric.
Table: Data List
name,id,height
fred ,.00,23.40
bert ,1.00,.56
charlie ,2.00,. @&t@
dick ,3.00,-34.09
])
AT_CLEANUP
AT_SETUP([GET DATA /TYPE=$1 with missing data])
SPREADSHEET_TEST_PREP($1)
AT_DATA([get-data.sps], [dnl
* This sheet has no data in one of its variables
GET DATA /TYPE=$1 /FILE='testsheet' /READNAMES=on /SHEET=index 5.
DISPLAY VARIABLES.
LIST.
])
AT_CHECK([pspp -o pspp.csv get-data.sps])
AT_CHECK([cat pspp.csv], [0], [dnl
Variable,Description,,Position
vone,Format: F8.2,,1
,Measure: Scale,,
,Display Alignment: Right,,
,Display Width: 8,,
vtwo,Format: F8.2,,2
,Measure: Scale,,
,Display Alignment: Right,,
,Display Width: 8,,
vthree,Format: A8,,3
,Measure: Nominal,,
,Display Alignment: Left,,
,Display Width: 8,,
v4,Format: F8.2,,4
,Measure: Scale,,
,Display Alignment: Right,,
,Display Width: 8,,
Table: Data List
vone,vtwo,vthree,v4
1.00,3.00,,5.00
2.00,4.00,,6.00
])
AT_CLEANUP
dnl This syntax doesn't do anything particularly useful.
dnl It has been seen to cause a few crashes, so we check here that it
dnl doesn't do anthing bad.
AT_SETUP([GET DATA /TYPE=$1 with no options])
SPREADSHEET_TEST_PREP($1)
AT_DATA([get-data.sps], [dnl
* This sheet is empty
GET DATA /TYPE=$1 /FILE='testsheet'.
DISPLAY DICTIONARY.
LIST.
])
AT_CHECK([pspp -o pspp.csv get-data.sps], [0], [ignore])
AT_CLEANUP
AT_SETUP([GET DATA /TYPE=$1 with empty sheet])
SPREADSHEET_TEST_PREP($1)
AT_DATA([get-data.sps], [dnl
* This sheet is empty
GET DATA /TYPE=$1 /FILE='testsheet' /SHEET=name 'Empty'.
])
AT_CHECK([pspp -o pspp.csv get-data.sps], [0], [dnl
warning: Selected sheet or range of spreadsheet `testsheet' is empty.
])
AT_CLEANUP
AT_SETUP([GET DATA /TYPE=$1 with nonexistent sheet])
SPREADSHEET_TEST_PREP($1)
AT_DATA([get-data.sps], [dnl
* This sheet doesnt exist.
GET DATA /TYPE=$1 /FILE='testsheet' /SHEET=name 'foobarxx'.
])
AT_CHECK([pspp -o pspp.csv get-data.sps], [0], [dnl
warning: Selected sheet or range of spreadsheet `testsheet' is empty.
])
AT_CLEANUP
])
AT_BANNER([GET DATA Spreadsheet /TYPE=GNM])
CHECK_SPREADSHEET_READER([GNM])
dnl Check for a bug where gnumeric files were interpreted incorrectly
AT_SETUP([GET DATA /TYPE=GNM sheet index bug])
AT_SKIP_IF([test n$GNM_READ_SUPPORT != nyes])
AT_DATA([minimal3.gnumeric],[dnl
Sheet1
Sheet2
Sheet3
Sheet1
2
3
Print_Area
#REF!
A1
Sheet_Title
"Sheet1"
A1
Name
x
y
Sheet One
1
2
foo
3
4
bar
5
6
Sheet2
2
2
Print_Area
#REF!
A1
Sheet_Title
"Sheet2"
A1
Comment
DOB
wealth
Sheet Two
24/5/1966
0.02
wee
37145
3000
Sheet3
2
2
Print_Area
#REF!
A1
Sheet_Title
"Sheet3"
A1
3
4
5
6
7
8
9
10
11
])
AT_DATA([gnum.sps], [dnl
GET DATA
/TYPE=GNM
/FILE='minimal3.gnumeric'
/SHEET=index 3
/READNAMES=off
.
LIST.
])
AT_CHECK([pspp -O format=csv gnum.sps], [0], [dnl
Table: Data List
VAR001,VAR002,VAR003
3 ,4.00,5.00
6 ,7.00,8.00
9 ,10.00,11.00
])
AT_CLEANUP
dnl Check for a bug where certain gnumeric files failed an assertion
AT_SETUP([GET DATA /TYPE=GNM assert-fail])
AT_SKIP_IF([test n$GNM_READ_SUPPORT != nyes])
AT_DATA([read.sps],[dnl
GET DATA
/TYPE=GNM
/FILE='crash.gnumeric'
.
list.
])
AT_DATA([crash.gnumeric],[dnl
Sheet1
Sheet1
2
4
one
two
1
2
1
2
1
2
])
AT_CHECK([pspp -O format=csv read.sps], [0], [ignore])
AT_CLEANUP
AT_BANNER([GET DATA Spreadsheet /TYPE=ODS])
CHECK_SPREADSHEET_READER([ODS])