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

ruby-changes:12573

From: nobu <ko1@a...>
Date: Sun, 26 Jul 2009 18:38:08 +0900 (JST)
Subject: [ruby-changes:12573] Ruby:r24282 (ruby_1_8): * test/ruby/test_argf.rb: partially backported from the trunk.

nobu	2009-07-26 18:37:55 +0900 (Sun, 26 Jul 2009)

  New Revision: 24282

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

  Log:
    * test/ruby/test_argf.rb: partially backported from the trunk.

  Added files:
    branches/ruby_1_8/test/ruby/test_argf.rb

Index: ruby_1_8/test/ruby/test_argf.rb
===================================================================
--- ruby_1_8/test/ruby/test_argf.rb	(revision 0)
+++ ruby_1_8/test/ruby/test_argf.rb	(revision 24282)
@@ -0,0 +1,474 @@
+require 'test/unit'
+require 'tmpdir'
+require 'tempfile'
+require File.expand_path('../envutil', __FILE__)
+
+class TestArgf < Test::Unit::TestCase
+  def setup
+    @t1 = Tempfile.new("foo")
+    @t1.binmode
+    @t1.puts "1"
+    @t1.puts "2"
+    @t1.close
+    @t2 = Tempfile.new("bar")
+    @t2.binmode
+    @t2.puts "3"
+    @t2.puts "4"
+    @t2.close
+    @t3 = Tempfile.new("baz")
+    @t3.binmode
+    @t3.puts "5"
+    @t3.puts "6"
+    @t3.close
+    @tmps = [@t1, @t2, @t3]
+  end
+
+  def teardown
+    @tmps.each {|t|
+      bak = t.path + ".bak"
+      File.unlink bak if File.file? bak
+    }
+  end
+
+  def make_tempfile
+    t = Tempfile.new("foo")
+    t.puts "foo"
+    t.puts "bar"
+    t.puts "baz"
+    t.close
+    @tmps << t
+    t
+  end
+
+  def ruby(*args)
+    args = ['-e', '$>.write($<.read)'] if args.empty?
+    ruby = EnvUtil.rubybin
+    f = IO.popen(([ruby] + args).map {|s| "'#{s}'"}.join(' '), 'r+')
+    yield(f)
+  ensure
+    f.close unless !f || f.closed?
+  end
+
+  def no_safe_rename
+    /cygwin|mswin|mingw|bccwin/ =~ RUBY_PLATFORM
+  end
+
+  def test_argf
+    src = <<-SRC
+      a = ARGF
+      p [a.gets.chomp, a.lineno] #=> ["1", 1]
+      p [a.gets.chomp, a.lineno] #=> ["2", 2]
+      a.rewind
+      p [a.gets.chomp, a.lineno] #=> ["1", 1]
+      p [a.gets.chomp, a.lineno] #=> ["2", 2]
+      p [a.gets.chomp, a.lineno] #=> ["3", 3]
+      p [a.gets.chomp, a.lineno] #=> ["4", 4]
+      p [a.gets.chomp, a.lineno] #=> ["5", 5]
+      a.rewind
+      p [a.gets.chomp, a.lineno] #=> ["5", 5]
+      p [a.gets.chomp, a.lineno] #=> ["6", 6]
+    SRC
+    expected = src.scan(/\#=> *(.+)/).flatten
+    ruby('-e', src, @t1.path, @t2.path, @t3.path) do |f|
+      f.each_with_index do |a, i|
+        assert_equal(expected.shift, a.chomp, "[ruby-dev:34445]: line #{i}")
+      end
+
+      assert_equal([], expected, "[ruby-dev:34445]: remained")
+
+      # is this test OK? [ruby-dev:34445]
+    end
+  end
+
+  def test_lineno
+    src = <<-SRC
+      a = ARGF
+      a.gets; p $.  #=> 1
+      a.gets; p $.  #=> 2
+      a.gets; p $.  #=> 3
+      a.rewind; p $.  #=> 3
+      a.gets; p $.  #=> 3
+      a.gets; p $.  #=> 4
+      a.rewind; p $.  #=> 4
+      a.gets; p $.  #=> 3
+      a.lineno = 1000; p $.  #=> 1000
+      a.gets; p $.  #=> 1001
+      a.gets; p $.  #=> 1002
+      $. = 2000
+      a.gets; p $.  #=> 2001
+      a.gets; p $.  #=> 2001
+    SRC
+    expected = src.scan(/\#=> *(.+)/).join(",")
+    ruby('-e', src, @t1.path, @t2.path, @t3.path) do |f|
+      assert_equal(expected, f.read.chomp.gsub("\n", ","))
+    end
+  end
+
+  def test_tell
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      begin
+        ARGF.binmode
+        loop do
+          p ARGF.tell
+          p ARGF.gets
+        end
+      rescue ArgumentError
+        puts "end"
+      end
+    SRC
+      a = f.read.split("\n")
+      [0, 2, 4, 2, 4, 2, 4].map {|i| i.to_s }.
+      zip((1..6).map {|i| '"' + i.to_s + '\n"' } + ["nil"]).flatten.
+      each do |x|
+        assert_equal(x, a.shift)
+      end
+      assert_equal('end', a.shift)
+    end
+  end
+
+  def test_seek
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      ARGF.seek(4)
+      p ARGF.gets #=> "3"
+      ARGF.seek(0, IO::SEEK_END)
+      p ARGF.gets #=> "5"
+      ARGF.seek(4)
+      p ARGF.gets #=> nil
+      begin
+        ARGF.seek(0)
+      rescue
+        puts "end"
+      end
+    SRC
+      a = f.read.split("\n")
+      assert_equal('"3\n"', a.shift)
+      assert_equal('"5\n"', a.shift)
+      assert_equal('nil', a.shift)
+      assert_equal('end', a.shift)
+    end
+  end
+
+  def test_set_pos
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      ARGF.pos = 4
+      p ARGF.gets #=> "3"
+      ARGF.pos = 4
+      p ARGF.gets #=> "5"
+      ARGF.pos = 4
+      p ARGF.gets #=> nil
+      begin
+        ARGF.pos = 4
+      rescue
+        puts "end"
+      end
+    SRC
+      a = f.read.split("\n")
+      assert_equal('"3\n"', a.shift)
+      assert_equal('"5\n"', a.shift)
+      assert_equal('nil', a.shift)
+      assert_equal('end', a.shift)
+    end
+  end
+
+  def test_rewind
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      ARGF.pos = 4
+      ARGF.rewind
+      p ARGF.gets #=> "1"
+      ARGF.pos = 4
+      p ARGF.gets #=> "3"
+      ARGF.pos = 4
+      p ARGF.gets #=> "5"
+      ARGF.pos = 4
+      p ARGF.gets #=> nil
+      begin
+        ARGF.rewind
+      rescue
+        puts "end"
+      end
+    SRC
+      a = f.read.split("\n")
+      assert_equal('"1\n"', a.shift)
+      assert_equal('"3\n"', a.shift)
+      assert_equal('"5\n"', a.shift)
+      assert_equal('nil', a.shift)
+      assert_equal('end', a.shift)
+    end
+  end
+
+  def test_fileno
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      p ARGF.fileno
+      ARGF.gets
+      ARGF.gets
+      p ARGF.fileno
+      ARGF.gets
+      ARGF.gets
+      p ARGF.fileno
+      ARGF.gets
+      ARGF.gets
+      p ARGF.fileno
+      ARGF.gets
+      begin
+        ARGF.fileno
+      rescue
+        puts "end"
+      end
+    SRC
+      a = f.read.split("\n")
+      fd1, fd2, fd3, fd4, tag = a
+      assert_match(/^\d+$/, fd1)
+      assert_match(/^\d+$/, fd2)
+      assert_match(/^\d+$/, fd3)
+      assert_match(/^\d+$/, fd4)
+      assert_equal('end', tag)
+    end
+  end
+
+  def test_to_io
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      8.times do
+        p ARGF.to_io
+        ARGF.gets
+      end
+    SRC
+      a = f.read.split("\n")
+      f11, f12, f13, f21, f22, f31, f32, f4 = a
+      assert_equal(f11, f12)
+      assert_equal(f11, f13)
+      assert_equal(f21, f22)
+      assert_equal(f31, f32)
+      assert_match(/\(closed\)/, f4)
+      f4.sub!(/ \(closed\)/, "")
+      assert_equal(f31, f4)
+    end
+  end
+
+  def test_eof
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      begin
+        8.times do
+          p ARGF.eof?
+          ARGF.gets
+        end
+      rescue IOError
+        puts "end"
+      end
+    SRC
+      a = f.read.split("\n")
+      (%w(false) + (%w(false true) * 3) + %w(end)).each do |x|
+        assert_equal(x, a.shift)
+      end
+    end
+  end
+
+  def test_read
+    ruby('-e', "p ARGF.read(8)", @t1.path, @t2.path, @t3.path) do |f|
+      assert_equal("\"1\\n2\\n3\\n4\\n\"\n", f.read)
+    end
+  end
+
+  def test_read2
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      s = ""
+      ARGF.read(8, s)
+      p s
+    SRC
+      assert_equal("\"1\\n2\\n3\\n4\\n\"\n", f.read)
+    end
+  end
+
+  def test_read3
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      nil while ARGF.gets
+      p ARGF.read
+      p ARGF.read(0, "")
+    SRC
+      assert_equal("nil\n\"\"\n", f.read)
+    end
+  end
+
+  def test_getc
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      s = ""
+      while c = ARGF.getc
+        s << c
+      end
+      puts s
+    SRC
+      assert_equal("1\n2\n3\n4\n5\n6\n", f.read)
+    end
+  end
+
+  def test_getbyte
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      s = []
+      while c = ARGF.getbyte
+        s << c
+      end
+      p s
+    SRC
+      assert_equal("[49, 10, 50, 10, 51, 10, 52, 10, 53, 10, 54, 10]\n", f.read)
+    end
+  end
+
+  def test_readchar
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      s = ""
+      begin
+        while c = ARGF.readchar
+          s << c
+        end
+      rescue EOFError
+        puts s
+      end
+    SRC
+      assert_equal("1\n2\n3\n4\n5\n6\n", f.read)
+    end
+  end
+
+  def test_readbyte
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      begin
+        s = []
+        while c = ARGF.readbyte
+          s << c
+        end
+      rescue EOFError
+        p s
+      end
+    SRC
+      assert_equal("[49, 10, 50, 10, 51, 10, 52, 10, 53, 10, 54, 10]\n", f.read)
+    end
+  end
+
+  def test_each_line
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      s = []
+      ARGF.each_line {|l| s << l }
+      p s
+    SRC
+      assert_equal("[\"1\\n\", \"2\\n\", \"3\\n\", \"4\\n\", \"5\\n\", \"6\\n\"]\n", f.read)
+    end
+  end
+
+  def test_each_byte
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      s = []
+      ARGF.each_byte {|c| s << c }
+      p s
+    SRC
+      assert_equal("[49, 10, 50, 10, 51, 10, 52, 10, 53, 10, 54, 10]\n", f.read)
+    end
+  end
+
+  def test_each_char
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      s = ""
+      ARGF.each_char {|c| s << c }
+      puts s
+    SRC
+      assert_equal("1\n2\n3\n4\n5\n6\n", f.read)
+    end
+  end
+
+  def test_filename
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      begin
+        puts ARGF.filename.dump
+      end while ARGF.gets
+      puts ARGF.filename.dump
+    SRC
+      a = f.read.split("\n")
+      assert_equal(@t1.path.dump, a.shift)
+      assert_equal(@t1.path.dump, a.shift)
+      assert_equal(@t1.path.dump, a.shift)
+      assert_equal(@t2.path.dump, a.shift)
+      assert_equal(@t2.path.dump, a.shift)
+      assert_equal(@t3.path.dump, a.shift)
+      assert_equal(@t3.path.dump, a.shift)
+      assert_equal(@t3.path.dump, a.shift)
+    end
+  end
+
+  def test_filename2
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      ARGF.eof?
+      begin
+        puts $FILENAME.dump
+      end while ARGF.gets
+      puts $FILENAME.dump
+    SRC
+      a = f.read.split("\n")
+      assert_equal(@t1.path.dump, a.shift)
+      assert_equal(@t1.path.dump, a.shift)
+      assert_equal(@t1.path.dump, a.shift)
+      assert_equal(@t2.path.dump, a.shift)
+      assert_equal(@t2.path.dump, a.shift)
+      assert_equal(@t3.path.dump, a.shift)
+      assert_equal(@t3.path.dump, a.shift)
+      assert_equal(@t3.path.dump, a.shift)
+    end
+  end
+
+  def test_file
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      begin
+        puts ARGF.file.path.dump
+      end while ARGF.gets
+      puts ARGF.file.path.dump
+    SRC
+      a = f.read.split("\n")
+      assert_equal(@t1.path.dump, a.shift)
+      assert_equal(@t1.path.dump, a.shift)
+      assert_equal(@t1.path.dump, a.shift)
+      assert_equal(@t2.path.dump, a.shift)
+      assert_equal(@t2.path.dump, a.shift)
+      assert_equal(@t3.path.dump, a.shift)
+      assert_equal(@t3.path.dump, a.shift)
+      assert_equal(@t3.path.dump, a.shift)
+    end
+  end
+
+  def test_binmode
+    ruby('-e', "ARGF.binmode; STDOUT.binmode; puts ARGF.read", @t1.path, @t2.path, @t3.path) do |f|
+      f.binmode
+      assert_equal("1\n2\n3\n4\n5\n6\n", f.read)
+    end
+  end
+
+  def test_skip
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      ARGF.skip
+      puts ARGF.gets
+      ARGF.skip
+      puts ARGF.read
+    SRC
+      assert_equal("1\n3\n4\n5\n6\n", f.read)
+    end
+  end
+
+  def test_close
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      ARGF.close
+      puts ARGF.read
+    SRC
+      assert_equal("3\n4\n5\n6\n", f.read)
+    end
+  end
+
+  def test_closed
+    ruby('-e', <<-SRC, @t1.path, @t2.path, @t3.path) do |f|
+      3.times do
+        p ARGF.closed?
+        ARGF.gets
+        ARGF.gets
+      end
+      p ARGF.closed?
+      ARGF.gets
+      p ARGF.closed?
+    SRC
+      assert_equal("false\nfalse\nfalse\nfalse\ntrue\n", f.read)
+    end
+  end
+end

Property changes on: ruby_1_8/test/ruby/test_argf.rb
___________________________________________________________________
Name: svn:eol-style
   + LF
Name: svn:keywords
   + Author Id Revision


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

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