* 2022-01-18 [ci skip]
[ruby-80x24.org.git] / bootstraptest / test_io.rb
blob89c00d0b88f35f56c53a9a44d815a8d7ffed35fe
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.01 until t1.stop? and t2.stop?
6   w.write "a"
7   w.write "a"
8 }, '[ruby-dev:31866]'
10 assert_finish 10, %q{
11   begin
12     require "io/nonblock"
13     require "timeout"
14     timeout(3) do
15       r, w = IO.pipe
16       w.nonblock?
17       w.nonblock = true
18       w.write_nonblock("a" * 100000)
19       w.nonblock = false
20       t1 = Thread.new { w.write("b" * 4096) }
21       t2 = Thread.new { w.write("c" * 4096) }
22       sleep 0.5
23       r.sysread(4096).length
24       sleep 0.5
25       r.sysread(4096).length
26       t1.join
27       t2.join
28     end
29   rescue LoadError, Timeout::Error, NotImplementedError
30   end
31 }, '[ruby-dev:32566]'
33 assert_finish 1, %q{
34   r, w = IO.pipe
35   Thread.new {
36     w << "ab"
37     sleep 0.01
38     w << "ab"
39   }
40   r.gets("abab")
43 assert_equal 'ok', %q{
44   require 'tmpdir'
45   begin
46     tmpname = "#{Dir.tmpdir}/ruby-btest-#{$$}-#{rand(0x100000000).to_s(36)}"
47     rw = File.open(tmpname, File::RDWR|File::CREAT|File::EXCL)
48   rescue Errno::EEXIST
49     retry
50   end
51   save = STDIN.dup
52   STDIN.reopen(rw)
53   STDIN.reopen(save)
54   rw.close
55   File.unlink(tmpname)
56   :ok
59 assert_equal 'ok', %q{
60   require 'tmpdir'
61   begin
62     tmpname = "#{Dir.tmpdir}/ruby-btest-#{$$}-#{rand(0x100000000).to_s(36)}"
63     rw = File.open(tmpname, File::RDWR|File::CREAT|File::EXCL)
64   rescue Errno::EEXIST
65     retry
66   end
67   save = STDIN.dup
68   STDIN.reopen(rw)
69   STDIN.print "a"
70   STDIN.reopen(save)
71   rw.close
72   File.unlink(tmpname)
73   :ok
76 assert_equal 'ok', %q{
77   dup = STDIN.dup
78   dupfd = dup.fileno
79   dupfd == STDIN.dup.fileno ? :ng : :ok
80 }, '[ruby-dev:46834]'
82 assert_normal_exit %q{
83   ARGF.set_encoding "foo"
86 10.times do
87   assert_normal_exit %q{
88     at_exit { p :foo }
90     megacontent = "abc" * 12345678
91     #File.open("megasrc", "w") {|f| f << megacontent }
93     t0 = Thread.main
94     Thread.new { sleep 0.001 until t0.stop?; Process.kill(:INT, $$) }
96     r1, w1 = IO.pipe
97     r2, w2 = IO.pipe
98     t1 = Thread.new { w1 << megacontent; w1.close }
99     t2 = Thread.new { r2.read; r2.close }
100     IO.copy_stream(r1, w2) rescue nil
101     w2.close
102     r1.close
103     t1.join
104     t2.join
105   }, 'megacontent-copy_stream', ["INT"], :timeout => 10 or break
108 assert_normal_exit %q{
109   r, w = IO.pipe
110   STDOUT.reopen(w)
111   STDOUT.reopen(__FILE__, "r")
112 }, '[ruby-dev:38131]'