;;; ruby-mode-tests.el --- Test suite for ruby-mode ;; Copyright (C) 2012 Free Software Foundation, Inc. ;; This file is part of GNU Emacs. ;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs. If not, see . ;;; Commentary: ;;; Code: (require 'ruby-mode) (defun ruby-should-indent (content column) "Assert indentation COLUMN on the last line of CONTENT." (with-temp-buffer (insert content) (ruby-mode) (ruby-indent-line) (should (= (current-indentation) column)))) (defun ruby-should-indent-buffer (expected content) "Assert that CONTENT turns into EXPECTED after the buffer is re-indented. The whitespace before and including \"|\" on each line is removed." (with-temp-buffer (cl-flet ((fix-indent (s) (replace-regexp-in-string "^[ \t]*|" "" s))) (insert (fix-indent content)) (ruby-mode) (indent-region (point-min) (point-max)) (should (string= (fix-indent expected) (buffer-string)))))) (defun ruby-assert-state (content &rest values-plist) "Assert syntax state values at the end of CONTENT. VALUES-PLIST is a list with alternating index and value elements." (with-temp-buffer (insert content) (ruby-mode) (syntax-propertize (point)) (while values-plist (should (eq (nth (car values-plist) (parse-partial-sexp (point-min) (point))) (cadr values-plist))) (setq values-plist (cddr values-plist))))) (defun ruby-assert-face (content pos face) (with-temp-buffer (insert content) (ruby-mode) (font-lock-fontify-buffer) (should (eq face (get-text-property pos 'face))))) (ert-deftest ruby-indent-after-symbol-made-from-string-interpolation () "It can indent the line after symbol made using string interpolation." (ruby-should-indent "def foo(suffix)\n :\"bar#{suffix}\"\n" ruby-indent-level)) (ert-deftest ruby-indent-after-js-style-symbol-with-block-beg-name () "JS-style hash symbol can have keyword name." (ruby-should-indent "link_to \"home\", home_path, class: \"foo\"\n" 0)) (ert-deftest ruby-discern-singleton-class-from-heredoc () (ruby-assert-state "foo <