fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / library / pcre.t
blob596c281723b936a72befcb8520f86e3fdcf3d2ed
1 #!perl
2 # Copyright (C) 2001-2010, Parrot Foundation.
3 # $Id$
5 use strict;
6 use warnings;
7 use lib qw( t . lib ../lib ../../lib );
9 use Test::More;
10 use Parrot::Test tests => 2;
12 =head1 NAME
14 t/library/pcre.t - testing library/pcre.pir
16 =head1 SYNOPSIS
18     % prove t/library/pcre.t
20 =head1 DESCRIPTION
22 This program tests whether the 'pcre.pir' library accesses
23 the installed PCRE library, and matches patterns successfully.
25 =cut
27 # if we keep pcre, we need a config test
28 my $cmd = ( $^O =~ /MSWin32/ ) ? "pcregrep --version" : "pcre-config --version";
29 my $has_pcre = !Parrot::Test::run_command( $cmd, STDOUT => File::Spec->devnull ,STDERR => File::Spec->devnull, );
30 my $pcre_libpath = '';
32 # It's possible that libpcre is installed in some non-standard path...
33 if ($has_pcre && ($^O !~ /MSWin32/)) {
34     # Extract the library path for non-windows platforms (in case it isn't in
35     # the normal lookup locations)
36     my $outfile = 'pcre-config.out';
37     Parrot::Test::run_command('pcre-config --prefix', STDOUT => $outfile);
38     my $out = Parrot::Test::slurp_file($outfile);
39     unlink $outfile;
40     chomp $out;
41     $pcre_libpath = "$out/lib";
44 SKIP: {
45     skip( 'no pcre-config', Test::Builder->new()->expected_tests() )
46         unless $has_pcre;
48 ## 1
49 ## Check that the library can be loaded and initialized,
50 ## diganose the failure otherwise.
51     pir_output_is(<<"CODE", <<'OUT', 'libpcre loading');
53 .include 'iglobals.pasm'
54 .include 'libpaths.pasm'
56 .sub main :main
57     .local pmc interp
58     getinterp interp
60     .local pmc lib_paths
61     lib_paths = interp[.IGLOBALS_LIB_PATHS]
63     .local pmc dynext_path
64     dynext_path = lib_paths[.PARROT_LIB_PATH_DYNEXT]
65     unshift dynext_path, '$pcre_libpath'
67     load_bytecode 'pcre.pbc'
68     .local pmc pcre_init
69     .local pmc pcre_lib
71     get_global pcre_init, ['PCRE'], 'init'
72     if null pcre_init goto NOINIT
73     push_eh CATCH
74     pcre_lib = pcre_init()
75     pop_eh
76     if null pcre_lib goto NULLINIT
77     unless pcre_lib goto FALSEINIT
78     say 'Loaded'
79     .return()
80 CATCH:
81     .local pmc exception
82     .get_results(exception)
83     .local string message
84     message = exception['message']
85     pop_eh
86     say message
87     .return()
88 NOINIT:
89    say 'No init function'
90     .return()
91 NULLINIT:
92     say 'init returned null value'
93     .return()
94 FALSEINIT:
95     say 'init returned false value'
96     .return()
97 .end
99 CODE
100 Loaded
103 ## 2
104     my @todo;
105     @todo = ( todo => '3..5 fail on Win32' ) if $^O =~ /MSWin32/;
106     pir_output_is( <<"CODE", <<'OUT', 'soup to nuts', @todo );
108 .include 'iglobals.pasm'
109 .include 'libpaths.pasm'
111 .sub main :main
112     .local pmc interp
113     getinterp interp
115     .local pmc lib_paths
116     lib_paths = interp[.IGLOBALS_LIB_PATHS]
118     .local pmc dynext_path
119     dynext_path = lib_paths[.PARROT_LIB_PATH_DYNEXT]
120     unshift dynext_path, '$pcre_libpath'
122     load_bytecode 'pcre.pbc'
123     .local pmc func
124     .local pmc lib
126     get_global func, ['PCRE'], 'init'
127     if_null func, NOK1
128     branch OK1
129 NOK1:
130     print 'not '
131 OK1:
132     say 'ok 1'
134     lib = func()
135     if_null lib, NOK2
136     branch OK2
137 NOK2:
138     print 'not '
139 OK2:
140     say 'ok 2'
143     .local string s
144     .local string pat
146     s= '--a--'
147     pat= 'a'
149     .local pmc code
150     .local string error
151     .local int errptr
153     func= get_global ['PCRE'], 'compile'
154     ( code, error, errptr )= func( pat, 0 )
156     .local int is_code_defined
157     is_code_defined= defined code
158     if is_code_defined goto OK3
159     print 'not '
160 OK3:
161     say 'ok 3'
163     .local int ok
164     .local pmc result
166     func= get_global ['PCRE'], 'match'
167     ( ok, result )= func( code, s, 0, 0 )
169     unless ok < 0 goto OK4
170     print 'not '
171 OK4:
172     say 'ok 4'
174     .local int i
175     i = 0
176     .local string match
178     func = get_global ['PCRE'], 'dollar'
179     match = func( s, ok, result, i )
180     if 'a' == match goto OK5
181     print 'not '
182 OK5:
183     say 'ok 5'
185 .end
186 CODE
187 ok 1
188 ok 2
189 ok 3
190 ok 4
191 ok 5
196 # Local Variables:
197 #   mode: cperl
198 #   cperl-indent-level: 4
199 #   fill-column: 100
200 # End:
201 # vim: expandtab shiftwidth=4: