dnl
AT_BANNER([Perl module tests])
+m4_divert_push([PREPARE_TESTS])
+# Find the Address Sanitizer library that PSPP is linked against, if any.
+# If it exists, it needs to be preloaded when we run Perl.
+asan_lib=$($abs_top_builddir/libtool --mode=execute ldd \
+ $abs_top_builddir/src/ui/terminal/pspp 2>/dev/null \
+ | grep asan \
+ | awk '{print $3}')
+if test ! -e "$asan_lib"; then
+ asan_lib=
+fi
+
dnl This command can be used to run with the PSPP Perl module after it has been
dnl built (with "make") but before it has been installed. The -I options are
dnl equivalent to "use ExtUtils::testlib;" inside the Perl program, but it does
dnl not need to be run with the perl-module build directory as the current
dnl working directory.
-dnl
-dnl XXX "libtool --mode=execute" is probably better than setting
-dnl LD_LIBRARY_PATH.
-m4_define([RUN_PERL_MODULE],
- [LD_LIBRARY_PATH=$abs_top_builddir/src/.libs \
- LD_PRELOAD=/usr/lib/i386-linux-gnu/libasan.so.4 \
- DYLD_LIBRARY_PATH=$abs_top_builddir/src/.libs \
- $PERL -I$abs_top_builddir/perl-module/blib/arch \
- -I$abs_top_builddir/perl-module/blib/lib])
+run_perl_module () {
+ LD_PRELOAD=$asan_lib:$LD_PRELOAD \
+ LD_LIBRARY_PATH=$abs_top_builddir/src/.libs \
+ DYLD_LIBRARY_PATH=$abs_top_builddir/src/.libs \
+ ASAN_OPTIONS="$ASAN_OPTIONS detect_leaks=false" \
+ $PERL -I$abs_top_builddir/perl-module/blib/arch \
+ -I$abs_top_builddir/perl-module/blib/lib "$@"
+}
+m4_divert_pop([PREPARE_TESTS])
AT_SETUP([Perl create system file])
AT_SKIP_IF([test "$WITH_PERL_MODULE" = no])
$sysfile->close ();
])
-AT_CHECK([RUN_PERL_MODULE test.pl])
+AT_CHECK([run_perl_module test.pl])
AT_DATA([dump-dict.sps],
[GET FILE='testfile.sav'.
DISPLAY FILE LABEL.
DISPLAY DICTIONARY.
SHOW WEIGHT.
])
-AT_CHECK([pspp -O format=csv dump-dict.sps], [0],
- [File label: My Dictionary
-
-Documents in the active dataset:
+AT_CHECK([pspp -O format=csv dump-dict.sps], [0], [dnl
+Table: File Label
+Label,My Dictionary
+Table: Documents
These Documents
Table: Variables
# Don't close. We want to test that the destructor does that.
]])
-AT_CHECK([RUN_PERL_MODULE test.pl])
+AT_CHECK([run_perl_module test.pl])
AT_DATA([dump-dicts.sps],
[GET FILE='testfile.sav'.
DISPLAY DICTIONARY.
id,1,,Scale,Input,8,Right,F2.0,F2.0,
name,2,,Nominal,Input,20,Left,A20,A20,
-File label: This is the file label
-
-Documents in the active dataset:
+Table: File Label
+Label,This is the file label
+Table: Documents
This is a document line
Table: Data List
id,name
-34,frederick @&t@
+34,frederick
Table: Variables
Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
id,1,,Scale,Input,8,Right,F2.0,F2.0,
name,2,,Nominal,Input,20,Left,A20,A20,
-File label: This is the file label
-
-Documents in the active dataset:
+Table: File Label
+Label,This is the file label
+Table: Documents
This is a document line
Table: Data List
id,name
-21,wheelbarrow @&t@
+21,wheelbarrow
])
AT_CLEANUP
$sysfile->close ();
]])
-AT_CHECK([RUN_PERL_MODULE test.pl], [0], [], [stderr])
+AT_CHECK([run_perl_module test.pl], [0], [], [stderr])
cat stderr
AT_DATA([dump-dict.sps],
[GET FILE='testfile.sav'.
longstring,3,My Long String,Nominal,Input,9,Left,A9,A9,
Table: Value Labels
-Variable,Value,Label
-integer,0,Zero
+Variable Value,,Label
+My Integer,0,Zero
,1,Unity
,2,Duality
-string,xx ,foo
-,yy ,bar
-longstring,xxx ,xfoo
+My String,xx,foo
+,yy,bar
+My Long String,xxx,xfoo
])
AT_CLEANUP
my $res = $sysfile->append_case ([3]);
print "Dictionary survives sysfile\n" if $res;
]])
-AT_CHECK([RUN_PERL_MODULE test.pl], [0],
+AT_CHECK([run_perl_module test.pl], [0],
[Dictionary survives sysfile
])
AT_CLEANUP
print "\n";
}
]])
-AT_CHECK([RUN_PERL_MODULE test.pl], [0],
+AT_CHECK([run_perl_module test.pl], [0],
[Variable 0 is "string", label is "A Short String Variable"
Value Labels:
1111 => ones
$output->close ();
]])
-AT_CHECK([RUN_PERL_MODULE test.pl])
+AT_CHECK([run_perl_module test.pl])
AT_DATA([dump-dicts.sps],
[GET FILE='sample.sav'.
DISPLAY DICTIONARY.
datetime,6,A Datetime Variable,Scale,Input,8,Right,DATETIME17.0,DATETIME17.0,
Table: Value Labels
-Variable,Value,Label
-string,1111 ,ones
-,2222 ,twos
-,3333 ,threes
-numeric,1,Unity
+Variable Value,,Label
+A Short String Variable,1111,ones
+,2222,twos
+,3333[a],threes
+A Numeric Variable,1,Unity
,2,Duality
,3,Thripality
+Footnotes:
+a,User-missing value
+
Table: Variable and Dataset Attributes
-Variable,Name,Value
-numeric,colour[1],blue
+Variable and Name,,Value
+A Numeric Variable,colour[1],blue
,colour[2],pink
,colour[3],violet
,nationality,foreign
Table: Data List
string,longstring,numeric,date,dollar,datetime
-1111 ,One ,1,01-JAN-2001,$1.00,01-JAN-2001 01:01
-2222 ,Two ,2,02-FEB-2002,$2.00,02-FEB-2002 02:02
-3333 ,Three ,3,03-MAR-2003,$3.00,03-MAR-2003 03:03
-. ,. ,.,.,. ,.
-5555 ,Five ,5,05-MAY-2005,$5.00,05-MAY-2005 05:05
+1111,One,1,01-JAN-2001,$1.00,01-JAN-2001 01:01
+2222,Two,2,02-FEB-2002,$2.00,02-FEB-2002 02:02
+3333,Three,3,03-MAR-2003,$3.00,03-MAR-2003 03:03
+.,.,.,.,. ,.
+5555,Five,5,05-MAY-2005,$5.00,05-MAY-2005 05:05
Table: Variables
Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
datetime,6,A Datetime Variable,Scale,Input,8,Right,DATETIME17.0,DATETIME17.0,
Table: Value Labels
-Variable,Value,Label
-string,1111 ,ones
-,2222 ,twos
-,3333 ,threes
-numeric,1,Unity
+Variable Value,,Label
+A Short String Variable,1111,ones
+,2222,twos
+,3333[a],threes
+A Numeric Variable,1,Unity
,2,Duality
,3,Thripality
+Footnotes:
+a,User-missing value
+
Table: Variable and Dataset Attributes
-Variable,Name,Value
-numeric,colour[1],blue
+Variable and Name,,Value
+A Numeric Variable,colour[1],blue
,colour[2],pink
,colour[3],violet
,nationality,foreign
Table: Data List
string,longstring,numeric,date,dollar,datetime
-1111 ,One ,1,01-JAN-2001,$1.00,01-JAN-2001 01:01
-2222 ,Two ,2,02-FEB-2002,$2.00,02-FEB-2002 02:02
-3333 ,Three ,3,03-MAR-2003,$3.00,03-MAR-2003 03:03
-. ,. ,.,.,. ,.
-5555 ,Five ,5,05-MAY-2005,$5.00,05-MAY-2005 05:05
+1111,One,1,01-JAN-2001,$1.00,01-JAN-2001 01:01
+2222,Two,2,02-FEB-2002,$2.00,02-FEB-2002 02:02
+3333,Three,3,03-MAR-2003,$3.00,03-MAR-2003 03:03
+.,.,.,.,. ,.
+5555,Five,5,05-MAY-2005,$5.00,05-MAY-2005 05:05
]])
AT_CLEANUP
print "Formatted string is \"$formatted\"\n";
print "Perl representation is \"$str\"\n";
]])
-AT_CHECK([RUN_PERL_MODULE test.pl], [0],
+AT_CHECK([run_perl_module test.pl], [0],
[[Formatted string is "11-SEP-2001 08:20"
Perl representation is "Tue Sep 11 08:20:00 2001"
]])
die "Returns undef on opening failure" if ref $sf;
print $PSPP::errstr, "\n";
]])
-AT_CHECK([RUN_PERL_MODULE test.pl], [0],
+AT_CHECK([run_perl_module test.pl], [0],
[[An error occurred while opening `no-such-file.sav': No such file or directory.
]],
[[Name "PSPP::errstr" used only once: possible typo at test.pl line 8.
die "Missing Value Positive Num"
if !PSPP::value_is_missing ($val, $numericvar);
]])
-AT_CHECK([RUN_PERL_MODULE test.pl])
+AT_CHECK([run_perl_module test.pl])
AT_CLEANUP
AT_SETUP([Perl custom attributes])
print map "$_\n", join ', ', @$ll;
}
]])
-AT_CHECK([RUN_PERL_MODULE test.pl], [0],
+AT_CHECK([run_perl_module test.pl], [0],
[[$@Role =>0
colour =>blue, pink, violet
nationality =>foreign
AT_SKIP_IF([test "$WITH_PERL_MODULE" = no])
# Skip this test if Perl's Text::Diff module is not installed.
AT_CHECK([perl -MText::Diff -e '' || exit 77])
-AT_CHECK([RUN_PERL_MODULE $abs_top_builddir/perl-module/t/Pspp.t], [0],
+AT_CHECK([run_perl_module $abs_top_builddir/perl-module/t/Pspp.t], [0],
[[1..37
ok 1 - use PSPP;
ok 2 - Dictionary Creation