#!perl use warnings; use strict; use Test::More tests => 43; BEGIN{ use_ok('Ruby') } use IO::Handle; use SelectSaver; { my $s = ''; open my($sfh), ">:scalar", \$s; my $ss = SelectSaver->new($sfh); $sfh->autoflush; puts 'foo'; is $s, "foo\n", "puts() to the default filehandle"; puts 'bar'; is $s, "foo\nbar\n"; close $sfh; $s = ''; open $sfh, ">:scalar", \$s; p "foo"; is $s, qq{"foo"\n}, "p() to the default filehandle"; } no warnings 'io'; rb_eval <<'EOT', __PACKAGE__, __FILE__, 0; ok defined?(Perl::STDIN), "defined? STDIN"; ok defined?(Perl::STDOUT), "defined? STDOUT"; ok defined?(Perl::STDERR), "defined? STDERR"; is STDIN.fileno, Perl::STDIN.fileno, "stdin fileno"; is STDOUT.fileno, Perl::STDOUT.fileno, "stdout fileno"; is STDERR.fileno, Perl::STDERR.fileno, "stderr fileno"; io = Perl.open('foo', 'w+', 0666); ok(io, "Perl.open"); ok(!io.closed?, "closed?"); ok(io.path, 'foo', "Perl::IO path"); io.binmode(:raw); begin io.binmode('UnknownLayer'); rescue is $!.class, ArgumentError, "binmode UnknownLayer"; end is io.pos, 0, "pos"; is io.tell, 0, "tell"; io.putc(?f); io.putc(?o); io.putc(?o); io.putc("\n"); io.puts("bar"); is io.pos, 8, "pos"; io.rewind; is(io.gets, "foo\n", "putc/puts/rewind/gets"); is(io.gets, "bar\n"); io.seek(0, IO::SEEK_SET); is(io.pos, 0, "seek/pos"); io.each { |line| ok line, "each"; } io.pos = 0; is(io.pos, 0, "pos="); io.rewind; is(io.read(), "foo\nbar\n", "read all"); io.rewind; is(io.readline, "foo\n", "readline"); is(io.read(), "bar\n", "read remain"); ok io.eof?, "eof?"; ok(!io.closed?, "closed?"); rubyio = io.to_io; is rubyio.class, IO, "to_io"; rubyio.close; io.close; ok(io.closed?, "close/closed?"); Perl.open("foo", "<:crlf") do |io| a = io.readlines; is a.length, 2, "open BLOCK/readlines"; is a[0], "foo\n", "readlines[0]"; is a[1], "bar\n", "readlines[1]"; ok a[0].tainted?, "tainted?"; io.rewind; is io.read(2), "fo", "read(size)"; is io.getc, ?o, "getc"; io.ungetc(?o); is io.getc, ?o, "ungetc"; begin while(line = io.readline) ; end rescue is $!.class, EOFError, "End of file reached"; end end ok io.closed?, "open BLOCK; autoclose"; io = Perl.open("foo", "r+"); io.truncate(0); io.seek(0, IO::SEEK_END); is io.pos, 0, "truncate"; ok io.read.nil?, "read empty file"; io.close; begin Perl.open("foobar", "<"); rescue is $!.class, Errno::ENOENT, "no such file or directory"; end GC.start; File.unlink("foo"); EOT END{ pass "test end"; }