@@ -2,7 +2,7 @@ package MakeMaker::Test::Setup::XS;
22
33@ISA = qw( Exporter) ;
44require Exporter;
5- @EXPORT = qw( run_tests list_dynamic list_static) ;
5+ @EXPORT = qw( run_tests list_dynamic list_static list_cpp ) ;
66
77use strict;
88use File::Path;
@@ -224,6 +224,81 @@ ok is_odd(1);
224224ok !is_odd(2);
225225is XS::Other::plus1(3), 4;
226226END
227+
228+ };
229+
230+ $label2files {cppbasic } = +{
231+
232+ ' lib/XSCPP/Test.pm' => <<'END' ,
233+ package XSCPP::Test;
234+ require Exporter;
235+ require DynaLoader;
236+ $VERSION = 1.02;
237+ @ISA = qw(Exporter DynaLoader);
238+ @EXPORT = qw(is_even);
239+ bootstrap XSCPP::Test $VERSION;
240+ 1;
241+ END
242+
243+ ' Makefile.PL' => <<'END' ,
244+ use ExtUtils::MakeMaker;
245+ use ExtUtils::CppGuess;
246+ my $guess = ExtUtils::CppGuess->new;
247+ WriteMakefile(
248+ NAME => 'XSCPP::Test',
249+ VERSION_FROM => 'lib/XSCPP/Test.pm',
250+ XSMULTI => 1,
251+ $guess->makemaker_options,
252+ );
253+ END
254+
255+ ' lib/XSCPP/Test.xscc' => <<END ,
256+ extern "C" {
257+ #include "EXTERN.h"
258+ #include "perl.h"
259+ }
260+ #include "XSUB.h"
261+ class CPPTest {
262+ public:
263+ CPPTest() { }
264+ ~CPPTest() { }
265+ int is_even(int num) { return (num % 2) == 0; }
266+ };
267+ \n MODULE = XSCPP::Test PACKAGE = XSCPP::Test
268+ \n PROTOTYPES: DISABLE
269+ CPPTest*
270+ CPPTest::new();
271+ \n int
272+ CPPTest::is_even(int input);
273+ \n void
274+ CPPTest::DESTROY();
275+ END
276+
277+ ' typemap' => <<'END' ,
278+ TYPEMAP
279+ CPPTest * O_OBJECT
280+ OUTPUT
281+ O_OBJECT
282+ sv_setref_pv( $arg, CLASS, (void*)$var );
283+ INPUT
284+ O_OBJECT
285+ if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG) )
286+ $var = ($type)SvIV((SV*)SvRV( $arg ));
287+ else{
288+ warn( \"${Package}::$func_name() -- $var is not a blessed SV reference\" );
289+ XSRETURN_UNDEF;
290+ }
291+ END
292+
293+ ' t/is_even.t' => <<'END' ,
294+ #!/usr/bin/perl -w
295+ use Test::More tests => 3;
296+ use_ok "XSCPP::Test";
297+ my $o = XSCPP::Test->new;
298+ ok !$o->is_even(1);
299+ ok $o->is_even(2);
300+ END
301+
227302};
228303
229304sub virtual_rename {
@@ -271,6 +346,11 @@ sub list_dynamic {
271346 );
272347}
273348
349+ sub list_cpp {
350+ (
351+ );
352+ }
353+
274354sub run_tests {
275355 my ($perl , $label , $add_target , $add_testtarget ) = @_ ;
276356 my $sublabel = $add_target ;
0 commit comments