Add support for reading and writing SPV files.
[pspp] / tests / perl-module.at
index 175a09aae83bceab86c0f95fb72b9a3301cc614e..f3f393cc2c97a35d380be921996e7b1a51fc8006 100644 (file)
@@ -16,20 +16,31 @@ dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
 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])
@@ -68,7 +79,7 @@ AT_DATA([test.pl],
 
    $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.
@@ -76,11 +87,11 @@ DISPLAY DOCUMENTS.
 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
@@ -140,7 +151,7 @@ AT_DATA([test.pl],
 
     # 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.
@@ -160,30 +171,30 @@ Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Fo
 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
 
@@ -232,7 +243,7 @@ AT_DATA([test.pl],
 
     $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'.
@@ -246,13 +257,13 @@ string,2,My String,Nominal,Input,8,Left,A8,A8,"""this    ""; ""that    """
 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
 
@@ -282,7 +293,7 @@ my $sysfile ;
     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
@@ -360,7 +371,7 @@ AT_DATA([test.pl],
        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
@@ -438,7 +449,7 @@ AT_DATA([test.pl],
 
     $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.
@@ -461,17 +472,20 @@ dollar,5,A Dollar Variable,Scale,Input,8,Right,DOLLAR11.2,DOLLAR11.2,
 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
@@ -479,11 +493,11 @@ numeric,colour[1],blue
 
 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
@@ -495,17 +509,20 @@ dollar,5,A Dollar Variable,Scale,Input,8,Right,DOLLAR11.2,DOLLAR11.2,
 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
@@ -513,11 +530,11 @@ numeric,colour[1],blue
 
 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
 
@@ -554,7 +571,7 @@ AT_DATA([test.pl],
     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"
 ]])
@@ -572,7 +589,7 @@ AT_DATA([test.pl],
     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.
@@ -622,7 +639,7 @@ AT_DATA([test.pl],
     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])
@@ -648,7 +665,7 @@ AT_DATA([test.pl],
        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
@@ -660,7 +677,7 @@ AT_SETUP([Perl Pspp.t])
 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