#!perl use warnings; use strict; use Test::More tests => 12; BEGIN{ use_ok('Ruby') } use Ruby -class => 'GC', -eval => <<'EOT'; class MyObject def initialize() @foo = 1; end def foo() @foo end def foo=(arg) @foo = arg end def bar() true; end end EOT my $o = MyObject->new; is($o->foo, 1, "read"); $o->foo = 0xFF; is($o->foo, 0xFF, "write"); $o->foo = 'foo'; is($o->foo, "foo"); $o->foo = 1; $o->foo++; is($o->foo, 2, "incr"); $o->foo *= 2; is($o->foo, 4, "mul with assig"); for(1 .. 100){ GC->start; $o->foo++; } is($o->foo, 104, "incr with GC->start"); $o->foo = true; is_deeply($o->foo, true, "store Ruby object"); is($o->bar, true); eval{ $o->bar = false; }; ok $rb_errinfo->kind_of('NoMethodError'), '$obj->unwritable = $value; -> raise NoMethodError'; is($o->bar, true); pass "test end";