summaryrefslogtreecommitdiff
path: root/ruby_1_8_6/test/readline/test_readline.rb
diff options
context:
space:
mode:
Diffstat (limited to 'ruby_1_8_6/test/readline/test_readline.rb')
-rw-r--r--ruby_1_8_6/test/readline/test_readline.rb84
1 files changed, 84 insertions, 0 deletions
diff --git a/ruby_1_8_6/test/readline/test_readline.rb b/ruby_1_8_6/test/readline/test_readline.rb
new file mode 100644
index 0000000000..edc3aa09b9
--- /dev/null
+++ b/ruby_1_8_6/test/readline/test_readline.rb
@@ -0,0 +1,84 @@
+begin
+ require "readline"
+rescue LoadError
+end
+
+if defined?(Readline) && !/EditLine/n.match(Readline::VERSION)
+
+require "test/unit"
+require "tempfile"
+
+class TestReadline < Test::Unit::TestCase
+ def test_readline
+ stdin = Tempfile.new("test_readline_stdin")
+ stdout = Tempfile.new("test_readline_stdout")
+ begin
+ stdin.write("hello\n")
+ stdin.close
+ stdout.close
+ line = replace_stdio(stdin.path, stdout.path) {
+ Readline.readline("> ", true)
+ }
+ assert_equal("hello", line)
+ assert_equal(true, line.tainted?)
+ stdout.open
+ assert_equal("> ", stdout.read(2))
+ assert_equal(1, Readline::HISTORY.length)
+ assert_equal("hello", Readline::HISTORY[0])
+ assert_raises(SecurityError) do
+ Thread.start {
+ $SAFE = 1
+ replace_stdio(stdin.path, stdout.path) do
+ Readline.readline("> ".taint)
+ end
+ }.join
+ end
+ assert_raises(SecurityError) do
+ Thread.start {
+ $SAFE = 4
+ replace_stdio(stdin.path, stdout.path) { Readline.readline("> ") }
+ }.join
+ end
+ ensure
+ stdin.close(true)
+ stdout.close(true)
+ end
+ end
+
+ def test_completion_append_character
+ begin
+ Readline.completion_append_character = "x"
+ assert_equal("x", Readline.completion_append_character)
+ Readline.completion_append_character = "xyz"
+ assert_equal("x", Readline.completion_append_character)
+ Readline.completion_append_character = nil
+ assert_equal(nil, Readline.completion_append_character)
+ Readline.completion_append_character = ""
+ assert_equal(nil, Readline.completion_append_character)
+ rescue NotImplementedError
+ end
+ end
+
+ private
+
+ def replace_stdio(stdin_path, stdout_path)
+ open(stdin_path, "r"){|stdin|
+ open(stdout_path, "w"){|stdout|
+ orig_stdin = STDIN.dup
+ orig_stdout = STDOUT.dup
+ STDIN.reopen(stdin)
+ STDOUT.reopen(stdout)
+ begin
+ yield
+ ensure
+ STDIN.reopen(orig_stdin)
+ STDOUT.reopen(orig_stdout)
+ orig_stdin.close
+ orig_stdout.close
+ end
+ }
+ }
+ end
+end
+
+end