* io.c (rb_open_file): encoding in mode string was ignored if perm is
[ruby-svn.git] / bootstraptest / test_io.rb
blobc0b906fb4d90457703b9aefdbadad1a9bb8530d2
1 assert_finish 5, %q{
2   r, w = IO.pipe
3   t1 = Thread.new { r.sysread(1) }
4   t2 = Thread.new { r.sysread(1) }
5   sleep 0.1
6   w.write "a"
7   sleep 0.1
8   w.write "a"
9 }, '[ruby-dev:31866]'
11 assert_finish 10, %q{
12   begin
13     require "io/nonblock"
14     r, w = IO.pipe
15     w.nonblock = true
16     w.write_nonblock("a" * 100000)
17     w.nonblock = false
18     t1 = Thread.new { w.write("b" * 4096) }
19     t2 = Thread.new { w.write("c" * 4096) }
20     sleep 0.5
21     r.sysread(4096).length
22     sleep 0.5
23     r.sysread(4096).length
24     t1.join
25     t2.join
26   rescue LoadError
27   end
28 }, '[ruby-dev:32566]'
30 assert_finish 1, %q{
31   r, w = IO.pipe
32   Thread.new {
33   w << "ab"
34   sleep 0.1
35   w << "ab"
36   }
37   r.gets("abab")
40 assert_equal 'ok', %q{
41   require 'tmpdir'
42   begin
43     tmpname = "#{Dir.tmpdir}/ruby-btest-#{$$}-#{rand(0x100000000).to_s(36)}"
44     rw = File.open(tmpname, File::RDWR|File::CREAT|File::EXCL)
45   rescue Errno::EEXIST
46     retry
47   end
48   save = STDIN.dup
49   STDIN.reopen(rw)
50   STDIN.reopen(save)
51   rw.close
52   File.unlink(tmpname)
53   :ok
56 assert_equal 'ok', %q{
57   require 'tmpdir'
58   begin
59     tmpname = "#{Dir.tmpdir}/ruby-btest-#{$$}-#{rand(0x100000000).to_s(36)}"
60     rw = File.open(tmpname, File::RDWR|File::CREAT|File::EXCL)
61   rescue Errno::EEXIST
62     retry
63   end
64   save = STDIN.dup
65   STDIN.reopen(rw)
66   STDIN.print "a"
67   STDIN.reopen(save)
68   rw.close
69   File.unlink(tmpname)
70   :ok
73 assert_normal_exit %q{
74   ARGF.set_encoding "foo"
77 50.times do
78   assert_normal_exit %q{
79     at_exit { p :foo }
81     megacontent = "abc" * 12345678
82     File.open("megasrc", "w") {|f| f << megacontent }
84     Thread.new { sleep rand*0.2; Process.kill(:INT, $$) }
86     r1, w1 = IO.pipe
87     r2, w2 = IO.pipe
88     t1 = Thread.new { w1 << megacontent; w1.close }
89     t2 = Thread.new { r2.read }
90     IO.copy_stream(r1, w2) rescue nil
91     r2.close; w2.close
92     r1.close; w1.close
93   }, '', ["INT"] or break
94 end