#!/usr/bin/perl
use strict;
use warnings;
use Test::More tests => 10;
BEGIN { use_ok("VS::RuleEngine::TypeDecl"); }
require VS::RuleEngine::Engine;
my $obj = bless {}, "Foo";
my $type = VS::RuleEngine::TypeDecl->new($obj);
isa_ok($type, "VS::RuleEngine::TypeDecl");
ok($obj == $type->instantiate);
{
package A;
sub new {
my ($pkg, @args) = @_;
::is($pkg, "A");
::is(@args, 0);
return bless {}, $pkg;
}
}
$type = VS::RuleEngine::TypeDecl->new("A");
$obj = $type->instantiate();
isa_ok($obj, "A");
{
package B;
sub new {
my ($pkg, @args) = @_;
::is(@args, 2);
::is_deeply([@args], [qw(foo baz)]);
return bless {}, $pkg;
}
}
$type = VS::RuleEngine::TypeDecl->new("B", [], "foo", "baz");
$obj = $type->instantiate();
{
package C;
sub new {
my ($pkg, %args) = @_;
::is_deeply(\%args, { foo => 1, bar => 2 });
}
}
my $e = VS::RuleEngine::Engine->new();
$e->add_defaults(d1 => { foo => 1 });
$type = VS::RuleEngine::TypeDecl->new("C", "d1", bar => 2);
$obj = $type->instantiate($e);
$type = VS::RuleEngine::TypeDecl->new("C", [qw(d1)], bar => 2);
$obj = $type->instantiate($e);