[java2perl6] r103 committed - invoke_javap(): also check status of close() on piped javap, since it ...

[email protected] Wed, 21 Oct 2009 17:04:37 +0000
Newsgroups perl.dbdi.dev
Message-ID <[email protected]>
Revision: 103
Author: cosimo.streppone
Date: Wed Oct 21 10:01:20 2009
Log: invoke_javap(): also check status of close() on piped javap, since it  
can help detecting failures
http://code.google.com/p/java2perl6/source/detail?r=103

Modified:
  /trunk/lib/Java/Javap.pm
  /trunk/t/02_invoke_javap.t

=======================================
--- /trunk/lib/Java/Javap.pm	Mon Oct  5 07:39:49 2009
+++ /trunk/lib/Java/Javap.pm	Wed Oct 21 10:01:20 2009
@@ -4,7 +4,7 @@
  use warnings;
  use Carp;

-our $VERSION = '0.05';
+our $VERSION = '0.06';
  our $JAVAP_EXECUTABLE = 'javap';

  use Java::Javap::TypeCast;
@@ -57,14 +57,19 @@

  	$options ||= {};

+	# Open the real javap executable and read output from it
  	open(my $javap_fh, '-|', $JAVAP_EXECUTABLE, %$options, @$classes)
  		or croak "'$JAVAP_EXECUTABLE @{[ %$options ]} @$classes' failed: $!";

  	my $javap_output = q{};
+
  	while (<$javap_fh>) {
  		$javap_output .= $_;
  	}
-	close $javap_fh;
+
+	# When dealing with a pipe, we also want to get errors from close
+	close $javap_fh
+		or croak "'$JAVAP_EXECUTABLE @{[ %$options ]} @$classes' failed: $!";

  	return $javap_output;
  }
=======================================
--- /trunk/t/02_invoke_javap.t	Sun Oct  4 06:34:16 2009
+++ /trunk/t/02_invoke_javap.t	Wed Oct 21 10:01:20 2009
@@ -9,15 +9,19 @@
  plan skip_all => "javap from Java SDK required: $@"
  	unless Java::Javap->javap_test;

-plan tests => 2;
+plan tests => 4;
+
+my $java_class = 'com.example.NestedIntTest';

  my $decomp = Java::Javap->javap(
-	['com.example.NestedIntTest'],
+	[$java_class],
  	{-classpath=>'testjavas'}
  );

  diag($decomp);

  ok($decomp, 'received some output from javap');
-like($decomp, qr{Compiled from}m, 'javap output seems sane');
-
+like($decomp, qr{Compiled from}m, 'javap output contains a "Compiled from"  
statement');
+like($decomp, qr{$java_class}m, 'javap output contains the original class  
name');
+ok(length($decomp) > length($java_class), 'javap output is longer than the  
class name');
+