Acme-MetaSyntactic

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN


0.39 2005-09-08 BOOK
    [NEW WEEKLY THEME 2005/09/12]
    - stars (Rafael Garcia-Suarez)
    [THEME UPDATES]
    - counting_rhyme (David Landgren spotted a typo)
    - phonetic (Gábor Szabó had a test failure)
    [ENHANCEMENTS]
    - Each theme now has a theme() method, for reflexion
    [TESTS]
    - the list validity is now tested for all locales for subclasses
      of Acme::MetaSyntactic::Locale (thanks to Gábor Szabó)

0.38 2005-08-24 BOOK
    [NEW WEEKLY THEME 2005/09/05]
    - phonetic
    [HEY, PHONETIC IS NOT NEW! IT WAS ADDED IN VERSION 0.08!!]
    - Well, the theme has changed enough that I can consider it
      new: it's now a subclass of Acme::MetaSyntactic::Locale,
      and supports Swahili, French, English, German and Italian
      lists (as well as the good old NATO).

MANIFEST  view on Meta::CPAN

t/11namespace.t
t/12fail.t
t/12live.t
t/15func.t
t/16import.t
t/20theme.t
t/29meta.t
t/30list.t
t/31any.t
t/32multi.t
t/33locale.t
t/33locale_territory.t
t/33locale_win32.t
t/34data.t
t/35remote.t
t/35remote2.t
t/40inc.t
t/50usecase.t
t/author-pod-syntax.t
t/lib/Acme/MetaSyntactic/test_ams_alias.pm
t/lib/Acme/MetaSyntactic/test_ams_list.pm
t/lib/Acme/MetaSyntactic/test_ams_locale.pm
t/lib/Acme/MetaSyntactic/test_ams_remote.pm
t/lib/NoLang.pm
t/release-distmeta.t
t/remote
t/remote1
t/remote2
t/usecase_alias1
t/usecase_alias2
t/usecase_alias3
t/usecase_list1
t/usecase_list2
t/usecase_list3
t/usecase_list4
t/usecase_list5
t/usecase_list6
t/usecase_list7
t/usecase_list8
t/usecase_locale_en3
t/usecase_locale_en4
t/usecase_locale_en5
t/usecase_locale_fr1
t/usecase_locale_fr2
t/usecase_locale_fr3
t/usecase_locale_fr4
t/usecase_locale_fr5
t/usecase_locale_fr6

lib/Acme/MetaSyntactic/Locale.pm  view on Meta::CPAN

The language is selected at construction time from:

=over 4

=item 1.

the given C<lang> or C<category> parameter,

=item 2.

the current locale, as given by the environment variables C<LANGUAGE>,
C<LANG> or (under Win32) Win32::Locale.

=item 3.

the default language for the selected theme.

=back

The language codes should conform to the RFC 3066 and ISO 639 standard.

lib/Acme/MetaSyntactic/Locale.pm  view on Meta::CPAN

=over 4

=item new( lang => $lang )

=item new( category => $lang )

The constructor of a single instance. An instance will not repeat items
until the list is exhausted.

The C<lang> or C<category> parameter(both are synonymous) should be
expressed as a locale category. If none of those parameters is given
Acme::MetaSyntactic::Locale will try to find the user locale (with the
help of environment variables C<LANGUAGE>, C<LANG> and the module
C<Win32::Locale>).

POSIX locales are defined as C<language[_territory][.codeset][@modifier]>.
If the specific territory is not supported, C<Acme::MetaSyntactic::Locale>
will use the language, and if the language isn't supported either,
the default is used.

=item init()

init() must be called when the subclass is loaded, so as to read the
__DATA__ section and fully initialise it.

=item name( $count )

