########################################
# 040.translate_hand -- translate using handcrafted Babel & components
########################################
use t::lib;
use t::runtests;
use t::util;
use Carp;
use Getopt::Long;
use Set::Scalar;
use Test::More;
use Text::Abbrev;
use strict;
our %OPTIONS;
Getopt::Long::Configure('pass_through'); # leave unrecognized options in @ARGV
GetOptions (\%OPTIONS,qw(user_type=s suite:s));
our %user_type=abbrev qw(installer developer);
our %suite=abbrev qw(short full);
$OPTIONS{user_type}='installer' unless defined $OPTIONS{user_type};
$OPTIONS{suite}='short' unless defined $OPTIONS{suite};
my $user_type=$user_type{$OPTIONS{user_type}} ||
confess "Invalid user_type option $OPTIONS{user_type}";
my $suite=$suite{$OPTIONS{suite}} || confess "Invalid suite option $OPTIONS{suite}";
my $subtestdir=subtestdir;
opendir(DIR,$subtestdir) or confess "Cannot read subtest directory $subtestdir: $!";
my @testfiles=sort grep /^[^.].*\.t$/,readdir DIR;
my $startup=shift @testfiles;
@testfiles=grep /main/,@testfiles if $suite eq 'short';
closedir DIR;
# my @extras=(undef,qw(history validate));
my @extras=new Set::Scalar(qw(history validate))->power_set->members;
@extras=sort {$a->size <=> $b->size} @extras;
my @ops=qw(translate count);
my @tests;
for my $extra (@extras) {
my $test=$startup;
$extra=join(' ',map {"--$_"} $extra->members);
$test.=" --user_type $user_type" unless $user_type eq 'installer';
$test.=" $extra" if length $extra;
push(@tests,$test);
for my $op (@ops) {
push(@tests,
map {my $test="$_ --op $op";
$test.=" --user_type $user_type" unless $user_type eq 'installer';
$test.=" $extra" if length $extra;
$test}
@testfiles);
}}
my $ok=runtests {details=>1,nested=>1,exact=>1,testdir=>scriptbasename},@tests;
ok($ok,script);
done_testing();