This is an automated email from the git hooks/post-receive script. js pushed a commit to tag 0.55 in repository libinline-java-perl.
commit e35a29da80d307bda8eb2da9e882004bd7d26a0d Author: Patrick LeBoutillier <p...@cpan.org> Date: Wed Jan 9 16:11:15 2002 +0000 Initial revision --- Java/Portable.pm | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++ t/09_shared_alone.t | 45 ++++++++++++++++++ t/10_shared_mult.t | 84 ++++++++++++++++++++++++++++++++ t/11_shared_fork.t | 79 +++++++++++++++++++++++++++++++ 4 files changed, 342 insertions(+) diff --git a/Java/Portable.pm b/Java/Portable.pm new file mode 100644 index 0000000..82fcc53 --- /dev/null +++ b/Java/Portable.pm @@ -0,0 +1,134 @@ +package Inline::Java::Portable ; +@Inline::Java::Portable::ISA = qw(Exporter) ; + +@EXPORT = qw(portable) ; + + +use strict ; + +$Inline::Java::Portable::VERSION = '0.31' ; + + +use Exporter ; +use Carp ; +use Config ; + +# Here is some code to figure out if we are running on command.com +# shell under Windows. +my $COMMAND_COM = + ( + ($^O eq 'MSWin32')&& + ( + ($ENV{PERL_INLINE_JAVA_COMMAND_COM})|| + ( + (defined($ENV{COMSPEC}))&& + ($ENV{COMSPEC} =~ /(command|4dos)\.com/i) + )|| + (`ver` =~ /win(dows )?(9[58]|m[ei])/i) + ) + ) || 0 ; + + +# Used when this module is used by itself, this stubs the requirements +sub use_alone { + *Inline::Java::debug = sub {} ; +} + + +sub portable { + my $key = shift ; + my $val = shift ; + + my $defmap = { + EXE_EXTENSION => $Config{exe_ext}, + GOT_ALARM => $Config{d_alarm}, + GOT_FORK => $Config{d_fork}, + ENV_VAR_PATH_SEP => $Config{path_sep}, + ENV_VAR_PATH_SEP_CP => ':', + IO_REDIR => '2>&1', + COMMAND_COM => 0, + SUB_FIX_CLASSPATH => undef, + JVM_LIB => 'libjvm.so', + JVM_SO => 'libjvm.so', + } ; + + my $map = { + MSWin32 => { + ENV_VAR_PATH_SEP_CP => ';', + # 2>&1 doesn't work under command.com + IO_REDIR => ($COMMAND_COM ? '' : undef), + COMMAND_COM => $COMMAND_COM, + JVM_LIB => 'jvm.lib', + JVM_SO => 'jvm.dll', + }, + cygwin => { + ENV_VAR_PATH_SEP_CP => ';', + SUB_FIX_CLASSPATH => sub { + my $val = shift ; + if (defined($val)&&($val)){ + $val = `cygpath -w \"$val\"` ; + chomp($val) ; + } + return $val ; + }, + JVM_LIB => 'jvm.lib', + JVM_SO => 'jvm.dll', + }, + } ; + + if (! exists($defmap->{$key})){ + croak "Portability issue $key not defined!" ; + } + + if ((defined($map->{$^O}))&&(defined($map->{$^O}->{$key}))){ + if ($key =~ /^RE_/){ + if (defined($val)){ + my $f = $map->{$^O}->{$key}->[0] ; + my $t = $map->{$^O}->{$key}->[1] ; + $val =~ s/$f/$t/g ; + Inline::Java::debug("portable: $key => $val for $^O is '$val'") ; + return $val ; + } + else{ + Inline::Java::debug("portable: $key for $^O is 'undef'") ; + return undef ; + } + } + elsif ($key =~ /^SUB_/){ + my $sub = $map->{$^O}->{$key} ; + if (defined($sub)){ + $val = $sub->($val) ; + Inline::Java::debug("portable: $key => $val for $^O is '$val'") ; + return $val ; + } + else{ + return $val ; + } + } + else{ + Inline::Java::debug("portable: $key for $^O is '$map->{$^O}->{$key}'") ; + return $map->{$^O}->{$key} ; + } + } + else{ + if ($key =~ /^RE_/){ + Inline::Java::debug("portable: $key => $val for $^O is default '$val'") ; + return $val ; + } + if ($key =~ /^SUB_/){ + Inline::Java::debug("portable: $key => $val for $^O is default '$val'") ; + return $val ; + } + else{ + Inline::Java::debug("portable: $key for $^O is default '$defmap->{$key}'") ; + return $defmap->{$key} ; + } + } +} + + +1 ; + + + + diff --git a/t/09_shared_alone.t b/t/09_shared_alone.t new file mode 100644 index 0000000..212a0d4 --- /dev/null +++ b/t/09_shared_alone.t @@ -0,0 +1,45 @@ +use strict ; +use Test ; + +use Inline Config => + DIRECTORY => './_Inline_test' ; + +use Inline ( + Java => 'DATA', + SHARED_JVM => 1, +) ; + + +my $JNI = Inline::Java::__get_JVM()->{JNI} ; +plan(tests => ($JNI ? 1 : 3)) ; + + +if ($JNI){ + skip("JNI", 1) ; + Inline::Java::shutdown_JVM() ; + exit ; +} + + +my $t = new t9() ; + +{ + ok($t->{i}, 5) ; + ok(Inline::Java::i_am_JVM_owner()) ; +} + +ok($t->__get_private()->{proto}->ObjectCount(), 1) ; + + +__END__ + +__Java__ + +class t9 { + static public int i = 5 ; + + public t9(){ + } +} + + diff --git a/t/10_shared_mult.t b/t/10_shared_mult.t new file mode 100644 index 0000000..1dd1dd3 --- /dev/null +++ b/t/10_shared_mult.t @@ -0,0 +1,84 @@ +package t10 ; + +use strict ; +use Test ; + + +use Inline Config => + DIRECTORY => './_Inline_test' ; + + +use Inline ( + Java => 't/shared.java', + SHARED_JVM => 1, + NAME => 't10', +) ; + +my $JNI = Inline::Java::__get_JVM()->{JNI} ; +plan(tests => ($JNI ? 1 : 8)) ; + +if ($JNI){ + skip("JNI", 1) ; + Inline::Java::shutdown_JVM() ; + exit ; +} + + + +eval <<CODE1; + my \$t = new t10::t10() ; + { + ok(\$t->{i}++, 5) ; + ok(Inline::Java::i_am_JVM_owner()) ; + Inline::Java::release_JVM() ; + ok(! Inline::Java::i_am_JVM_owner()) ; + } +CODE1 +if ($@){ + die($@) ; +} + +my $JVM1 = Inline::Java::__get_JVM() ; +$JVM1->{destroyed} = 1 ; +Inline::Java::__clear_JVM() ; + +eval <<CODE2; + use Inline ( + Java => 't/shared.java', + SHARED_JVM => 1, + NAME => 't10', + ) ; + + my \$t = new t10::t10() ; + { + ok(\$t->{i}++, 6) ; + ok(! Inline::Java::i_am_JVM_owner()) ; + } +CODE2 +if ($@){ + die($@) ; +} + +my $JVM2 = Inline::Java::__get_JVM() ; +$JVM2->{destroyed} = 1 ; +Inline::Java::__clear_JVM() ; + +eval <<CODE3; + use Inline ( + Java => 't/shared.java', + SHARED_JVM => 1, + NAME => 't10', + ) ; + + my \$t = new t10::t10() ; + { + ok(\$t->{i}, 7) ; + ok(! Inline::Java::i_am_JVM_owner()) ; + Inline::Java::capture_JVM() ; + ok(Inline::Java::i_am_JVM_owner()) ; + } +CODE3 +if ($@){ + die($@) ; +} + diff --git a/t/11_shared_fork.t b/t/11_shared_fork.t new file mode 100644 index 0000000..029b560 --- /dev/null +++ b/t/11_shared_fork.t @@ -0,0 +1,79 @@ +use strict ; +use Test ; + +use Inline Config => + DIRECTORY => './_Inline_test' ; + +use Inline ( + Java => 'DATA', + SHARED_JVM => 1, +) ; + + +my $nb = 10 ; + +my $JNI = Inline::Java::__get_JVM()->{JNI} ; +my $fork = Inline::Java::portable('GOT_FORK') ; +plan(tests => ($JNI ? 1 : ($fork ? $nb + 1 : 1))) ; + + +if ($JNI){ + skip("JNI", 1) ; + Inline::Java::shutdown_JVM() ; + exit ; +} + +if (! $fork){ + skip("fork", 1) ; + Inline::Java::shutdown_JVM() ; + exit ; +} + + +$t13::i = 0 ; + +my $sum = (($nb) * ($nb + 1)) / 2 ; +for (my $i = 0 ; $i < $nb ; $i++){ + if (! fork()){ + do_child($i) ; + } +} + + +# Wait for kids to finish +for (my $i = 0 ; $i < $nb ; $i++){ + sleep(1) ; + ok(1) ; +} + +ok($t13::i, $sum) ; + + +sub do_child { + my $i = shift ; + + Inline::Java::reconnect_JVM() ; + + my $t = new t13() ; + for (my $j = 0 ; $j <= $i ; $j++){ + $t->incr_i() ; + } + exit ; +} + + +__DATA__ + +__Java__ + + +class t13 { + static public int i = 0 ; + + public t13(){ + } + + public void incr_i(){ + i++ ; + } +} -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libinline-java-perl.git _______________________________________________ Pkg-perl-cvs-commits mailing list Pkg-perl-cvs-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits