* Ovid <[EMAIL PROTECTED]> [2006-09-26T09:19:46] > > It would be nice if I could just write 'use My::Test::More' in my > > test scripts and have that provide what I need > > Side note: yes, it's trivial for me to write an extra module which provide > an environment variable or something similar for this, but I like the idea of > hooking this onto Test::More since we rely on this module for *every* test > script and thus can't forget to include it.
I thought this could be done in a nice simple way by exporting curried methods, but then I remembered that using methods would chomp prototypes. The attached code has a few jagged edges (doesn't use exported_to, etc), but I gave up on polishing them when I realized the prototype issue; maybe B::something can fix that. This would have made it possible to "subclass" Test::More, but maintain the interface, so you could write: package Test::Most; use base qw(Moog); sub ok { my ($class, $bool, $comment) = @_; for (1..10) { $class->SUPER($bool, $comment); } } This was probably more a way to waste a couple minutes than a good path forward, but YMMV. -- rjbs
package Moog; use strict; use warnings; use Test::More (); use Sub::Exporter (); use Sub::Exporter::Util (); use base qw(Test::Builder::Module); BEGIN { no strict 'refs'; for my $sub (@Test::More::EXPORT) { *{$sub} = sub { shift; &{"Test::More::$sub"}(@_); }; } Sub::Exporter::setup_exporter({ as => 'import_code', exports => [ map { $_ => Sub::Exporter::Util::curry_class($_) } @Test::More::EXPORT ], groups => { default => [':all'] }, }); } sub import_extra { my ($class, $things) = @_; my %ok = map { $_ => 1 } @Test::More::EXPORT; $class->import_code( { into_level => 2, }, grep { $ok{$_} } @$things ); } 1;