aboutsummaryrefslogtreecommitdiffstats
path: root/test/misc
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-03-08 14:40:33 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-03-08 14:40:33 +0000
commit1f9ee467c88db366a57d7d6c08acb3b9782c2535 (patch)
tree3175ecf43d4f8a911c01999a2fd5b5a1d8771d30 /test/misc
parent6917c26a7a488d00961476f450f94f5a7163a854 (diff)
downloadruby-1f9ee467c88db366a57d7d6c08acb3b9782c2535.tar.gz
* 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
Diffstat (limited to 'test/misc')
-rw-r--r--test/misc/test_ruby_mode.rb136
1 files changed, 136 insertions, 0 deletions
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<<bar
+ | foo
+ |end
+ |', '
+ |class<<bar
+ |foo
+ | end
+ |')
+ end
+
+ def test_array_literal
+ assert_indent('
+ |foo = [
+ | bar
+ |]
+ |', '
+ |foo = [
+ | bar
+ | ]
+ |')
+ assert_indent('
+ |foo do
+ | [bar]
+ |end
+ |', '
+ |foo do
+ |[bar]
+ | end
+ |')
+ end
+ end
+end if TestRubyMode::EMACS