summaryrefslogtreecommitdiffstats
path: root/test/readline
diff options
context:
space:
mode:
authorshugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-11-18 06:12:12 +0000
committershugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-11-18 06:12:12 +0000
commit6dbd9680c233f6b373150ba9ddc992a19886bdef (patch)
treebff7d59f24d838d88a6c9e4fb5dbeef3bc40c5d4 /test/readline
parent97412a0a1a76e1716a37364e4da5267dbd7f0455 (diff)
downloadruby-6dbd9680c233f6b373150ba9ddc992a19886bdef.tar.gz
ruby-6dbd9680c233f6b373150ba9ddc992a19886bdef.tar.xz
ruby-6dbd9680c233f6b373150ba9ddc992a19886bdef.zip
* ext/readline/readline.c: check $SAFE.
* test/readline/test_readline.rb: added tests for readline. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@7309 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/readline')
-rw-r--r--test/readline/test_readline.rb57
1 files changed, 57 insertions, 0 deletions
diff --git a/test/readline/test_readline.rb b/test/readline/test_readline.rb
new file mode 100644
index 000000000..f41f3584c
--- /dev/null
+++ b/test/readline/test_readline.rb
@@ -0,0 +1,57 @@
+begin
+ require "readline"
+rescue LoadError
+end
+
+if defined?(Readline)
+
+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.rewind
+ line = replace_stdio(stdin, stdout) { Readline.readline("> ") }
+ assert_equal("hello", line)
+ assert_equal(true, line.tainted?)
+ assert_raises(SecurityError) do
+ Thread.start {
+ $SAFE = 1
+ replace_stdio(stdin, stdout) { Readline.readline("> ".taint) }
+ }.join
+ end
+ assert_raises(SecurityError) do
+ Thread.start {
+ $SAFE = 4
+ replace_stdio(stdin, stdout) { Readline.readline("> ") }
+ }.join
+ end
+ stdout.rewind
+ assert_equal("> ", stdout.read(2))
+ ensure
+ stdin.close(true)
+ stdout.close(true)
+ end
+ end
+
+ private
+
+ def replace_stdio(stdin, 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)
+ end
+ end
+end
+
+end