branch: master commit 4473b4ede5b9fb4736ef78482511349d2fe171eb Author: Noam Postavsky <npost...@users.sourceforge.net> Commit: Noam Postavsky <npost...@users.sourceforge.net>
New test for cc-mode's fontification functions This issue requires font locking to trigger. This can be be done by let-binding noninteractive to nil and using a buffer name that doesn't start with a space, instead of the external emacs hack which is now redundant. * yasnippet-tests.el (yas--with-font-locked-temp-buffer): new macro similar to with-temp-buffer but enables font-lock-mode even in -batch mode. (example-for-issue-474): new test (example-for-issue-404, example-for-issue-404-c-mode): use new macro (example-for-issue-404-external-emacs): removed --- yasnippet-tests.el | 74 ++++++++++++++++++++++++--------------------------- 1 files changed, 35 insertions(+), 39 deletions(-) diff --git a/yasnippet-tests.el b/yasnippet-tests.el index 02bf10c..f87b3d4 100644 --- a/yasnippet-tests.el +++ b/yasnippet-tests.el @@ -204,60 +204,56 @@ (ert-simulate-command `(yas-mock-insert "bbb")) (should (string= (yas--buffer-contents) "if condition\naaa\nelse\nbbb\nend"))))) +(defmacro yas--with-font-locked-temp-buffer (&rest body) + "Like `with-temp-buffer', but ensure `font-lock-mode'." + (declare (indent 0) (debug t)) + (let ((temp-buffer (make-symbol "temp-buffer"))) + ;; NOTE: buffer name must not start with a space, otherwise + ;; `font-lock-mode' doesn't turn on. + `(let ((,temp-buffer (generate-new-buffer "*yas-temp*"))) + (with-current-buffer ,temp-buffer + ;; pretend we're interactive so `font-lock-mode' turns on + (let ((noninteractive nil) + ;; turn on font locking after major mode change + (change-major-mode-after-body-hook #'font-lock-mode)) + (unwind-protect + (progn (require 'font-lock) + ;; turn on font locking before major mode change + (font-lock-mode +1) + ,@body) + (and (buffer-name ,temp-buffer) + (kill-buffer ,temp-buffer)))))))) + +(ert-deftest example-for-issue-474 () + (yas--with-font-locked-temp-buffer + (c-mode) + (yas-minor-mode 1) + (insert "#include <foo>\n") + (let ((yas-good-grace nil)) (yas-expand-snippet "`(insert \"TODO: \")`")) + (should (string= (yas--buffer-contents) "#include <foo>\nTODO: ")))) + (ert-deftest example-for-issue-404 () - (with-temp-buffer + (yas--with-font-locked-temp-buffer (c++-mode) (yas-minor-mode 1) (insert "#include <foo>\n") - (let ((snippet "main")) - (let ((yas-good-grace nil)) (yas-expand-snippet snippet)) - (should (string= (yas--buffer-contents) "#include <foo>\nmain"))))) + (let ((yas-good-grace nil)) (yas-expand-snippet "main")) + (should (string= (yas--buffer-contents) "#include <foo>\nmain")))) (ert-deftest example-for-issue-404-c-mode () - (with-temp-buffer + (yas--with-font-locked-temp-buffer (c-mode) (yas-minor-mode 1) (insert "#include <foo>\n") - (let ((snippet "main")) - (let ((yas-good-grace nil)) (yas-expand-snippet snippet)) - (should (string= (yas--buffer-contents) "#include <foo>\nmain"))))) - -(ert-deftest example-for-issue-404-external-emacs () - :tags '(:external) - (let ((fixture-el-file (make-temp-file "yas-404-fixture" nil ".el"))) - (with-temp-buffer - (insert (pp-to-string - `(condition-case _ - (progn - (require 'yasnippet-tests) - (yas-with-snippet-dirs - '((".emacs.d/snippets" - ("c-mode" - ("main" . "int main ()")))) - (yas-global-mode) - (switch-to-buffer "foo.c") - (c-mode) - (insert "#include <iostream>\nmain") - (setq yas-good-grace nil) - (yas-expand) - (should (string= (buffer-string) - "#include <iostream>\nint main ()")) - (kill-emacs 0))) - (error (kill-emacs -1))))) - (write-file fixture-el-file)) - (should (= 0 - (call-process (concat invocation-directory invocation-name) - nil nil nil - "-Q" "--batch" - "-L" "." "-l" fixture-el-file))))) + (let ((yas-good-grace nil)) (yas-expand-snippet "main")) + (should (string= (yas--buffer-contents) "#include <foo>\nmain")))) (ert-deftest middle-of-buffer-snippet-insertion () (with-temp-buffer (yas-minor-mode 1) (insert "beginning") (save-excursion (insert "end")) - (let ((snippet "-middle-")) - (yas-expand-snippet snippet)) + (yas-expand-snippet "-middle-") (should (string= (yas--buffer-contents) "beginning-middle-end")))) (ert-deftest another-example-for-issue-271 ()