Blame t/do_tests.pl

Packit f3e6b9
#!/usr/bin/perl
Packit f3e6b9
# Copyright (c) 2016-2018 Sullivan Beck. All rights reserved.
Packit f3e6b9
# This program is free software; you can redistribute it and/or modify it
Packit f3e6b9
# under the same terms as Perl itself.
Packit f3e6b9
Packit f3e6b9
use warnings;
Packit f3e6b9
use strict;
Packit f3e6b9
no strict 'subs';
Packit f3e6b9
no strict 'refs';
Packit f3e6b9
Packit f3e6b9
my %type = ('country'  => 'Country',
Packit f3e6b9
            'language' => 'Language',
Packit f3e6b9
            'currency' => 'Currency',
Packit f3e6b9
            'script'   => 'Script',
Packit f3e6b9
            'langfam'  => 'LangFam',
Packit f3e6b9
            'langext'  => 'LangExt',
Packit f3e6b9
            'langvar'  => 'LangVar',
Packit f3e6b9
           );
Packit f3e6b9
my $generic_tests;
Packit f3e6b9
Packit f3e6b9
sub do_tests {
Packit f3e6b9
   my($data_type,$inp_file,$test_type,$codeset,$show_errs) = @_;
Packit f3e6b9
   my $type = $type{$data_type};
Packit f3e6b9
   $::data_type = $data_type;
Packit f3e6b9
   $::test_type = $test_type;
Packit f3e6b9
   $inp_file    = $data_type  if (! $inp_file);
Packit f3e6b9
Packit f3e6b9
   my($runtests) = shift(@ARGV);
Packit f3e6b9
Packit f3e6b9
   # Load the test function and the data for the tests
Packit f3e6b9
Packit f3e6b9
   my($dir,$tdir);
Packit f3e6b9
   if ( -f "t/testfunc.pl" ) {
Packit f3e6b9
     require "./t/testfunc.pl";
Packit f3e6b9
     require "./t/vals_${inp_file}.pl";
Packit f3e6b9
     $dir="./lib";
Packit f3e6b9
     $tdir="t";
Packit f3e6b9
   } elsif ( -f "testfunc.pl" ) {
Packit f3e6b9
     require "./testfunc.pl";
Packit f3e6b9
     require "./vals_${inp_file}.pl";
Packit f3e6b9
     $dir="../lib";
Packit f3e6b9
     $tdir=".";
Packit f3e6b9
   } else {
Packit f3e6b9
     die "ERROR: cannot find testfunc.pl\n";
Packit f3e6b9
   }
Packit f3e6b9
Packit f3e6b9
   unshift(@INC,$dir);
Packit f3e6b9
Packit f3e6b9
   $::tests .= $generic_tests  if (! defined($show_errs));
Packit f3e6b9
Packit f3e6b9
   if ($test_type eq 'old') {
Packit f3e6b9
      $::module = "Locale::$type";
Packit f3e6b9
      eval("use $::module");
Packit f3e6b9
      my $tmp   = $::module . "::show_errors";
Packit f3e6b9
      &{ $tmp }(0);
Packit f3e6b9
   } elsif ($test_type eq 'func') {
Packit f3e6b9
      $::module = "Locale::Codes::$type";
Packit f3e6b9
      eval("use $::module");
Packit f3e6b9
      my $tmp   = $::module . "::show_errors";
Packit f3e6b9
      &{ $tmp }(0);
Packit f3e6b9
   } elsif (defined($codeset)) {
Packit f3e6b9
      eval("use Locale::Codes");
Packit f3e6b9
      $::obj = Locale::Codes->new($data_type,$codeset,$show_errs);
Packit f3e6b9
      $::obj->show_errors(1);
Packit f3e6b9
   } elsif (defined($show_errs)) {
Packit f3e6b9
      eval("use Locale::Codes");
Packit f3e6b9
      $::obj = Locale::Codes->new();
Packit f3e6b9
      $::obj->type($data_type);
Packit f3e6b9
      $::obj->show_errors($show_errs);
Packit f3e6b9
   } else {
Packit f3e6b9
      eval("use Locale::Codes");
Packit f3e6b9
      $::obj = new Locale::Codes $data_type;
Packit f3e6b9
      $::obj->show_errors(0);
Packit f3e6b9
   }
Packit f3e6b9
Packit f3e6b9
   print "$::data_type [$::test_type]\n";
Packit f3e6b9
   test_Func(\&test,$::tests,$runtests);
Packit f3e6b9
}
Packit f3e6b9
Packit f3e6b9
sub test {
Packit f3e6b9
   my ($op,@test) = @_;
Packit f3e6b9
   my @ret;
Packit f3e6b9
Packit f3e6b9
   my $stderr = '';
Packit f3e6b9
   {
Packit f3e6b9
      local *STDERR;
Packit f3e6b9
      open STDERR, '>', \$stderr;
Packit f3e6b9
      @ret = _test($op,@test);
Packit f3e6b9
   }
Packit f3e6b9
Packit f3e6b9
   if ($stderr) {
Packit f3e6b9
      $stderr =~ s/\n.*//m;
Packit f3e6b9
      chomp($stderr);
Packit f3e6b9
      return $stderr;
Packit f3e6b9
   } else {
Packit f3e6b9
      return @ret;
Packit f3e6b9
   }
Packit f3e6b9
}
Packit f3e6b9
Packit f3e6b9
sub _test {
Packit f3e6b9
   my    ($op,@test) = @_;
Packit f3e6b9
Packit f3e6b9
   if ($op eq '2code') {
Packit f3e6b9
      my $code;
Packit f3e6b9
      if ($::obj) {
Packit f3e6b9
         $code = $::obj->name2code(@test);
Packit f3e6b9
      } else {
Packit f3e6b9
         $code = &{ "${::data_type}2code" }(@test);
Packit f3e6b9
      }
Packit f3e6b9
      return ($code ? lc($code) : $code);
Packit f3e6b9
Packit f3e6b9
   } elsif ($op eq '2name') {
Packit f3e6b9
      if ($::obj) {
Packit f3e6b9
         return $::obj->code2name(@test);
Packit f3e6b9
      } else {
Packit f3e6b9
         return &{ "code2${::data_type}" }(@test)
Packit f3e6b9
      }
Packit f3e6b9
Packit f3e6b9
   } elsif ($op eq 'code2code') {
Packit f3e6b9
      my $code;
Packit f3e6b9
      if ($::obj) {
Packit f3e6b9
         $code = $::obj->code2code(@test);
Packit f3e6b9
      } else {
Packit f3e6b9
         $code = &{ "${::data_type}_code2code" }(@test);
Packit f3e6b9
      }
Packit f3e6b9
      return ($code ? lc($code) : $code);
Packit f3e6b9
Packit f3e6b9
   } elsif ($op eq 'all_codes') {
Packit f3e6b9
      my $n;
Packit f3e6b9
      if ($test[$#test] =~ /^\d+$/) {
Packit f3e6b9
         $n = pop(@test);
Packit f3e6b9
      }
Packit f3e6b9
Packit f3e6b9
      my @tmp;
Packit f3e6b9
      if ($::obj) {
Packit f3e6b9
         @tmp = $::obj->all_codes(@test);
Packit f3e6b9
      } else {
Packit f3e6b9
         @tmp = &{ "all_${::data_type}_codes" }(@test);
Packit f3e6b9
      }
Packit f3e6b9
Packit f3e6b9
      if ($n  &&  @tmp > $n) {
Packit f3e6b9
         return @tmp[0..($n-1)];
Packit f3e6b9
      } else {
Packit f3e6b9
         return @tmp;
Packit f3e6b9
      }
Packit f3e6b9
Packit f3e6b9
   } elsif ($op eq 'all_names') {
Packit f3e6b9
      my $n;
Packit f3e6b9
      if ($test[$#test] =~ /^\d+$/) {
Packit f3e6b9
         $n = pop(@test);
Packit f3e6b9
      }
Packit f3e6b9
Packit f3e6b9
      my @tmp;
Packit f3e6b9
      if ($::obj) {
Packit f3e6b9
         @tmp = $::obj->all_names(@test);
Packit f3e6b9
      } else {
Packit f3e6b9
         @tmp = &{ "all_${::data_type}_names" }(@test);
Packit f3e6b9
      }
Packit f3e6b9
Packit f3e6b9
      if ($n  &&  @tmp > $n) {
Packit f3e6b9
         return @tmp[0..($n-1)];
Packit f3e6b9
      } else {
Packit f3e6b9
         return @tmp;
Packit f3e6b9
      }
Packit f3e6b9
Packit f3e6b9
   } elsif ($op eq 'rename') {
Packit f3e6b9
      if ($::obj) {
Packit f3e6b9
         return $::obj->rename_code(@test);
Packit f3e6b9
      } else {
Packit f3e6b9
         return &{ "${::module}::rename_${::data_type}" }(@test)
Packit f3e6b9
      }
Packit f3e6b9
   } elsif ($op eq 'add') {
Packit f3e6b9
      if ($::obj) {
Packit f3e6b9
         return $::obj->add_code(@test);
Packit f3e6b9
      } else {
Packit f3e6b9
         return &{ "${::module}::add_${::data_type}" }(@test)
Packit f3e6b9
      }
Packit f3e6b9
   } elsif ($op eq 'delete') {
Packit f3e6b9
      if ($::obj) {
Packit f3e6b9
         return $::obj->delete_code(@test);
Packit f3e6b9
      } else {
Packit f3e6b9
         return &{ "${::module}::delete_${::data_type}" }(@test)
Packit f3e6b9
      }
Packit f3e6b9
   } elsif ($op eq 'add_alias') {
Packit f3e6b9
      if ($::obj) {
Packit f3e6b9
         return $::obj->add_alias(@test);
Packit f3e6b9
      } else {
Packit f3e6b9
         return &{ "${::module}::add_${::data_type}_alias" }(@test)
Packit f3e6b9
      }
Packit f3e6b9
   } elsif ($op eq 'delete_alias') {
Packit f3e6b9
      if ($::obj) {
Packit f3e6b9
         return $::obj->delete_alias(@test);
Packit f3e6b9
      } else {
Packit f3e6b9
         return &{ "${::module}::delete_${::data_type}_alias" }(@test)
Packit f3e6b9
      }
Packit f3e6b9
   } elsif ($op eq 'replace_code') {
Packit f3e6b9
      if ($::obj) {
Packit f3e6b9
         return $::obj->replace_code(@test);
Packit f3e6b9
      } else {
Packit f3e6b9
         return &{ "${::module}::rename_${::data_type}_code" }(@test)
Packit f3e6b9
      }
Packit f3e6b9
   } elsif ($op eq 'add_code_alias') {
Packit f3e6b9
      if ($::obj) {
Packit f3e6b9
         return $::obj->add_code_alias(@test);
Packit f3e6b9
      } else {
Packit f3e6b9
         return &{ "${::module}::add_${::data_type}_code_alias" }(@test)
Packit f3e6b9
      }
Packit f3e6b9
   } elsif ($op eq 'delete_code_alias') {
Packit f3e6b9
      if ($::obj) {
Packit f3e6b9
         return $::obj->delete_code_alias(@test);
Packit f3e6b9
      } else {
Packit f3e6b9
         return &{ "${::module}::delete_${::data_type}_code_alias" }(@test)
Packit f3e6b9
      }
Packit f3e6b9
   } elsif ($op eq 'codeset') {
Packit f3e6b9
      if ($::obj) {
Packit f3e6b9
         return $::obj->codeset(@test);
Packit f3e6b9
      } else {
Packit f3e6b9
         return &{ "${::module}::codeset" }(@test)
Packit f3e6b9
      }
Packit f3e6b9
   } elsif ($op eq 'type') {
Packit f3e6b9
      if ($::obj) {
Packit f3e6b9
         return $::obj->type(@test);
Packit f3e6b9
      } else {
Packit f3e6b9
         return &{ "${::module}::type" }(@test)
Packit f3e6b9
      }
Packit f3e6b9
   }
Packit f3e6b9
}
Packit f3e6b9
Packit f3e6b9
$generic_tests = "
Packit f3e6b9
#################
Packit f3e6b9
Packit f3e6b9
2code
Packit f3e6b9
_undef_
Packit f3e6b9
   _undef_
Packit f3e6b9
Packit f3e6b9
2code
Packit f3e6b9
   _undef_
Packit f3e6b9
Packit f3e6b9
2code
Packit f3e6b9
_blank_
Packit f3e6b9
   _undef_
Packit f3e6b9
Packit f3e6b9
2code
Packit f3e6b9
UnusedName
Packit f3e6b9
   _undef_
Packit f3e6b9
Packit f3e6b9
2code
Packit f3e6b9
   _undef_
Packit f3e6b9
Packit f3e6b9
2code
Packit f3e6b9
_undef_
Packit f3e6b9
   _undef_
Packit f3e6b9
Packit f3e6b9
2name
Packit f3e6b9
_undef
Packit f3e6b9
   _undef_
Packit f3e6b9
Packit f3e6b9
2name
Packit f3e6b9
   _undef_
Packit f3e6b9
Packit f3e6b9
###
Packit f3e6b9
Packit f3e6b9
add
Packit f3e6b9
AAA
Packit f3e6b9
newCode
Packit f3e6b9
   1
Packit f3e6b9
Packit f3e6b9
2code
Packit f3e6b9
newCode
Packit f3e6b9
   aaa
Packit f3e6b9
Packit f3e6b9
delete
Packit f3e6b9
AAA
Packit f3e6b9
   1
Packit f3e6b9
Packit f3e6b9
2code
Packit f3e6b9
newCode
Packit f3e6b9
   _undef_
Packit f3e6b9
Packit f3e6b9
###
Packit f3e6b9
Packit f3e6b9
add
Packit f3e6b9
AAA
Packit f3e6b9
newCode
Packit f3e6b9
   1
Packit f3e6b9
Packit f3e6b9
rename
Packit f3e6b9
AAA
Packit f3e6b9
newCode2
Packit f3e6b9
   1
Packit f3e6b9
Packit f3e6b9
2code
Packit f3e6b9
newCode
Packit f3e6b9
   aaa
Packit f3e6b9
Packit f3e6b9
2code
Packit f3e6b9
newCode2
Packit f3e6b9
   aaa
Packit f3e6b9
Packit f3e6b9
###
Packit f3e6b9
Packit f3e6b9
add_alias
Packit f3e6b9
newCode2
Packit f3e6b9
newAlias
Packit f3e6b9
   1
Packit f3e6b9
Packit f3e6b9
2code
Packit f3e6b9
newAlias
Packit f3e6b9
   aaa
Packit f3e6b9
Packit f3e6b9
delete_alias
Packit f3e6b9
newAlias
Packit f3e6b9
   1
Packit f3e6b9
Packit f3e6b9
2code
Packit f3e6b9
newAlias
Packit f3e6b9
   _undef_
Packit f3e6b9
Packit f3e6b9
###
Packit f3e6b9
Packit f3e6b9
replace_code
Packit f3e6b9
AAA
Packit f3e6b9
BBB
Packit f3e6b9
   1
Packit f3e6b9
Packit f3e6b9
2name
Packit f3e6b9
AAA
Packit f3e6b9
   newCode2
Packit f3e6b9
Packit f3e6b9
2name
Packit f3e6b9
BBB
Packit f3e6b9
   newCode2
Packit f3e6b9
Packit f3e6b9
###
Packit f3e6b9
Packit f3e6b9
add_code_alias
Packit f3e6b9
BBB
Packit f3e6b9
CCC
Packit f3e6b9
   1
Packit f3e6b9
Packit f3e6b9
2name
Packit f3e6b9
BBB
Packit f3e6b9
   newCode2
Packit f3e6b9
Packit f3e6b9
2name
Packit f3e6b9
CCC
Packit f3e6b9
   newCode2
Packit f3e6b9
Packit f3e6b9
delete_code_alias
Packit f3e6b9
CCC
Packit f3e6b9
   1
Packit f3e6b9
Packit f3e6b9
2name
Packit f3e6b9
CCC
Packit f3e6b9
   _undef_
Packit f3e6b9
Packit f3e6b9
";
Packit f3e6b9
Packit f3e6b9
1;
Packit f3e6b9
# Local Variables:
Packit f3e6b9
# mode: cperl
Packit f3e6b9
# indent-tabs-mode: nil
Packit f3e6b9
# cperl-indent-level: 3
Packit f3e6b9
# cperl-continued-statement-offset: 2
Packit f3e6b9
# cperl-continued-brace-offset: 0
Packit f3e6b9
# cperl-brace-offset: 0
Packit f3e6b9
# cperl-brace-imaginary-offset: 0
Packit f3e6b9
# cperl-label-offset: 0
Packit f3e6b9
# End:
Packit f3e6b9