lib/Test/MetaSyntactic.pm  view on Meta::CPAN

    my @metas;

    # assume the module has already been loaded
    no strict 'refs';
    my $class = "Acme::MetaSyntactic::$theme";

    if( $class->isa('Acme::MetaSyntactic::Locale') ) {
        for my $lang ( "Acme::MetaSyntactic::$theme"->languages() ) {
            push @metas,
                [ "Acme::MetaSyntactic::$theme"->new( lang => $lang ),
                  "$theme, $lang locale" ];
        }
    }
    elsif( $class->isa('Acme::MetaSyntactic::MultiList') ) {
        for my $cat ( "Acme::MetaSyntactic::$theme"->categories() ) {
            push @metas,
                [ "Acme::MetaSyntactic::$theme"->new( category => $cat ),
                  "$theme, $cat category" ];
        }
    }
    else {

t/33locale.t  view on Meta::CPAN

use Test::More;
use lib 't/lib';
use NoLang;
use strict;
use File::Spec::Functions;

my $dir;
BEGIN { $dir = catdir qw( t lib ); }

use lib $dir;
use Acme::MetaSyntactic::test_ams_locale;

my @langs = Acme::MetaSyntactic::test_ams_locale->languages();

plan tests => 4 * ( @langs + 2 ) + 7;

is_deeply(
    [ sort @langs ],
    [qw( en fr it x-chiendent yi )],
    "All languages (class)"
);

@langs = Acme::MetaSyntactic::test_ams_locale->new()->languages();
is_deeply(
    [ sort @langs ],
    [qw( en fr it x-chiendent yi )],
    "All languages (instance)"
);

for my $args ( [], map { [ lang => $_ ] } @langs, 'zz' ) {
    my $meta = Acme::MetaSyntactic::test_ams_locale->new(@$args);
    my $lang = $args->[1] || 'fr';
    my ( $one, $four ) = ( 1, 4 );
    $lang = 'fr' if $lang eq 'zz';    # check fallback to default
    my @digits = $meta->name;
    is( $meta->lang, $lang, "lang() is $lang" );
    is( @digits, $one, "Single item ($one $lang)" );
    @digits = $meta->name(4);
    is( @digits, $four, "Four items ($four $lang)" );

    @digits = sort $meta->name(0);
    no warnings;
    my @all = sort @{ $Acme::MetaSyntactic::test_ams_locale::Locale{$lang} };
    is_deeply( \@digits, \@all, "All items ($lang)" );
}

# tests for the various language schemes
# by order of preference LANGUAGE > LANG > Win32::Locale
my $meta;

{
    # we don't need no Windows to test this
    local $INC{"Win32/Locale.pm"} = 1;
    local $^W = 0;
    *Win32::Locale::get_language = sub { 'it' };

    $^O   = 'MSWin32';
    $meta = Acme::MetaSyntactic::test_ams_locale->new;
}

is_deeply( [ sort $meta->name(0) ],
    [ sort @{ $Acme::MetaSyntactic::test_ams_locale::Locale{it} } ], "MSWin32" );

$ENV{LANG} = 'fr';
$meta = Acme::MetaSyntactic::test_ams_locale->new;
is_deeply( [ sort $meta->name(0) ],
    [ sort @{ $Acme::MetaSyntactic::test_ams_locale::Locale{fr} } ], "LANG fr" );

$ENV{LANGUAGE} = 'yi';
$meta = Acme::MetaSyntactic::test_ams_locale->new;
is_deeply( [ sort $meta->name(0) ],
    [ sort @{ $Acme::MetaSyntactic::test_ams_locale::Locale{yi} } ], "LANGUAGE yi" );

delete @ENV{qw( LANG LANGUAGE ) };

$ENV{LANG} = 'x-chiendent';
$meta = Acme::MetaSyntactic::test_ams_locale->new;
is_deeply( [ sort $meta->name(0) ],
    [ sort @{ $Acme::MetaSyntactic::test_ams_locale::Locale{'x-chiendent'} } ],
    "LANG x-chiendent" );

$ENV{LANGUAGE} = 'x-chiendent';
$meta = Acme::MetaSyntactic::test_ams_locale->new;
is_deeply( [ sort $meta->name(0) ],
    [ sort @{ $Acme::MetaSyntactic::test_ams_locale::Locale{'x-chiendent'} } ],
    "LANGUAGE x-chiendent" );

t/33locale_win32.t  view on Meta::CPAN

use Test::More;
use lib 't/lib';
use NoLang;
use File::Spec::Functions;

my $dir;
BEGIN { $dir = catdir qw( t lib ); }

use lib $dir;
use Acme::MetaSyntactic::test_ams_locale;

plan tests => 1;

# Windows or not, I do not care
unshift @INC, sub {
    my (undef, $file) = @_;

    if ($file eq 'Win32/Locale.pm') {
        my @code = ("0;");
        return sub { $_ = shift @code };
    }
};

$^O   = 'MSWin32';
$meta = Acme::MetaSyntactic::test_ams_locale->new;
is( $meta->lang, 'fr', "Correct default without Win32::Locale" );

t/50usecase.t  view on Meta::CPAN

use strict;
use Test::More;
use File::Spec::Functions;
use File::Glob;

my $dir;
BEGIN { $dir = catdir qw( t lib ); }
use lib $dir;

my @list_cases      = File::Glob::bsd_glob catfile(qw(t usecase_list*));
my @locale_fr_cases = File::Glob::bsd_glob catfile(qw(t usecase_locale_fr*));
my @locale_en_cases = File::Glob::bsd_glob catfile(qw(t usecase_locale_en*));
my @alias_cases     = File::Glob::bsd_glob catfile(qw(t usecase_alias*));

plan tests => 2
    * ( @list_cases + @locale_fr_cases + @locale_en_cases + @alias_cases );

LIST: {
    use Acme::MetaSyntactic::test_ams_list;
    my %items = map { $_ => 1 } @Acme::MetaSyntactic::test_ams_list::List;

    for (@list_cases) {
        my $result = `$^X "-I$dir" -Mstrict -w $_`;
        is( $? >> 8, 0, "$_ ran successfully" );
        ok( exists $items{$result},
            "'$result' is an item from the test_ams_list theme" );
    }
}

LOCALE: {
    use Acme::MetaSyntactic 'test_ams_locale';
    my %items_en = map { $_ => 1 } @{$Acme::MetaSyntactic::test_ams_locale::Locale{en}};
    my %items_fr = map { $_ => 1 } @{$Acme::MetaSyntactic::test_ams_locale::Locale{fr}};

    for (@locale_fr_cases) {
        my $result = `$^X "-I$dir" -MNoLang -Mstrict -w $_`;
        is( $? >> 8, 0, "$_ ran successfully" );
        ok( exists $items_fr{$result},
            "'$result' is an item from the test_ams_locale/fr theme" );
    }

    for (@locale_en_cases) {
        my $result = `$^X "-I$dir" -MNoLang -Mstrict -w $_`;
        is( $? >> 8, 0, "$_ ran successfully" );
        ok( exists $items_en{$result},
            "'$result' is an item from the test_ams_locale/en theme" );
    }
}

ALIAS: {
    use Acme::MetaSyntactic::test_ams_alias;
    my %items = map { $_ => 1 } Acme::MetaSyntactic::test_ams_alias->new( category => ':all' )->name( 0 );

    for (@alias_cases) {
        my $result = `$^X "-I$dir" -Mstrict -w $_`;
        is( $? >> 8, 0, "$_ ran successfully" );

t/lib/Acme/MetaSyntactic/test_ams_alias.pm  view on Meta::CPAN

package Acme::MetaSyntactic::test_ams_alias;
use Acme::MetaSyntactic::Alias;
our @ISA = qw( Acme::MetaSyntactic::Alias );
__PACKAGE__->init('test_ams_locale');
1;

t/lib/Acme/MetaSyntactic/test_ams_locale.pm  view on Meta::CPAN

package Acme::MetaSyntactic::test_ams_locale;
use strict;
use Acme::MetaSyntactic::Locale;
our @ISA = qw( Acme::MetaSyntactic::Locale );
__PACKAGE__->init();
1;

__DATA__
# default
fr
# names en

t/usecase_alias1  view on Meta::CPAN

use Acme::MetaSyntactic 'test_ams_locale';
print metatest_ams_locale();

t/usecase_locale_en3  view on Meta::CPAN

use Acme::MetaSyntactic::test_ams_locale;
my $h = Acme::MetaSyntactic::test_ams_locale->new( lang => 'en' );
print $h->name;

t/usecase_locale_en4  view on Meta::CPAN

use Acme::MetaSyntactic;
my $h = Acme::MetaSyntactic->new( 'test_ams_locale', lang => 'en' );
print $h->name;

t/usecase_locale_en5  view on Meta::CPAN

use Acme::MetaSyntactic;
my $h = Acme::MetaSyntactic->new( lang => 'en' );;
print $h->name( 'test_ams_locale' );

t/usecase_locale_fr1  view on Meta::CPAN

use Acme::MetaSyntactic 'test_ams_locale';
print metatest_ams_locale();

t/usecase_locale_fr2  view on Meta::CPAN

use Acme::MetaSyntactic::test_ams_locale;
print metatest_ams_locale();

t/usecase_locale_fr3  view on Meta::CPAN

use Acme::MetaSyntactic::test_ams_locale;
my $h = Acme::MetaSyntactic::test_ams_locale->new;
print $h->name;

t/usecase_locale_fr4  view on Meta::CPAN

use Acme::MetaSyntactic;
my $h = Acme::MetaSyntactic->new( 'test_ams_locale' );
print $h->name;

t/usecase_locale_fr5  view on Meta::CPAN

use Acme::MetaSyntactic;
my $h = Acme::MetaSyntactic->new;
print $h->name( 'test_ams_locale' );

t/usecase_locale_fr6  view on Meta::CPAN

use Acme::MetaSyntactic 'test_ams_locale';
print metaname();



( run in 1.671 second using v1.01-cache-2.11-cpan-5a3173703d6 )