[前][次][番号順一覧][スレッド一覧]

ruby-changes:6744

From: mame <ko1@a...>
Date: Tue, 29 Jul 2008 22:56:43 +0900 (JST)
Subject: [ruby-changes:6744] Ruby:r18260 (trunk): * test/ruby/test_io.rb (pipe): run reader thread and writer thread.

mame	2008-07-29 22:56:24 +0900 (Tue, 29 Jul 2008)

  New Revision: 18260

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=18260

  Log:
    * test/ruby/test_io.rb (pipe): run reader thread and writer thread.

  Modified files:
    trunk/ChangeLog
    trunk/test/ruby/test_io.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 18259)
+++ ChangeLog	(revision 18260)
@@ -1,3 +1,7 @@
+Tue Jul 29 22:55:34 2008  Yusuke Endoh  <mame@t...>
+
+	* test/ruby/test_io.rb (pipe): run reader thread and writer thread.
+
 Tue Jul 29 21:38:08 2008  Yusuke Endoh  <mame@t...>
 
 	* ext/bigdecimal/bigdecimal.c (Init_bigdecimal): fix typo.
Index: test/ruby/test_io.rb
===================================================================
--- test/ruby/test_io.rb	(revision 18259)
+++ test/ruby/test_io.rb	(revision 18260)
@@ -557,14 +557,16 @@
     end.join
   end
 
-  def pipe
+  def pipe(wp, rp)
     r, w = IO.pipe
-    Timeout.timeout(10) do
-      yield(r, w)
-    end
+    rt = Thread.new { rp.call(r) }
+    wt = Thread.new { wp.call(w) }
+    flunk("timeout") unless rt.join(10) && wt.join(10)
   ensure
     r.close unless !r || r.closed?
     w.close unless !w || w.closed?
+    (rt.kill; rt.join) if rt
+    (wt.kill; wt.join) if wt
   end
 
   def pipe2(&b)
@@ -594,16 +596,20 @@
   end
 
   def test_ungetc2
-    pipe do |r, w|
-      r.ungetc("0" * 10000)
+    f = false
+    pipe(proc do |w|
+      0 until f
       w.write("1" * 10000)
       w.close
+    end, proc do |r|
+      r.ungetc("0" * 10000)
+      f = true
       assert_equal("0" * 10000 + "1" * 10000, r.read)
-    end
+    end)
   end
 
   def test_write_non_writable
-    pipe do |r, w|
+    with_pipe do |r, w|
       assert_raise(IOError) do
         r.write "foobarbaz"
       end
@@ -629,7 +635,7 @@
   end
 
   def test_inspect
