view release on metacpan or search on metacpan
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).
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();