The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use Test::More;
use Acme::MetaSyntactic;
use lib 't/lib';
use NoLang;
use File::Spec::Functions;
my $dir;
BEGIN { $dir = catdir qw( t lib ); }
use lib $dir;

plan tests => 11;

LIST: {
    my $meta = Acme::MetaSyntactic->new('test_ams_list');
    my %seen;

    my @names = $meta->name;
    is( scalar @names, 1, "name() returned a single item" );

    push @names, $meta->name(3);
    is( scalar @names, 4, "name( 3 ) returned three more items" );

    $seen{$_}++ for @names;
    is_deeply(
        \%seen,
        { John => 1, Paul => 1, George => 1, Ringo => 1 },
        "Got the whole list"
    );
}

NOTEXIST: {
    my $meta = Acme::MetaSyntactic->new('test_ams_nonexistent');

    my @names = eval { $meta->name };
    like(
        $@,
        qr/Metasyntactic list test_ams_nonexistent does not exist!/,
        "Non-existent theme"
    );
}

MORE: {
    my $meta = Acme::MetaSyntactic->new('test_ams_list');
    my %seen;

    my %test;
    @test{ qw( John Paul George Ringo ) } = (1) x 4;

    my @names;
    push @names, $meta->name( 5 );
    is( scalar @names, 5, "name() returned five items out of 4" );

    $test{$names[-1]}++;

    $seen{$_}++ for @names;
    is_deeply( \%seen, \%test, "Got one item twice" );
}

ZERO: {
    my $meta = Acme::MetaSyntactic->new( 'test_ams_list' );
    my @names = sort $meta->name( 0 );

    no warnings;
    my @all   = sort @Acme::MetaSyntactic::test_ams_list::List;

    is_deeply( \@names, \@all, "name(0) returns the whole list" );

    my $count = $meta->name( 0 );
    is( $count, scalar @all, "name(0) is scalar context returns the count" );
}

DEFAULT: {
    my $meta = Acme::MetaSyntactic->new();

    no warnings;
    my @names = $meta->name;
    my %seen = map { $_ => 0 } @{$Acme::MetaSyntactic::foo::MultiList{en}};
    ok( exists $seen{$names[0]}, "From the default list" );

    %seen = map { $_ => 1 } $meta->name( test_ams_list => 4 );
    is_deeply(
        \%seen,
        { John => 1, Paul => 1, George => 1, Ringo => 1 },
        "Got the whole list"
    );

    @names = $meta->name( 'foo/fr' );
    %seen = map { $_ => 0 } @{$Acme::MetaSyntactic::foo::MultiList{fr}};
    ok( exists $seen{$names[0]}, "using name() with a category" );
}