#line 1 ## # name: TestML # author: Ingy döt Net # abstract: A Generic Software Testing Meta Language # license: perl # copyright: 2009, 2010, 2011, 2012 # see: # - http://www.testml.org/ # - irc://irc.freenode.net#testml use 5.006001; use strict; use warnings; my $requires = " use Pegex 0.20 (); "; package TestML; use TestML::Runtime; our $VERSION = '0.27'; use constant XXX_skip => 1; our $DumpModule = 'YAML::XS'; sub WWW { require XXX; local $XXX::DumpModule = $DumpModule; XXX::WWW(@_) } sub XXX { require XXX; local $XXX::DumpModule = $DumpModule; XXX::XXX(@_) } sub YYY { require XXX; local $XXX::DumpModule = $DumpModule; XXX::YYY(@_) } sub ZZZ { require XXX; local $XXX::DumpModule = $DumpModule; XXX::ZZZ(@_) } sub str { TestML::Str->new(value => $_[0]) } sub num { TestML::Num->new(value => $_[0]) } sub bool { TestML::Bool->new(value => $_[0]) } sub list { TestML::List->new(value => $_[0]) } my $skipped; sub import { my $run; my $bridge = ''; my $testml; $skipped = 0; strict->import; warnings->import; my $pkg = shift; while (@_) { my $option = shift(@_); my $value = (@_ and $_[0] !~ /^-/) ? shift(@_) : ''; if ($option eq '-run') { $run = $value || 'TestML::Runtime::TAP'; } elsif ($option eq '-testml') { $testml = $value; } elsif ($option eq '-bridge') { $bridge = $value; } # XXX skip_all should call skip_all() from runner subclass elsif ($option eq '-dev_test') { if (-e 'inc' and not -e 'inc/.author') { skip_all('This is a developer test'); } } elsif ($option eq '-skip_all') { my $reason = $value; die "-skip_all option requires a reason argument" unless $reason; skip_all($reason); } elsif ($option eq '-require_or_skip') { my $module = $value; die "-require_or_skip option requires a module argument" unless $module and $module !~ /^-/; eval "require $module; 1" or do { $skipped = 1; require Test::More; Test::More::plan( skip_all => "$module failed to load" ); } } else { die "Unknown option '$option'"; } } sub skip_all { return if $skipped; my $reason = shift; $skipped = 1; require Test::More; Test::More::plan( skip_all => $reason, ); } sub END { no warnings; return if $skipped; if ($run) { eval "require $run; 1" or die $@; $bridge ||= 'main'; $run->new( testml => ($testml || \ *main::DATA), bridge => $bridge, )->run(); } elsif ($testml or $bridge) { die "-testml or -bridge option used without -run option\n"; } } no strict 'refs'; my $p = caller; *{$p.'::str'} = \&str; *{$p.'::num'} = \# *{$p.'::bool'} = \&bool; *{$p.'::list'} = \&list; if (not defined &{$p.'::XXX'}) { *{$p.'::WWW'} = \&WWW; *{$p.'::XXX'} = \&XXX; *{$p.'::YYY'} = \&YYY; *{$p.'::ZZZ'} = \&ZZZ; } } 1;