ert のテストには fundamental-mode の syntax table が使われる

nodejs-repl.el のテストを el-expectations から ert-expectations に移行したらテストにコケるようになったのでメモです。

ELISP> (replace-regexp-in-string "\\s-*$" "" "a\nb")
"a\nb"

ですが、例えば、次のようなテストを書くと結果は Failed になります。

(ert-deftest test ()
  (should (equal (replace-regexp-in-string "\\s-*$" "" "a\nb") "a\nb")))

これはテストが fundamental-mode で評価されるからです。
cf. https://github.com/emacs-mirror/emacs/blob/emacs-24.5/lisp/emacs-lisp/ert.el#L790-L802

よって、syntax table に依存するコードをテストする時は注意が必要です。

余談ですが、上記の正規表現は末尾の whitespace を取り除くことを意図したものであり、”\s-\’” と書かなければいけないし、\n も取り除く対象のつもりだったので syntax table に依存せず “[ \t\r\n]\’” と書くのが良さそうです。

広告
Emacs で Helm v1.8.0 をストレスなく使うための個人的な設定 Redshift で UDF を使って YAML をパースする
※このエントリーははてなダイアリーから移行したものです。過去のコメントなどはそちらを参照してください