From 4473b4ede5b9fb4736ef78482511349d2fe171eb Mon Sep 17 00:00:00 2001 From: Noam Postavsky Date: Sat, 26 Apr 2014 19:09:57 -0400 Subject: [PATCH] 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 | 82 ++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 43 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"))))) -(ert-deftest example-for-issue-404 () - (with-temp-buffer - (c++-mode) - (yas-minor-mode 1) - (insert "#include \n") - (let ((snippet "main")) - (let ((yas-good-grace nil)) (yas-expand-snippet snippet)) - (should (string= (yas--buffer-contents) "#include \nmain"))))) +(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-404-c-mode () - (with-temp-buffer +(ert-deftest example-for-issue-474 () + (yas--with-font-locked-temp-buffer (c-mode) (yas-minor-mode 1) (insert "#include \n") - (let ((snippet "main")) - (let ((yas-good-grace nil)) (yas-expand-snippet snippet)) - (should (string= (yas--buffer-contents) "#include \nmain"))))) + (let ((yas-good-grace nil)) (yas-expand-snippet "`(insert \"TODO: \")`")) + (should (string= (yas--buffer-contents) "#include \nTODO: ")))) -(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 \nmain") - (setq yas-good-grace nil) - (yas-expand) - (should (string= (buffer-string) - "#include \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))))) +(ert-deftest example-for-issue-404 () + (yas--with-font-locked-temp-buffer + (c++-mode) + (yas-minor-mode 1) + (insert "#include \n") + (let ((yas-good-grace nil)) (yas-expand-snippet "main")) + (should (string= (yas--buffer-contents) "#include \nmain")))) + +(ert-deftest example-for-issue-404-c-mode () + (yas--with-font-locked-temp-buffer + (c-mode) + (yas-minor-mode 1) + (insert "#include \n") + (let ((yas-good-grace nil)) (yas-expand-snippet "main")) + (should (string= (yas--buffer-contents) "#include \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 ()