unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Ert batch-mode error
@ 2020-04-06  9:11 Andreas Röhler
  2020-04-06 22:55 ` Noam Postavsky
  0 siblings, 1 reply; 6+ messages in thread
From: Andreas Röhler @ 2020-04-06  9:11 UTC (permalink / raw)
  To: Help Gnu Emacs mailing list

Hi all,

running occasionally into a strange error when testing with Emacs Ert 
test-suite.
Consider the test below from following source:

https://github.com/emacs-berlin/syntactic-close/blob/master/test/syntactic-close-python-tests.el

(ert-deftest syntactic-close-python-tqs-sq-test-eS7oPB ()
   (syntactic-close-test-with-python-buffer
       "'''asdf"
     (goto-char (point-max))
     (syntactic-close)
     (should
      ;; (char-equal (char-before (- (point) 2)) ?')
      (char-equal (char-before) ?')
      )))

It's intended to test for triple-quoted strings. Also the commented
line should do the test, but fails in batch-mode.

M-x ert RET syntactic-close-python-tqs-sq-test-eS7oPB RET

however succeeds even if this line is uncommented and the following
line commented instead. So the error occurs only in batch-mode.

Any explanation?

Current syntactic-close is provided for example by: git clone 
https://github.com/emacs-berlin/syntactic-close.git

Thanks,
Andreas





^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Ert batch-mode error
  2020-04-06  9:11 Ert batch-mode error Andreas Röhler
@ 2020-04-06 22:55 ` Noam Postavsky
  2020-04-07  3:50   ` Stefan Monnier
  0 siblings, 1 reply; 6+ messages in thread
From: Noam Postavsky @ 2020-04-06 22:55 UTC (permalink / raw)
  To: Andreas Röhler; +Cc: Help Gnu Emacs mailing list

On Mon, 6 Apr 2020 at 05:05, Andreas Röhler
<andreas.roehler@easy-emacs.de> wrote:

>    (syntactic-close-test-with-python-buffer

> So the error occurs only in batch-mode.

This macro tries calls font-lock-fontity-region, perhaps the problem
is that font-lock mode doesn't activate in batch mode (although it's
not clear to me why your should depend on font-lock). I wrote
yas--with-font-locked-temp-buffer for some yasnippet tests to deal
with similar problems.

https://github.com/joaotavora/yasnippet/blob/0.14.0/yasnippet-tests.el#L856-L874



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Ert batch-mode error
  2020-04-06 22:55 ` Noam Postavsky
@ 2020-04-07  3:50   ` Stefan Monnier
  2020-04-08  6:47     ` Andreas Röhler
  2020-04-13 14:50     ` Noam Postavsky
  0 siblings, 2 replies; 6+ messages in thread
From: Stefan Monnier @ 2020-04-07  3:50 UTC (permalink / raw)
  To: help-gnu-emacs

> This macro tries calls font-lock-fontity-region, perhaps the problem
> is that font-lock mode doesn't activate in batch mode (although it's
> not clear to me why your should depend on font-lock). I wrote
> yas--with-font-locked-temp-buffer for some yasnippet tests to deal
> with similar problems.
>
> https://github.com/joaotavora/yasnippet/blob/0.14.0/yasnippet-tests.el#L856-L874

Yuck!  This should use `font-lock-ensure` which *should* work in this
case (if it doesn't, please file a bug report; it's been introduced in
large part to solve these kinds of use cases).

But looking at yasnippet-tests.el, I'm not sure what's going on:
the only case where font-lock seems to be relevant is
`do-yas-org-native-tab-in-source-block` (and it already uses
`font-lock-ensure` when available).  So (barring compatibility with
Emacs<24 for which you still need the non-font-lock-ensure version),
would the patch below still perform the tests correctly?


        Stefan


diff --git a/packages/yasnippet/yasnippet-tests.el b/packages/yasnippet/yasnippet-tests.el
index f7ca2bb41..5d64085c6 100644
--- a/packages/yasnippet/yasnippet-tests.el
+++ b/packages/yasnippet/yasnippet-tests.el
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 2012-2015, 2017-2018  Free Software Foundation, Inc.
 
-;; Author: Joo Tvora <joaot@siscog.pt>
+;; Author: João Távora <joaot@siscog.pt>
 ;; Keywords: emulations, convenience
 
 ;; This program is free software; you can redistribute it and/or modify
@@ -853,28 +853,8 @@ mapconcat #'(lambda (arg)
     (yas-expand-snippet "\\`\\`\\`foo\n\n\\`\\`\\`")
     (should (equal (buffer-string) "```foo\n\n```"))))
 
-(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
+  (with-temp-buffer
     (c-mode)
     (yas-minor-mode 1)
     (insert "#include <foo>\n")
@@ -882,7 +862,7 @@ mapconcat #'(lambda (arg)
     (should (string= (yas--buffer-contents) "#include <foo>\nTODO: "))))
 
 (ert-deftest example-for-issue-404 ()
-  (yas--with-font-locked-temp-buffer
+  (with-temp-buffer
     (c++-mode)
     (yas-minor-mode 1)
     (insert "#include <foo>\n")
@@ -890,7 +870,7 @@ mapconcat #'(lambda (arg)
     (should (string= (yas--buffer-contents) "#include <foo>\nmain"))))
 
 (ert-deftest example-for-issue-404-c-mode ()
-  (yas--with-font-locked-temp-buffer
+  (with-temp-buffer
     (c-mode)
     (yas-minor-mode 1)
     (insert "#include <foo>\n")
@@ -1686,14 +1666,12 @@ TODO: be meaner"
           ;; `org-src-tab-acts-natively' to have effect.
           (org-src-fontify-natively t))
       (yas-reload-all)
