1# mix procedural subroutine and object-oriented method
2use strict;
3use warnings;
4use Test::More tests => 5;
5
6# this is needed to avoid false passes if was done first without 'info'
7use Inline CPP => config => force_build => 1, clean_after_build => 0;
8
9use Inline (CPP => 'DATA', classes => sub { join('::', split('__', shift)); } );  # AUTOMATIC
10#use Inline (CPP => 'DATA', classes => { 'Inline__Test__Inline_CPP_Debug' => 'Inline::Test::Inline_CPP_Debug'} );  # MANUAL
11
12can_ok 'Inline::Test::Inline_CPP_Debug', 'new';
13my $my_object = new_ok 'Inline::Test::Inline_CPP_Debug';
14is ref($my_object), 'Inline::Test::Inline_CPP_Debug', 'Our "Inline__Test__Inline_CPP_Debug" is a "Inline::Test::Inline_CPP_Debug"';
15is $my_object->my_method(), 'RETVAL FROM my_subroutine()', 'Proper object method association from Inline::Test::Inline_CPP_Debug.';
16is my_subroutine(), 'RETVAL FROM my_subroutine()', 'Proper subroutine association.';
17
18done_testing();
19
20__DATA__
21__CPP__
22
23SV* my_subroutine() { return(newSVpv("RETVAL FROM my_subroutine()", 27)); }
24
25class Inline__Test__Inline_CPP_Debug
26{
27public:
28    SV* my_method() { return my_subroutine(); }
29    Inline__Test__Inline_CPP_Debug() {}
30    ~Inline__Test__Inline_CPP_Debug() {}
31};
32