From 1f9ee467c88db366a57d7d6c08acb3b9782c2535 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 8 Mar 2011 14:40:33 +0000 Subject: * test/misc/test_ruby_mode.rb: test for ruby-mode.el. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31069 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/misc/test_ruby_mode.rb | 136 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 test/misc/test_ruby_mode.rb (limited to 'test/misc') diff --git a/test/misc/test_ruby_mode.rb b/test/misc/test_ruby_mode.rb new file mode 100644 index 0000000000..64786b3408 --- /dev/null +++ b/test/misc/test_ruby_mode.rb @@ -0,0 +1,136 @@ +require 'test/unit' +require 'tempfile' +require 'mkmf' + +class TestRubyMode < Test::Unit::TestCase + MISCDIR = File.expand_path("../../../misc", __FILE__) + if emacs = find_executable0(ENV["EMACS"] || "emacs") + EMACS = %W"#{emacs} --quick --batch --load #{MISCDIR}/ruby-mode.el" + else + EMACS = nil + end +end + +class TestRubyMode + EVAL_OPT = "--eval" + EXPR_SAVE = "(save-buffer)" + EXPR_RUBYMODE = "(ruby-mode)" + EXPR_NOBACKUP = "(progn" \ + " (set (make-local-variable \'backup-inhibited) t)" \ + " (set-buffer-modified-p t)" \ + ")" + + def run_emacs(src, *exprs) + tmp = Tempfile.new(%w"ruby-mode.test. .rb") + tmp.puts(src) + tmp.close + exprs = exprs.map {|expr| [EVAL_OPT, expr]}.flatten + exprs.unshift(EVAL_OPT, EXPR_RUBYMODE) + exprs.unshift(EVAL_OPT, EXPR_NOBACKUP) + output = IO.popen([*EMACS, tmp.path, *exprs, err:[:child, :out]], "r") {|e| e.read} + tmp.open + result = tmp.read + tmp.close! + return result, output + end + + class TestIndent < self + EXPR_INDENT = "(indent-region (point-min) (point-max))" + + def assert_indent(expected, source, *message) + if space = expected[/\A\n?(\s*\|)/, 1] + space = /^#{Regexp.quote(space)}/m + expected.gsub!(space, '') + source.gsub!(space, '') + end + result, output = run_emacs(source, EXPR_INDENT, EXPR_SAVE) + assert_match(/^Wrote /, output) + assert_equal(expected, result, *message) + end + + def test_simple + assert_indent(' + |if foo + | bar + |end + |zot + |', ' + |if foo + |bar + | end + | zot + |') + end + + def test_keyword_label + assert_indent(' + |bar(class: XXX) do + | foo + |end + |bar + |', ' + |bar(class: XXX) do + | foo + | end + | bar + |') + end + + def test_method_with_question_mark + assert_indent(' + |if x.is_a?(XXX) + | foo + |end + |', ' + |if x.is_a?(XXX) + | foo + | end + |') + end + + def test_expr_in_regexp + assert_indent(' + |if /#{foo}/ =~ s + | x = 1 + |end + |', ' + |if /#{foo}/ =~ s + | x = 1 + | end + |') + end + + def test_singleton_class + assert_indent(' + |class<