use Test; BEGIN { plan tests => 11 } use Data::Dumper; require Inline::denter; use Inline Ruby; ok(1); # Depending on whether FLATTEN_CALLBACK_ARGS is defined or not, array refs may # be flattened on their way to the Perl iterators. To enable passing the tests # anyway, we'll just make sure to check for that here: my %results = ( 0 => [1, "2", [3], {4 => 5}], 1 => [1, "2", 3, {4 => 5}], ); my $obj = new Iterator(1, "2", [3], {4 => 5}); my $n; sub my_iter { my $element = shift; print "It looks like Ruby passed me this: ", Dumper($element); my $got = Inline::denter->new->indent($element); my $exp = Inline::denter->new->indent( $results{Inline::Ruby::config_var("FLATTEN_CALLBACK_ARGS")}[$n++] ); print Dumper $got, $exp; ok($got, $exp); } $n = 0; $obj->iter(\&my_iter)->each; $n = 0; $obj->iter(\&my_iter)->each_proc; # We WANT this to fail: eval { $obj->each(); }; ok($@->type, 'LocalJumpError'); ok($@->message, 'no block given'); print "NOTE: $@\n"; __END__ __Ruby__ class Iterator def initialize(*elements) @elements = elements end def each @elements.each { |x| yield x } end def each_proc(&pr) @elements.each { |x| pr.call(x) } end end