-      ;; Org relies on font-lock to identify source blocks.
-      (yas--with-font-locked-temp-buffer
+      (with-temp-buffer
        (org-mode)
        (yas-minor-mode 1)
        (insert "#+BEGIN_SRC " mode "\nT\n#+END_SRC")
-       (if (fboundp 'font-lock-ensure)
-           (font-lock-ensure)
-         (jit-lock-fontify-now))
+       ;; Org relies on font-lock to identify source blocks.
+       (font-lock-ensure)
        (re-search-backward "^T$") (goto-char (match-end 0))
        (should (org-in-src-block-p))
        (ert-simulate-command `(,(key-binding (kbd "TAB"))))




^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: Ert batch-mode error
  2020-04-07  3:50   ` Stefan Monnier
@ 2020-04-08  6:47     ` Andreas Röhler
  2020-04-13 14:50     ` Noam Postavsky
  1 sibling, 0 replies; 6+ messages in thread
From: Andreas Röhler @ 2020-04-08  6:47 UTC (permalink / raw)
  To: help-gnu-emacs

Thanks all,

Andreas




^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Ert batch-mode error
  2020-04-07  3:50   ` Stefan Monnier
  2020-04-08  6:47     ` Andreas Röhler
@ 2020-04-13 14:50     ` Noam Postavsky
  2020-04-13 17:47       ` Stefan Monnier
  1 sibling, 1 reply; 6+ messages in thread
From: Noam Postavsky @ 2020-04-13 14:50 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Help Gnu Emacs mailing list

On Mon, 6 Apr 2020 at 23:50, Stefan Monnier <monnier@iro.umontreal.ca> wrote:

> But looking at yasnippet-tests.el, I'm not sure what's going on:
> the only case where font-lock seems to be relevant is
> `do-yas-org-native-tab-in-source-block` (and it already uses
> `font-lock-ensure` when available).  So (barring compatibility with
> Emacs<24 for which you still need the non-font-lock-ensure version),
> would the patch below still perform the tests correctly?

As far as I can tell, the problem actually seems to be 24.3 specific,
so yes, assuming you meant <=24 rather than <24. In 24.3, the
following triggers an error when run interactively, but there is no
error in --batch mode, or when using with-temp-buffer (this is a
reduction from yasnippet's example-for-issue-474 test). That was the
motivation for adding yas--with-font-locked-temp-buffer (and I just
threw it in for all cc-mode related tests, just in case).

    (setq debug-on-error t)
    (with-current-buffer (get-buffer-create "foo") ;with-temp-buffer
      (c-mode)
      (insert "#include <foo>\n")
      (narrow-to-region (point) (point))
      (insert "`\"TODO: \"`")
      (delete-region (point-min) (point-max))
      (insert "TODO: "))



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Ert batch-mode error
  2020-04-13 14:50     ` Noam Postavsky
@ 2020-04-13 17:47       ` Stefan Monnier
  0 siblings, 0 replies; 6+ messages in thread
From: Stefan Monnier @ 2020-04-13 17:47 UTC (permalink / raw)
  To: help-gnu-emacs

>> But looking at yasnippet-tests.el, I'm not sure what's going on:
>> the only case where font-lock seems to be relevant is
>> `do-yas-org-native-tab-in-source-block` (and it already uses
>> `font-lock-ensure` when available).  So (barring compatibility with
>> Emacs<24 for which you still need the non-font-lock-ensure version),
>> would the patch below still perform the tests correctly?
>
> As far as I can tell, the problem actually seems to be 24.3 specific,
> so yes, assuming you meant <=24 rather than <24. In 24.3, the
> following triggers an error when run interactively, but there is no
> error in --batch mode, or when using with-temp-buffer (this is a
> reduction from yasnippet's example-for-issue-474 test). That was the
> motivation for adding yas--with-font-locked-temp-buffer (and I just
> threw it in for all cc-mode related tests, just in case).
>
>     (setq debug-on-error t)
>     (with-current-buffer (get-buffer-create "foo") ;with-temp-buffer
>       (c-mode)
>       (insert "#include <foo>\n")
>       (narrow-to-region (point) (point))
>       (insert "`\"TODO: \"`")
>       (delete-region (point-min) (point-max))
>       (insert "TODO: "))

So, IIUC example-for-issue-474 failed in Emacs-24.3, because of a bug in
CC-mode.  Not sure why yasnippet cares, but in any case, I'd recommend
you put a comment there to clarify it.


        Stefan




^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-04-13 17:47 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-04-06  9:11 Ert batch-mode error Andreas Röhler
2020-04-06 22:55 ` Noam Postavsky
2020-04-07  3:50   ` Stefan Monnier
2020-04-08  6:47     ` Andreas Röhler
2020-04-13 14:50     ` Noam Postavsky
2020-04-13 17:47       ` Stefan Monnier

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).