1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/test/io/console/test_io_console.rb
nobu aba879a3f0 * test/io/console/test_io_console.rb (TestIO_Console#test_noctty):
dispose temporary file.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32155 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-06-17 22:34:07 +00:00

203 lines
4.3 KiB
Ruby

begin
require 'io/console'
require 'test/unit'
require 'pty'
rescue LoadError
end
class TestIO_Console < Test::Unit::TestCase
def test_raw
helper {|m, s|
s.print "abc\n"
assert_equal("abc\r\n", m.gets)
s.raw {
s.print "def\n"
assert_equal("def\n", m.gets)
}
s.print "ghi\n"
assert_equal("ghi\r\n", m.gets)
}
end
def test_echo
helper {|m, s|
assert(s.echo?)
m.print "a"
assert_equal("a", m.readpartial(10))
}
end
def test_noecho
helper {|m, s|
s.noecho {
assert(!s.echo?)
m.print "a"
sleep 0.1
}
m.print "b"
assert_equal("b", m.readpartial(10))
}
end
def test_noecho2
helper {|m, s|
assert(s.echo?)
m.print "a\n"
sleep 0.1
s.print "b\n"
sleep 0.1
assert_equal("a\r\nb\r\n", m.readpartial(10))
assert_equal("a\n", s.readpartial(10))
s.noecho {
assert(!s.echo?)
m.print "a\n"
s.print "b\n"
assert_equal("b\r\n", m.readpartial(10))
assert_equal("a\n", s.readpartial(10))
}
assert(s.echo?)
m.print "a\n"
sleep 0.1
s.print "b\n"
sleep 0.1
assert_equal("a\r\nb\r\n", m.readpartial(10))
assert_equal("a\n", s.readpartial(10))
}
end
def test_setecho
helper {|m, s|
assert(s.echo?)
s.echo = false
m.print "a"
sleep 0.1
s.echo = true
m.print "b"
assert_equal("b", m.readpartial(10))
}
end
def test_setecho2
helper {|m, s|
assert(s.echo?)
m.print "a\n"
sleep 0.1
s.print "b\n"
sleep 0.1
assert_equal("a\r\nb\r\n", m.readpartial(10))
assert_equal("a\n", s.readpartial(10))
s.echo = false
assert(!s.echo?)
m.print "a\n"
s.print "b\n"
assert_equal("b\r\n", m.readpartial(10))
assert_equal("a\n", s.readpartial(10))
s.echo = true
assert(s.echo?)
m.print "a\n"
sleep 0.1
s.print "b\n"
sleep 0.1
assert_equal("a\r\nb\r\n", m.readpartial(10))
assert_equal("a\n", s.readpartial(10))
}
end
def test_iflush
helper {|m, s|
m.print "a"
s.iflush
m.print "b\n"
assert_equal("b\n", s.readpartial(10))
}
end
def test_oflush
helper {|m, s|
s.print "a"
s.oflush # oflush may be issued after "a" is already sent.
s.print "b"
assert_include(["b", "ab"], m.readpartial(10))
}
end
def test_ioflush
helper {|m, s|
m.print "a"
s.ioflush
m.print "b\n"
assert_equal("b\n", s.readpartial(10))
}
end
def test_ioflush2
helper {|m, s|
s.print "a"
s.ioflush # ioflush may be issued after "a" is already sent.
s.print "b"
assert_include(["b", "ab"], m.readpartial(10))
}
end
def test_winsize
helper {|m, s|
begin
assert_equal([0, 0], s.winsize)
rescue Errno::EINVAL # OpenSolaris 2009.06 TIOCGWINSZ causes Errno::EINVAL before TIOCSWINSZ.
end
}
end
if IO.console
def test_sync
assert(IO.console.sync, "console should be unbuffered")
end
else
def test_sync
r, w, pid = PTY.spawn(EnvUtil.rubybin, "-rio/console", "-e", "p IO.console.class")
con = r.gets.chomp
Process.wait(pid)
assert_match("File", con)
end
end
private
def helper
m, s = PTY.open
rescue RuntimeError
skip $!
else
yield m, s
ensure
m.close if m
s.close if s
end
end if defined?(PTY) and defined?(IO::console)
class TestIO_Console < Test::Unit::TestCase
require_relative '../../ruby/envutil'
case
when Process.respond_to?(:daemon)
def test_noctty
assert_in_out_err(["-rio/console"],
"Process.daemon(true, true); p IO.console",
["nil"])
end
when !(rubyw = RbConfig::CONFIG["RUBYW_INSTALL_NAME"]).empty?
require 'tempfile'
dir, base = File.split(EnvUtil.rubybin)
RUBYW = File.join(dir, base.sub(/ruby/, rubyw))
def test_noctty
t = Tempfile.new("console")
t.close
cmd = [RUBYW, '-rio/console', '-e', 'STDOUT.reopen(ARGV[0]); p IO.console', '--', t.path]
system(*cmd)
t.open
assert_equal("nil", t.gets.chomp)
ensure
t.close! if t and !t.closed?
end
end
end if defined?(IO.console)