diff options
author | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-16 18:49:26 +0900 |
---|---|---|
committer | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-30 00:39:06 +0900 |
commit | fcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch) | |
tree | 64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/test/misc |
Fresh start
Diffstat (limited to 'jni/ruby/test/misc')
-rw-r--r-- | jni/ruby/test/misc/test_ruby_mode.rb | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/jni/ruby/test/misc/test_ruby_mode.rb b/jni/ruby/test/misc/test_ruby_mode.rb new file mode 100644 index 0000000..5be0174 --- /dev/null +++ b/jni/ruby/test/misc/test_ruby_mode.rb @@ -0,0 +1,182 @@ +require 'test/unit' +require 'tempfile' + +class TestRubyMode < Test::Unit::TestCase + MISCDIR = File.expand_path("../../../misc", __FILE__) + e = ENV["EMACS"] || "emacs" + emacs = %W"#{e} -q --no-site-file --batch --load #{MISCDIR}/ruby-mode.el" + begin + raise if IO.popen([e, "--version", :err=>[:child, :out]]) {|f| f.read}[/[0-9]+/].to_i < 23 + IO.popen([*emacs, :err=>[:child, :out]]) {|f| f.read} + rescue + EMACS = nil + else + EMACS = (emacs if $? and $?.success?) + 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 + return result, output + ensure + tmp.close! + 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(*message) {diff expected, result}) + 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 + skip("pending") + 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 + + def test_begin_end + assert_indent(' + |begin + | a[b] + |end + |', ' + |begin + | a[b] + | end + |') + end + + def test_array_after_paren_and_space + assert_indent(' + |class A + | def foo + | foo( []) + | end + |end + |', ' + |class A + | def foo + |foo( []) + |end + | end + |') + end + + def test_spread_arguments + assert_indent(' + |foo(1, + | 2, + | 3) + |', ' + |foo(1, + | 2, + | 3) + |') + end + end +end if TestRubyMode::EMACS |