# libi.t - tests for "preferred LIBI name" functionality of I18N::Charset

# $Id: libi.t,v 1.14 2008-07-12 03:27:12 Martin Exp $

use blib;
use Test::More tests => 25;

use IO::Capture::Stderr;
my $oICE =  IO::Capture::Stderr->new;

use strict;

BEGIN { use_ok('I18N::Charset') };

#================================================
# TESTS FOR libi routines
#================================================

my @aa;
#---- selection of examples which should all result in undef -----------
ok(!defined libi_charset_name(), 'no argument');
ok(!defined libi_charset_name(undef), 'undef argument');
ok(!defined libi_charset_name(""), 'empty argument');
ok(!defined libi_charset_name("junk"), 'junk argument');
ok(!defined libi_charset_name(999999), '999999 argument');
ok(!defined libi_charset_name(\@aa), 'arrayref argument');
$oICE->start;
ok(!defined I18N::Charset::add_libi_alias("my-junk" => 'junk argument'));
$oICE->stop;

SKIP:
  {
  if (! eval "require App::Info::Lib::Iconv")
    {
    diag 'App::Info::Lib::Iconv is not installed';
    skip 'App::Info::Lib::Iconv is not installed', 16;
    } # if
  my $oAILI = new App::Info::Lib::Iconv;
 SKIP:
    {
    if (! ref $oAILI)
      {
      diag('can not determine iconv version (not installed?)');
      skip('can not determine iconv version (not installed?)', 16);
      } # if
 SKIP:
      {
      if (! $oAILI->installed)
        {
        diag('iconv is not installed');
        skip('iconv is not installed', 16);
        } # if
      my $iLibiVersion = $oAILI->version || 0.0;
      diag "libiconv version is $iLibiVersion\n";
 SKIP:
        {
        # Convert "n.m" into an actual floating point number so we can compare it:
        my $fLibiVersion = do { my @r = ($iLibiVersion =~ /\d+/g); sprintf "%d."."%03d" x $#r, @r };
        if ($fLibiVersion < 1.008)
          {
          diag 'iconv version is too old(?)';
          skip 'iconv version is too old(?)', 16;
          } # if

        #---- some successful examples -----------------------------------------
        is(libi_charset_name("x-x-sjis"), libi_charset_name("MS_KANJI"), 'x-x-sjis');
        is(libi_charset_name("x-x-sjis"), "MS_KANJI", 'normal literal -- x-x-sjis');
        is(libi_charset_name("G.B.K."), "CP936", 'normal -- G.B.K.');
        is(libi_charset_name("CP936"), "CP936", 'identity -- CP936');
        is(libi_charset_name("Johab"), "CP1361", 'normal -- Johab');
        is(libi_charset_name("johab"), libi_charset_name("cp 1361"), 'equivalent -- johab');

        #---- some aliasing examples -----------------------------------------
        ok(I18N::Charset::add_libi_alias('my-chinese1' => 'CN-GB'));
        is(libi_charset_name("my-chinese1"), 'CN-GB', 'alias literal -- my-chinese1');
        is(libi_charset_name("my-chinese1"), libi_charset_name('EUC-CN'), 'alias equal -- my-chinese1');
        ok(I18N::Charset::add_libi_alias('my-chinese2' => 'EUC-CN'));
        is(libi_charset_name("my-chinese2"), 'CN-GB', 'alias literal -- my-chinese2');
        is(libi_charset_name("my-chinese2"), libi_charset_name('G.B.2312'), 'alias equal -- my-chinese2');
        ok(I18N::Charset::add_libi_alias('my-japanese' => 'x-x-sjis'));
        is(libi_charset_name("my-japanese"), 'MS_KANJI', 'alias literal -- my-japanese');
        is(libi_charset_name("my-japanese"), libi_charset_name('Shift_JIS'), 'alias equal -- my-japanese');
        pass; # I miscounted but I don't feel like going back and
              # changing all the 16 to 15 8-)
        } # end of SKIP block
      } # end of SKIP block
    } # end of SKIP block
  } # end of SKIP block
pass;

exit 0;

__END__

