#!/usr/bin/perl
# This is a copy of 01hash_basic.t, but using use module { ... }
use strict;
use warnings;
use Test::More tests => 35;
BEGIN { use_ok('Class::XSAccessor') };
package Foo;
use Class::XSAccessor {
getters => {
get_foo => 'foo',
get_bar => 'bar',
},
};
package main;
BEGIN {pass();}
package Foo;
use Class::XSAccessor {
replace => 1,
getters => {
get_foo => 'foo',
get_bar => 'bar',
},
};
package main;
BEGIN {pass();}
ok( Foo->can('get_foo') );
ok( Foo->can('get_bar') );
my $foo = bless {foo => 'a', bar => 'b'} => 'Foo';
ok($foo->get_foo() eq 'a');
ok($foo->get_bar() eq 'b');
package Foo;
use Class::XSAccessor {
setters => {
set_foo => 'foo',
set_bar => 'bar',
},
};
package main;
BEGIN{pass()}
ok( Foo->can('set_foo') );
ok( Foo->can('set_bar') );
$foo->set_foo('1');
pass();
$foo->set_bar('2');
pass();
ok($foo->get_foo() eq '1');
ok($foo->get_bar() eq '2');
# Make sure scalars are copied and not stored by reference (RT 38573)
my $x = 1;
$foo->set_foo($x);
$x++;
is( $foo->get_foo(), 1, 'scalar copied properly' );
# test that multiple methods can point to the same attr.
package Foo;
use Class::XSAccessor {
getters => {
get_FOO => 'foo',
},
setters => {
set_FOO => 'foo',
},
};
# test shorthand syntax
package Foo;
use Class::XSAccessor {
getters => 'barfle',
setters => {set_barfle => 'barfle'},
};
use Class::XSAccessor {
getters => [qw/a b/],
setters => 'c',
};
package main;
BEGIN{pass()}
ok( Foo->can('get_foo') );
ok( Foo->can('get_bar') );
my $FOO = bless {
foo => 'a', bar => 'c',
barfle => 'works',
a => 'a1',
b => 'b1',
c => 'c1',
} => 'Foo';
ok( $FOO->can('get_FOO') );
ok( $FOO->can('set_FOO') );
ok($FOO->get_FOO() eq 'a');
ok($FOO->get_foo() eq 'a');
$FOO->set_FOO('b');
ok($FOO->get_FOO() eq 'b');
ok($FOO->get_foo() eq 'b');
# tests for shorthand
foreach my $name (qw(barfle a b c)) {
ok($FOO->can($name));
}
is($FOO->a(), 'a1');
is($FOO->b(), 'b1');
$FOO->c("1c");
is($FOO->{c}, '1c');
$FOO->{a} = '1a';
$FOO->{b} = '1b';
is($FOO->a(), '1a');
is($FOO->b(), '1b');
is($FOO->barfle(), 'works');
$FOO->set_barfle("elfrab");
is($FOO->barfle(), "elfrab");