summaryrefslogtreecommitdiff
path: root/trunk/test/readline/test_readline.rb
diff options
context:
space:
mode:
authoryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-25 15:02:05 +0000
committeryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-25 15:02:05 +0000
commit0dc342de848a642ecce8db697b8fecd83a63e117 (patch)
tree2b7ed4724aff1f86073e4740134bda9c4aac1a39 /trunk/test/readline/test_readline.rb
parentef70cf7138ab8034b5b806f466e4b484b24f0f88 (diff)
added tag v1_9_0_4
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_9_0_4@18845 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'trunk/test/readline/test_readline.rb')
-rw-r--r--trunk/test/readline/test_readline.rb233
1 files changed, 233 insertions, 0 deletions
diff --git a/trunk/test/readline/test_readline.rb b/trunk/test/readline/test_readline.rb
new file mode 100644
index 0000000000..071accf68b
--- /dev/null
+++ b/trunk/test/readline/test_readline.rb
@@ -0,0 +1,233 @@
+begin
+ require "readline"
+=begin
+ class << Readline
+ [
+ "vi_editing_mode",
+ "emacs_editing_mode",
+ "completion_append_character=",
+ "completion_append_character",
+ "basic_word_break_characters=",
+ "basic_word_break_characters",
+ "completer_word_break_characters=",
+ "completer_word_break_characters",
+ "basic_quote_characters=",
+ "basic_quote_characters",
+ "completer_quote_characters=",
+ "completer_quote_characters",
+ "filename_quote_characters=",
+ "filename_quote_characters",
+ ].each do |method_name|
+ define_method(method_name.to_sym) do |*args|
+ raise NotImplementedError
+ end
+ end
+ end
+=end
+rescue LoadError
+else
+ require "test/unit"
+ require "tempfile"
+end
+
+class TestReadline < Test::Unit::TestCase
+ def teardown
+ Readline.instance_variable_set("@completion_proc", nil)
+ end
+
+ def test_safe_level_4
+ method_args =
+ [
+ ["readline"],
+ ["input=", $stdin],
+ ["output=", $stdout],
+ ["completion_proc=", proc {}],
+ ["completion_proc"],
+ ["completion_case_fold=", true],
+ ["completion_case_fold"],
+ ["vi_editing_mode"],
+ ["vi_editing_mode?"],
+ ["emacs_editing_mode"],
+ ["emacs_editing_mode?"],
+ ["completion_append_character=", "s"],
+ ["completion_append_character"],
+ ["basic_word_break_characters=", "s"],
+ ["basic_word_break_characters"],
+ ["completer_word_break_characters=", "s"],
+ ["completer_word_break_characters"],
+ ["basic_quote_characters=", "\\"],
+ ["basic_quote_characters"],
+ ["completer_quote_characters=", "\\"],
+ ["completer_quote_characters"],
+ ["filename_quote_characters=", "\\"],
+ ["filename_quote_characters"],
+ ]
+ method_args.each do |method_name, *args|
+ assert_raises(SecurityError, NotImplementedError,
+ "method=<#{method_name}>") do
+ Thread.start {
+ $SAFE = 4
+ Readline.send(method_name.to_sym, *args)
+ assert(true)
+ }.join
+ end
+ end
+ end
+
+ 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 if !/EditLine/n.match(Readline::VERSION)
+
+ def test_input=
+ assert_raise(TypeError) do
+ Readline.input = "This is not a file."
+ end
+ end
+
+ def test_output=
+ assert_raise(TypeError) do
+ Readline.output = "This is not a file."
+ end
+ end
+
+ def test_completion_proc
+ expected = proc { |input| input }
+ Readline.completion_proc = expected
+ assert_equal(expected, Readline.completion_proc)
+
+ assert_raise(ArgumentError) do
+ Readline.completion_proc = "This does not have call method."
+ end
+ end
+
+ def test_completion_case_fold
+ expected = [true, false, "string", {"a" => "b"}]
+ expected.each do |e|
+ Readline.completion_case_fold = e
+ assert_equal(e, Readline.completion_case_fold)
+ end
+ end
+
+ # vi_editing_mode
+ # emacs_editing_mode
+ def test_editing_mode
+ begin
+ assert_equal(false, Readline.vi_editing_mode?)
+ assert_equal(true, Readline.emacs_editing_mode?)
+
+ assert_equal(nil, Readline.vi_editing_mode)
+ assert_equal(true, Readline.vi_editing_mode?)
+ assert_equal(false, Readline.emacs_editing_mode?)
+ assert_equal(nil, Readline.vi_editing_mode)
+ assert_equal(true, Readline.vi_editing_mode?)
+ assert_equal(false, Readline.emacs_editing_mode?)
+
+ assert_equal(nil, Readline.emacs_editing_mode)
+ assert_equal(false, Readline.vi_editing_mode?)
+ assert_equal(true, Readline.emacs_editing_mode?)
+ assert_equal(nil, Readline.emacs_editing_mode)
+ assert_equal(false, Readline.vi_editing_mode?)
+ assert_equal(true, Readline.emacs_editing_mode?)
+ rescue NotImplementedError
+ 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
+
+ # basic_word_break_characters
+ # completer_word_break_characters
+ # basic_quote_characters
+ # completer_quote_characters
+ # filename_quote_characters
+ def test_some_characters_methods
+ method_names = [
+ "basic_word_break_characters",
+ "completer_word_break_characters",
+ "basic_quote_characters",
+ "completer_quote_characters",
+ "filename_quote_characters",
+ ]
+ method_names.each do |method_name|
+ begin
+ begin
+ saved = Readline.send(method_name.to_sym)
+ expecteds = [" ", " .,|\t", ""]
+ expecteds.each do |e|
+ Readline.send((method_name + "=").to_sym, e)
+ assert_equal(e, Readline.send(method_name.to_sym))
+ end
+ ensure
+ Readline.send((method_name + "=").to_sym, saved) if saved
+ end
+ rescue NotImplementedError
+ end
+ 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
+ Readline.input = STDIN
+ Readline.output = STDOUT
+ yield
+ ensure
+ STDIN.reopen(orig_stdin)
+ STDOUT.reopen(orig_stdout)
+ orig_stdin.close
+ orig_stdout.close
+ end
+ }
+ }
+ end
+end if defined?(::Readline)