The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -T

use Test::More tests => 9;

my $class;
BEGIN {
    $class = 'JavaScript::Framework::jQuery'; 
	use_ok( $class );
}

my $jquery;


eval {
    $jquery = $class->new();
};
like($@, qr/\QAttribute (library) is required/, 'raise exception for empty argument list');

eval {
    $jquery = $class->new(
        library => 'flintstone',
    );
};
like($@,
    qr/\QAttribute (library) does not pass the type constraint because: Validation failed for 'JavaScript::Framework::jQuery::Subtypes::libraryAssets' failed with value flintstone/,
    'raise exception to violation of type constraint');

$jquery = $class->new(
    library => {
        src => [ 'js/jquery.min.js' ],
        css => [
            { href => 'theme/ui.all.css', media => 'screen' },
        ],
    }
);
isa_ok($jquery, $class);

eval {
    $jquery = $class->new(
        library => {
            src => [ 'js/jquery.min.js' ],
            css => [
                { href => 'theme/ui.all.css', media => 'screen' },
            ],
        },
        plugins => [
            {
                name => 'mcDonalds',
                library => {
                    src => [ '/js/jquery.mcdropdown.js', '/js/jquery.bgiframe.js' ],
                    css => [ { href => '/css/jquery.mcdropdown.css', media => 'all' } ],
                },
            },
        ],
    );
};
like($@,
    qr/\QUnknown plugin cannot be configured: JavaScript::Framework::jQuery::Plugin::mcDonalds/,
    'raise exception for non-existent plugin type');

$jquery = $class->new(
    library => {
        src => [ 'js/jquery.min.js' ],
        css => [
        { href => 'theme/ui.all.css', media => 'screen' },
        ],
    },
    plugins => [
        {
            name => 'mcDropdown',
            library => {
                src => [ '/js/jquery.mcdropdown.js', '/js/jquery.bgiframe.js' ],
                css => [ { href => '/css/jquery.mcdropdown.css', media => 'all' } ],
            },
        },
    ],
);
isa_ok($jquery, $class);

eval {
    $jquery->config_plugin(
        name => 'mcDropdown',
    );
};
like($@,
    qr/'library' parameter is required unless 'no_library' parameter is passed with a true value/,
    "exception when 'library' param omitted and 'no_library' not true");

eval {
    $jquery->config_plugin(
        name => 'mcDropdown',
        no_library => 1,
        library => {
            src => [ '' ],
            css => [
            { href => '', media => '' }
            ]
        },
    );
};
like($@,
    qr/'no_library' is true but a 'library' parameter was passed with a true value/,
    "exception when 'library' param passed and 'no_library' parameter is passed with a true value");

eval {
    $jquery->config_plugin(
        name => 'mcDropdown',
        no_library => 1,
    );
};
is($@, '', "no exception when 'no_library' true");