-    pipe do |r, w|
+    with_pipe do |r, w|
       assert(r.inspect =~ /^#<IO:0x[0-9a-f]+>$/)
       assert_raise(SecurityError) do
         safe_4 { r.inspect }
@@ -638,18 +644,19 @@
   end
 
   def test_readpartial
-    pipe do |r, w|
+    pipe(proc do |w|
       w.write "foobarbaz"
       w.close
+    end, proc do |r|
       assert_raise(ArgumentError) { r.readpartial(-1) }
       assert_equal("fooba", r.readpartial(5))
       r.readpartial(5, s = "")
       assert_equal("rbaz", s)
-    end
+    end)
   end
 
   def test_readpartial_error
-    pipe do |r, w|
+    with_pipe do |r, w|
       s = ""
       t = Thread.new { r.readpartial(5, s) }
       0 until s.size == 5
@@ -661,18 +668,19 @@
   end
 
   def test_read
-    pipe do |r, w|
+    pipe(proc do |w|
       w.write "foobarbaz"
       w.close
+    end, proc do |r|
       assert_raise(ArgumentError) { r.read(-1) }
       assert_equal("fooba", r.read(5))
       r.read(nil, s = "")
       assert_equal("rbaz", s)
-    end
+    end)
   end
 
   def test_read_error
-    pipe do |r, w|
+    with_pipe do |r, w|
       s = ""
       t = Thread.new { r.read(5, s) }
       0 until s.size == 5
@@ -684,20 +692,22 @@
   end
 
   def test_write_nonblock
-    pipe do |r, w|
+    pipe(proc do |w|
       w.write_nonblock(1)
       w.close
+    end, proc do |r|
       assert_equal("1", r.read)
-    end
+    end)
   end
 
   def test_gets
-    pipe do |r, w|
+    pipe(proc do |w|
       w.write "foobarbaz"
       w.close
+    end, proc do |r|
       assert_equal("", r.gets(0))
-      assert_equal("foobarbaz", r.gets(9))
-    end
+      assert_equal("foobarbaz", s = r.gets(9))
+    end)
   end
 
   def test_close_read
@@ -709,14 +719,14 @@
   end
 
   def test_close_read_pipe
-    pipe do |r, w|
+    with_pipe do |r, w|
       r.close_read
       assert_raise(Errno::EPIPE) { w.write "foobarbaz" }
     end
   end
 
   def test_close_read_security_error
-    pipe do |r, w|
+    with_pipe do |r, w|
       assert_raise(SecurityError) do
         safe_4 { r.close_read }
       end
@@ -724,7 +734,7 @@
   end
 
   def test_close_read_non_readable
-    pipe do |r, w|
+    with_pipe do |r, w|
       assert_raise(IOError) do
         w.close_read
       end
@@ -740,7 +750,7 @@
   end
 
   def test_close_write_security_error
-    pipe do |r, w|
+    with_pipe do |r, w|
       assert_raise(SecurityError) do
         safe_4 { r.close_write }
       end
@@ -748,7 +758,7 @@
   end
 
   def test_close_write_non_readable
-    pipe do |r, w|
+    with_pipe do |r, w|
       assert_raise(IOError) do
         r.close_write
       end
@@ -802,111 +812,119 @@
       assert_equal("nil,1,2,2,1001,1001,1001,1,2,3,3", f.read.chomp.gsub("\n", ","))
     end
 
-    pipe do |r, w|
+    pipe(proc do |w|
       w.puts "foo"
       w.puts "bar"
       w.puts "baz"
       w.close
+    end, proc do |r|
       r.gets; assert_equal(1, $.)
       r.gets; assert_equal(2, $.)
       r.lineno = 1000; assert_equal(2, $.)
       r.gets; assert_equal(1001, $.)
       r.gets; assert_equal(1001, $.)
-    end
+    end)
   end
 
   def test_readline
-    pipe do |r, w|
+    pipe(proc do |w|
       w.puts "foo"
       w.puts "bar"
       w.puts "baz"
       w.close
+    end, proc do |r|
       r.readline; assert_equal(1, $.)
       r.readline; assert_equal(2, $.)
       r.lineno = 1000; assert_equal(2, $.)
       r.readline; assert_equal(1001, $.)
       assert_raise(EOFError) { r.readline }
-    end
+    end)
   end
 
   def test_each_char
-    pipe do |r, w|
+    pipe(proc do |w|
       w.puts "foo"
       w.puts "bar"
       w.puts "baz"
       w.close
+    end, proc do |r|
       a = []
       r.each_char {|c| a << c }
       assert_equal(%w(f o o) + ["\n"] + %w(b a r) + ["\n"] + %w(b a z) + ["\n"], a)
-    end
+    end)
   end
 
   def test_lines
-    pipe do |r, w|
+    pipe(proc do |w|
       w.puts "foo"
       w.puts "bar"
       w.puts "baz"
       w.close
+    end, proc do |r|
       e = r.lines
       assert_equal("foo\n", e.next)
       assert_equal("bar\n", e.next)
       assert_equal("baz\n", e.next)
       assert_raise(StopIteration) { e.next }
-    end
+    end)
   end
 
   def test_bytes
-    pipe do |r, w|
+    pipe(proc do |w|
       w.puts "foo"
       w.puts "bar"
       w.puts "baz"
       w.close
+    end, proc do |r|
       e = r.bytes
       (%w(f o o) + ["\n"] + %w(b a r) + ["\n"] + %w(b a z) + ["\n"]).each do |c|
         assert_equal(c.ord, e.next)
       end
       assert_raise(StopIteration) { e.next }
-    end
+    end)
   end
 
   def test_chars
-    pipe do |r, w|
+    pipe(proc do |w|
       w.puts "foo"
       w.puts "bar"
       w.puts "baz"
       w.close
+    end, proc do |r|
       e = r.chars
       (%w(f o o) + ["\n"] + %w(b a r) + ["\n"] + %w(b a z) + ["\n"]).each do |c|
         assert_equal(c, e.next)
       end
       assert_raise(StopIteration) { e.next }
-    end
+    end)
   end
 
   def test_readbyte
-    pipe do |r, w|
+    pipe(proc do |w|
       w.puts "foo"
       w.puts "bar"
       w.puts "baz"
       w.close
+    end, proc do |r|
       (%w(f o o) + ["\n"] + %w(b a r) + ["\n"] + %w(b a z) + ["\n"]).each do |c|
         assert_equal(c.ord, r.readbyte)
       end
       assert_raise(EOFError) { r.readbyte }
-    end
+    end)
   end
 
   def test_readchar
-    pipe do |r, w|
+    pipe(proc do |w|
       w.puts "foo"
       w.puts "bar"
       w.puts "baz"
       w.close
+    end, proc do |r|
       (%w(f o o) + ["\n"] + %w(b a r) + ["\n"] + %w(b a z) + ["\n"]).each do |c|
         assert_equal(c, r.readchar)
       end
       assert_raise(EOFError) { r.readchar }
-    end
+    end)
   end
 
   def test_close_on_exec
@@ -919,7 +937,7 @@
       assert_equal(false, f.close_on_exec?)
     end
 
-    pipe do |r, w|
+    with_pipe do |r, w|
       assert_equal(false, r.close_on_exec?)
       r.close_on_exec = true
       assert_equal(true, r.close_on_exec?)
@@ -935,7 +953,7 @@
   end
 
   def test_close_security_error
-    pipe do |r, w|
+    with_pipe do |r, w|
       assert_raise(SecurityError) do
         safe_4 { r.close }
       end
@@ -1034,7 +1052,7 @@
   def test_reopen
     t = make_tempfile
 
-    pipe do |r, w|
+    with_pipe do |r, w|
       assert_raise(SecurityError) do
         safe_4 { r.reopen(t.path) }
       end
@@ -1070,11 +1088,12 @@
   end
 
   def test_printf
-    pipe do |r, w|
+    pipe(proc do |w|
       printf(w, "foo %s baz\n", "bar")
       w.close_write
+    end, proc do |r|
       assert_equal("foo bar baz\n", r.read)
-    end
+    end)
   end
 
   def test_print
@@ -1084,13 +1103,14 @@
   end
 
   def test_putc
-    pipe do |r, w|
+    pipe(proc do |w|
       w.putc "A"
       w.putc "BC"
       w.putc 68
       w.close_write
+    end, proc do |r|
       assert_equal("ABD", r.read)
-    end
+    end)
 
     assert_in_out_err([], "putc 65", %w(A), [])
   end
@@ -1098,19 +1118,21 @@
   def test_puts_recursive_array
     a = ["foo"]
     a << a
-    pipe do |r, w|
+    pipe(proc do |w|
       w.puts a
       w.close
+    end, proc do |r|
       assert_equal("foo\n[...]\n", r.read)
-    end
+    end)
   end
 
   def test_display
-    pipe do |r, w|
+    pipe(proc do |w|
       "foo".display(w)
       w.close
+    end, proc do |r|
       assert_equal("foo", r.read)
-    end
+    end)
 
     assert_in_out_err([], "'foo'.display", %w(foo), [])
   end
@@ -1132,7 +1154,7 @@
 
     assert_equal("foo\nbar\nbaz\n", File.read(t.path))
 
-    pipe do |r, w|
+    with_pipe do |r, w|
       assert_raise(RuntimeError) do
         o = Object.new
         class << o; self; end.instance_eval do
@@ -1142,16 +1164,18 @@
       end
     end
 
-    pipe do |r, w|
-      r, w = IO.new(r), IO.new(w)
+    pipe(proc do |w|
+      w = IO.new(w)
       w.puts "foo"
       w.puts "bar"
       w.puts "baz"
       w.close
+    end, proc do |r|
+      r = IO.new(r)
       assert_equal("foo\nbar\nbaz\n", r.read)
-    end
+    end)
 
-    pipe do |r, w|
+    with_pipe do |r, w|
       assert_raise(ArgumentError) { IO.new(r, "r+") }
     end
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]