use strict;
use warnings;
use Test::More 'no_plan';
use Test::Exception;
BEGIN { use_ok('WebCoso::Resource'); }
my $r=WebCoso::Resource->new();
isa_ok($r,'WebCoso::Resource');
is_deeply([$r->get_axes()],[],'no axes');
$r->set_property(prop1=>'value1');
is($r->get_property('prop1'),'value1','simple global');
is($r->get_property({},'prop1'),'value1','explicit global');
is($r->get_property({a1=>1,a2=>3},'prop1'),'value1','over global');
is_deeply([$r->get_axes()],[],'no axes');
$r->set_property(prop1=>'value2');
is($r->get_property('prop1'),'value2','simple global redef');
is($r->get_property({},'prop1'),'value2','explicit global redef');
is($r->get_property({a1=>1,a2=>3},'prop1'),'value2','over global redef');
is_deeply([$r->get_axes()],[],'no axes');
$r->set_property({},prop1=>'value3');
is($r->get_property('prop1'),'value3','simple global redef');
is($r->get_property({},'prop1'),'value3','explicit global redef');
is($r->get_property({a1=>1,a2=>3},'prop1'),'value3','over global redef');
is_deeply([$r->get_axes()],[],'no axes');
$r->set_property({a1=>3},prop2=>'v1');
ok(! defined $r->get_property('prop2'),'undef on generalization');
is($r->get_property({a1=>3},'prop2'),'v1','specific');
is($r->get_property({a1=>3,a2=>3},'prop2'),'v1','over specific');
is_deeply([$r->get_axes()],['a1'],'1 axis');
is_deeply([$r->get_axis_values('a1')],[3],'1 axis, 1 value');
$r->set_property({a1=>2},prop2=>'v2');
ok(! defined $r->get_property('prop2'),'undef on generalization');
is($r->get_property({a1=>3},'prop2'),'v1','specific, oldval');
is($r->get_property({a1=>3,a2=>3},'prop2'),'v1','over specific, oldval');
is($r->get_property({a1=>2},'prop2'),'v2','specific, newval');
is($r->get_property({a1=>2,a2=>3},'prop2'),'v2','over specific, newval');
is_deeply([$r->get_axes()],['a1'],'1 axis');
is_deeply([sort $r->get_axis_values('a1')],[2,3],'1 axis, 2 values');
$r->set_property({a1=>1,a2=>2},prop3=>'vx');
ok(! defined $r->get_property({a1=>1},'prop3'),'undef on generalization, 2');
is_deeply([sort $r->get_axes()],['a1','a2'],'2 axes');
is_deeply([sort $r->get_axis_values('a1')],[1,2,3],'1st axis, 3 values');
is_deeply([sort $r->get_axis_values('a2')],[2],'2nd axis, 1 value');
$r=WebCoso::Resource->new();
{
open my $fh,'<',__FILE__;
$r->set_property(fh=>$fh);
}
{
my $fh=$r->get_property_fh('fh');
is((scalar <$fh>),"#!/usr/bin/perl\n",'legge fh');
}
{
my $content=$r->get_property_string('fh');
like($content,qr{^#!/usr/bin/perl\n},'legge string');
}
$r->set_property(fh=>
sub {
open my $fh,'<',__FILE__;
return $fh;
});
{
my $fh=$r->get_property_fh('fh');
is((scalar <$fh>),"#!/usr/bin/perl\n",'legge fh lazy');
}
{
my $content=$r->get_property_string('fh');
like($content,qr{^#!/usr/bin/perl\n},'legge string lazy');
}