2011-01-23 09:03:24 -05:00
|
|
|
begin
|
|
|
|
require 'io/console'
|
|
|
|
require 'pty'
|
|
|
|
require 'test/unit'
|
|
|
|
rescue LoadError
|
|
|
|
end
|
2010-05-12 10:15:30 -04:00
|
|
|
|
|
|
|
class TestIO_Console < Test::Unit::TestCase
|
|
|
|
def test_raw
|
2010-09-17 03:52:21 -04:00
|
|
|
helper {|m, s|
|
2010-05-12 10:15:30 -04:00
|
|
|
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
|
|
|
|
|
2010-07-03 10:29:26 -04:00
|
|
|
def test_echo
|
2010-09-17 03:52:21 -04:00
|
|
|
helper {|m, s|
|
2010-07-03 10:29:26 -04:00
|
|
|
assert(s.echo?)
|
|
|
|
m.print "a"
|
|
|
|
assert_equal("a", m.readpartial(10))
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
2010-05-12 10:15:30 -04:00
|
|
|
def test_noecho
|
2010-09-17 03:52:21 -04:00
|
|
|
helper {|m, s|
|
2010-07-03 10:29:26 -04:00
|
|
|
s.noecho {
|
|
|
|
assert(!s.echo?)
|
|
|
|
m.print "a"
|
|
|
|
sleep 0.1
|
|
|
|
}
|
|
|
|
m.print "b"
|
|
|
|
assert_equal("b", m.readpartial(10))
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_noecho2
|
2010-09-17 03:52:21 -04:00
|
|
|
helper {|m, s|
|
2010-05-12 10:15:30 -04:00
|
|
|
assert(s.echo?)
|
|
|
|
m.print "a\n"
|
2010-06-11 12:14:15 -04:00
|
|
|
sleep 0.1
|
2010-05-12 10:15:30 -04:00
|
|
|
s.print "b\n"
|
2010-06-11 12:14:15 -04:00
|
|
|
sleep 0.1
|
2010-05-12 10:15:30 -04:00
|
|
|
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"
|
2010-06-11 12:14:15 -04:00
|
|
|
sleep 0.1
|
2010-05-12 10:15:30 -04:00
|
|
|
s.print "b\n"
|
2010-06-11 12:14:15 -04:00
|
|
|
sleep 0.1
|
2010-05-12 10:15:30 -04:00
|
|
|
assert_equal("a\r\nb\r\n", m.readpartial(10))
|
|
|
|
assert_equal("a\n", s.readpartial(10))
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_setecho
|
2010-09-17 03:52:21 -04:00
|
|
|
helper {|m, s|
|
2010-07-03 10:29:26 -04:00
|
|
|
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
|
2010-09-17 03:52:21 -04:00
|
|
|
helper {|m, s|
|
2010-05-12 10:15:30 -04:00
|
|
|
assert(s.echo?)
|
|
|
|
m.print "a\n"
|
2010-06-11 12:14:15 -04:00
|
|
|
sleep 0.1
|
2010-05-12 10:15:30 -04:00
|
|
|
s.print "b\n"
|
2010-06-11 12:14:15 -04:00
|
|
|
sleep 0.1
|
2010-05-12 10:15:30 -04:00
|
|
|
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"
|
2010-06-11 12:14:15 -04:00
|
|
|
sleep 0.1
|
2010-05-12 10:15:30 -04:00
|
|
|
s.print "b\n"
|
2010-06-11 12:14:15 -04:00
|
|
|
sleep 0.1
|
2010-05-12 10:15:30 -04:00
|
|
|
assert_equal("a\r\nb\r\n", m.readpartial(10))
|
|
|
|
assert_equal("a\n", s.readpartial(10))
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_iflush
|
2010-09-17 03:52:21 -04:00
|
|
|
helper {|m, s|
|
2010-07-03 10:29:26 -04:00
|
|
|
m.print "a"
|
2010-05-12 10:15:30 -04:00
|
|
|
s.iflush
|
|
|
|
m.print "b\n"
|
|
|
|
assert_equal("b\n", s.readpartial(10))
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
2010-05-13 05:45:29 -04:00
|
|
|
def test_oflush
|
2010-09-17 03:52:21 -04:00
|
|
|
helper {|m, s|
|
2010-07-03 10:29:26 -04:00
|
|
|
s.print "a"
|
|
|
|
s.oflush # oflush may be issued after "a" is already sent.
|
|
|
|
s.print "b"
|
2011-02-12 09:17:54 -05:00
|
|
|
assert_include(["b", "ab"], m.readpartial(10))
|
2010-05-13 05:45:29 -04:00
|
|
|
}
|
|
|
|
end
|
|
|
|
|
2010-07-03 10:29:26 -04:00
|
|
|
def test_ioflush
|
2010-09-17 03:52:21 -04:00
|
|
|
helper {|m, s|
|
2010-07-03 10:29:26 -04:00
|
|
|
m.print "a"
|
|
|
|
s.ioflush
|
|
|
|
m.print "b\n"
|
|
|
|
assert_equal("b\n", s.readpartial(10))
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_ioflush2
|
2010-09-17 03:52:21 -04:00
|
|
|
helper {|m, s|
|
2010-07-03 10:29:26 -04:00
|
|
|
s.print "a"
|
|
|
|
s.ioflush # ioflush may be issued after "a" is already sent.
|
|
|
|
s.print "b"
|
2011-02-12 09:17:54 -05:00
|
|
|
assert_include(["b", "ab"], m.readpartial(10))
|
2010-07-03 10:29:26 -04:00
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_winsize
|
2010-09-17 03:52:21 -04:00
|
|
|
helper {|m, s|
|
2010-07-03 11:44:12 -04:00
|
|
|
begin
|
|
|
|
assert_equal([0, 0], s.winsize)
|
|
|
|
rescue Errno::EINVAL # OpenSolaris 2009.06 TIOCGWINSZ causes Errno::EINVAL before TIOCSWINSZ.
|
|
|
|
end
|
2010-07-03 10:29:26 -04:00
|
|
|
}
|
|
|
|
end
|
2010-09-17 03:52:21 -04:00
|
|
|
|
2011-06-13 10:33:36 -04:00
|
|
|
def test_sync
|
|
|
|
assert(helper {IO.console.sync}, "console should be unbuffered")
|
|
|
|
end
|
|
|
|
|
2010-09-17 03:52:21 -04:00
|
|
|
private
|
|
|
|
def helper
|
|
|
|
m, s = PTY.open
|
|
|
|
rescue RuntimeError
|
|
|
|
skip $!
|
|
|
|
else
|
|
|
|
yield m, s
|
|
|
|
ensure
|
|
|
|
m.close if m
|
|
|
|
s.close if s
|
|
|
|
end
|
2011-01-23 09:03:24 -05:00
|
|
|
end if defined?(PTY) and defined?(IO::console)
|
2011-06-13 10:28:53 -04:00
|
|
|
|
|
|
|
class TestIO_Console < Test::Unit::TestCase
|
|
|
|
require_relative '../../ruby/envutil'
|
|
|
|
|
|
|
|
def test_noctty
|
|
|
|
assert_in_out_err(["-rio/console"],
|
|
|
|
"Process.daemon(true, true); p IO.console",
|
|
|
|
["nil"])
|
|
|
|
end
|
|
|
|
end if defined?(Process.daemon) and defined?(IO::console)
|