Re: [REPATCH MANIFEST ext/B/t/o.t] Add tests for O

2002-05-10 Thread rgarciasuarez

Quoting chromatic <[EMAIL PROTECTED]>:

> Let's try this then:
[]
> --- /dev/null Thu Aug 30 02:54:37 2001
> +++ ext/B/t/o.t   Thu May  9 21:40:17 2002
> @@ -0,0 +1,64 @@
> +#!./perl -w
> +
> +use strict;
> +use File::Spec;

Move these use() after the BEGIN (so you get the correct @INC).

> +BEGIN {
> + chdir 't' if -d 't';
> + @INC = ('../lib', 'lib', '.');
> + require 'test.pl';
> +}
> +
> +my $file = File::Spec->catfile( 'lib', 'B', 'success.pm' );
> +local *OUT;
> +open(OUT, '>', $file) or skip_all( 'Cannot write fake backend
> module');

Shouldn't you mkdir ./lib/B before this ?

> +print OUT while ;
> +close *OUT;
> +
> +plan( 9 );

>From outer space !

Tests 7 and 8 will fail without perlio, thus you should
skip them (see the BUGS section is O.pm's pod).

> +
> +# use() makes it difficult to avoid O::import()
> +require_ok( 'O' );
> +
> +my @args = ('-Ilib', '-MO=success,foo,bar', '-e', '1' );
> +my @lines = get_lines( @args );
> +
> +is( $lines[0], '-e syntax OK', 'O.pm should not munge perl output
> without 
> -qq');
> +is( $lines[1], 'Compiling!', 'Output should not be saved without -q
> switch' 
> );
> +is( $lines[2], '(foo) ', 'O.pm should call backend compile()
> method' );
> +is( $lines[3], '[]', 'Nothing should be in $O::BEGIN_output without -q'
> );
> +
> +$args[1] = '-MO=-q,success,foo,bar';
> +@lines = get_lines( @args );
> +isnt( $lines[1], 'Compiling!', 'Output should not be printed with -q
> switch' 
> );
> +is( $lines[2], "[Compiling!", '... but should be in $O::BEGIN_output'
> );
> +
> +$args[1] = '-MO=-qq,success,foo,bar';
> +@lines = get_lines( @args );
> +is( scalar @lines, 3, '-qq should suppress even the syntax OK message'
> );
> +
> +$args[1] = '-MO=success,fail';
> +@lines = get_lines( @args );
> +like( $lines[0], qr/fail at .eval/,
> + 'O.pm should die if backend compile() does not return a subref' );
> +
> +sub get_lines {
> + split(/[\r\n]+/, runperl( args => [ @_ ], stderr => 1 ));
> +}
> +
> +END {
> + 1 while unlink('lib/B/success.pm');
> +}
> +
> +__END__
> +package B::success;
> +
> +print "Compiling!\n";
> +
> +sub compile {
> + return 'fail' if ($_[0] eq 'fail');
> + print "($_[0]) <$_[1]>\n";
> + return sub { print "[$O::BEGIN_output]\n" };
> +}
> +
> +1;
> 



Re: [REPATCH MANIFEST ext/B/t/o.t] Add tests for O

2002-05-10 Thread chromatic

On Friday 10 May 2002 01:10, [EMAIL PROTECTED] wrote:

> Move these use() after the BEGIN (so you get the correct @INC).

> Shouldn't you mkdir ./lib/B before this ?

> Tests 7 and 8 will fail without perlio, thus you should
> skip them (see the BUGS section is O.pm's pod).

You guys are a lot pickier these days.  Isn't everybody's box just like mine? 
 :)

I've incorporated all of these suggestions.  Thank you.

-- c


--- MANIFEST~	Thu May  9 19:04:21 2002
+++ MANIFEST	Thu May  9 19:06:06 2002
@@ -88,6 +88,7 @@
 ext/B/Makefile.PL	Compiler backend makefile writer
 ext/B/NOTES		Compiler backend notes
 ext/B/O.pm		Compiler front-end module (-MO=...)
+ext/B/t/o.t		See if O works
 ext/B/ramblings/cc.notes	Compiler ramblings: notes on CC backend
 ext/B/ramblings/curcop.runtime	Compiler ramblings: notes on curcop use
 ext/B/ramblings/flip-flop	Compiler ramblings: notes on flip-flop
--- /dev/null	Thu Aug 30 02:54:37 2001
+++ ext/B/t/o.t	Fri May 10 07:37:41 2002
@@ -0,0 +1,76 @@
+#!./perl -w
+
+BEGIN {
+	chdir 't' if -d 't';
+	@INC = ('../lib', 'lib', '.');
+	require 'test.pl';
+}
+
+use strict;
+use Config;
+use File::Spec;
+use File::Path;
+
+my $path = File::Spec->catdir( 'lib', 'B' );
+unless (-d $path) {
+	mkpath( $path ) or skip_all( 'Cannot create fake module path' );
+}
+
+my $file = File::Spec->catfile( $path, 'success.pm' );
+local *OUT;
+open(OUT, '>', $file) or skip_all( 'Cannot write fake backend module');
+print OUT while ;
+close *OUT;
+
+plan( 9 ); # And someone's responsible.
+
+# use() makes it difficult to avoid O::import()
+require_ok( 'O' );
+
+my @args = ('-Ilib', '-MO=success,foo,bar', '-e', '1' );
+my @lines = get_lines( @args );
+
+is( $lines[0], '-e syntax OK', 'O.pm should not munge perl output without -qq');
+is( $lines[1], 'Compiling!', 'Output should not be saved without -q switch' );
+is( $lines[2], '(foo) ', 'O.pm should call backend compile() method' );
+is( $lines[3], '[]', 'Nothing should be in $O::BEGIN_output without -q' );
+
+$args[1] = '-MO=-q,success,foo,bar';
+@lines = get_lines( @args );
+isnt( $lines[1], 'Compiling!', 'Output should not be printed with -q switch' );
+
+SKIP: {
+	skip( '-q redirection does not work without PerlIO', 2)
+		unless $Config{useperlio};
+	is( $lines[2], "[Compiling!", '... but should be in $O::BEGIN_output' );
+
+	$args[1] = '-MO=-qq,success,foo,bar';
+	@lines = get_lines( @args );
+	is( scalar @lines, 3, '-qq should suppress even the syntax OK message' );
+}
+
+$args[1] = '-MO=success,fail';
+@lines = get_lines( @args );
+like( $lines[0], qr/fail at .eval/,
+	'O.pm should die if backend compile() does not return a subref' );
+
+sub get_lines {
+	split(/[\r\n]+/, runperl( args => [ @_ ], stderr => 1 ));
+}
+
+END {
+	1 while unlink($file);
+}
+
+__END__
+package B::success;
+
+print "Compiling!\n";
+
+sub compile {
+	return 'fail' if ($_[0] eq 'fail');
+	print "($_[0]) <$_[1]>\n";
+	return sub { print "[$O::BEGIN_output]\n" };
+}
+
+1;