branch: elpa/adoc-mode
commit b928fb2ddfef7fa9109c3605bf4573854a84acab
Author: Bozhidar Batsov <[email protected]>
Commit: Bozhidar Batsov <[email protected]>

    [Fix #9] Fix broken tempo tests and title template lexical-binding issue
    
    - Replace `on-region` variable reference in two-line title template with
      `(adoc-tempo-on-region)` to fix compatibility with lexical-binding 
tempo.el
      in Emacs 30+.
    - Uncomment and fix all disabled tempo tests: quotes, paragraphs,
      delimited blocks, macros, passthrough macros, and titles.
    - Fix test helper `adoctest-trans-inner` to properly bind `this-command`
      and `current-prefix-arg` so `adoc-tempo-on-region` detects region mode
      during programmatic template invocation.
    - Fix outdated variable names in title test (`adoc-header-style` ->
      `adoc-title-style`).
---
 CHANGELOG.md           |   1 +
 adoc-mode.el           |   2 +-
 test/adoc-mode-test.el | 153 ++++++++++++++++++++++++-------------------------
 3 files changed, 78 insertions(+), 78 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 38cc65dbad..33cfdc6e4b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -30,6 +30,7 @@
 - [#36](https://github.com/bbatsov/adoc-mode/issues/36): Remove `unichars.el` 
dependency; use built-in `sgml-char-names` instead.
 - [#26](https://github.com/bbatsov/adoc-mode/issues/26): Fix `Wrong type 
argument: number-or-marker-p` when calling tempo templates with a prefix 
argument.
 - [#24](https://github.com/bbatsov/adoc-mode/issues/24): Fix table delimiter 
highlighting to support any number of columns (was limited to 4).
+- [#9](https://github.com/bbatsov/adoc-mode/issues/9): Fix broken tempo tests 
and title template compatibility with lexical-binding `tempo.el`.
 
 ## 0.7.0 (2023-03-09)
 
diff --git a/adoc-mode.el b/adoc-mode.el
index 2f66fbda7d..5483612e8d 100644
--- a/adoc-mode.el
+++ b/adoc-mode.el
@@ -2837,7 +2837,7 @@ which can be truthy even without an active region."
         ;; marker is skipped
         ((eq adoc-title-style 'adoc-title-style-two-line)
          '(tr bol (r "text" text) "\n"
-              (adoc-make-two-line-title-underline ,level (if on-region (- 
tempo-region-stop tempo-region-start)))))
+              (adoc-make-two-line-title-underline ,level (if 
(adoc-tempo-on-region) (- tempo-region-stop tempo-region-start)))))
         (t
          (error "Unknown title style"))))
      nil
diff --git a/test/adoc-mode-test.el b/test/adoc-mode-test.el
index adad35b594..1827c07d0b 100644
--- a/test/adoc-mode-test.el
+++ b/test/adoc-mode-test.el
@@ -155,8 +155,15 @@ removed before TRANSFORM is evaluated.
         (set-mark (1+ (cdr pos))))
        (pos
         (goto-char (1+ pos))))
-      ;; exercise
-      (eval transform)
+      ;; exercise — pass t as arg when mark is set so tempo uses the region.
+      ;; Bind `this-command' and `current-prefix-arg' so that
+      ;; `adoc-tempo-on-region' (which inspects these to detect region
+      ;; mode) returns the correct value during template expansion.
+      (if (consp pos)
+          (let ((this-command (car transform))
+                (current-prefix-arg t))
+            (funcall (car transform) t))
+        (eval transform))
       ;; verify
       (should (string-equal (buffer-substring (point-min) (point-max)) 
expected-text)))))
 
@@ -938,19 +945,16 @@ Don't use it for anything real.")
 
 ;; FIXME
 ;; todo: test templates also with tempo-snippets
-;; (ert-deftest adoctest-test-tempo-quotes ()
-;;   (adoctest-quotes "_" "_" '(tempo-template-adoc-emphasis))
-;;   (adoctest-quotes "*" "*" '(tempo-template-adoc-bold))
-;;   (adoctest-quotes "+" "+" '(tempo-template-adoc-monospace))
-;;   (adoctest-quotes "`" "`" '(tempo-template-adoc-monospace-literal))
-;;   (adoctest-quotes "`" "'" '(tempo-template-adoc-single-quote))
-;;   (adoctest-quotes "``" "''" '(tempo-template-adoc-double-quote))
-;;   (adoctest-quotes "[]#" "#" '(tempo-template-adoc-attributed))
-;;   (adoctest-quotes "__" "__" '(tempo-template-adoc-emphasis-uc))
-;;   (adoctest-quotes "**" "**" '(tempo-template-adoc-bold-uc))
-;;   (adoctest-quotes "++" "++" '(tempo-template-adoc-monospace-uc))
-;;   (adoctest-quotes "^" "^" '(tempo-template-adoc-superscript))
-;;   (adoctest-quotes "~" "~" '(tempo-template-adoc-subscript)))
+(ert-deftest adoctest-test-tempo-quotes ()
+  (adoctest-quotes "_" "_" '(tempo-template-adoc-emphasis))
+  (adoctest-quotes "*" "*" '(tempo-template-adoc-bold))
+  (adoctest-quotes "+" "+" '(tempo-template-adoc-typewriter-face))
+  (adoctest-quotes "`" "`" '(tempo-template-adoc-monospace-literal))
+  (adoctest-quotes "__" "__" '(tempo-template-adoc-emphasis-uc))
+  (adoctest-quotes "**" "**" '(tempo-template-adoc-bold-uc))
+  (adoctest-quotes "++" "++" '(tempo-template-adoc-monospace-uc))
+  (adoctest-quotes "^" "^" '(tempo-template-adoc-superscript))
+  (adoctest-quotes "~" "~" '(tempo-template-adoc-subscript)))
 
 (ert-deftest adoctest-test-tempo-formatting-misc ()
 
@@ -972,29 +976,27 @@ Don't use it for anything real.")
 ;; TODO: check buffer position after insertion (aka transionsion). Probably
 ;; factor out from adoctest-trans a defun which translates a string containing
 ;; !s into one with the ! stripped and a buffer-position-list
-;; (ert-deftest adoctest-test-tempo-title ()
-;;   (let ((adoc-header-style 'adoc-title-style-one-line))
-;;     ;; BUG!! somehow I need to load adoc-mode twice until it works!!!
-;;     (adoctest-trans "" "= " '(tempo-template-adoc-title-1))
-;;     (adoctest-trans "" "=== " '(tempo-template-adoc-title-3))
-;;     (adoctest-trans "lorem\n!\nipsum" "lorem\n= \nipsum" 
'(tempo-template-adoc-title-1)))
-
-;;   (let ((adoc-header-style 'adoc-header-style-one-line-enclosed))
-;;     (adoctest-trans "" "=  =" '(tempo-template-adoc-title-1))
-;;     (adoctest-trans "" "===  ===" '(tempo-template-adoc-title-3))
-;;     (adoctest-trans "lorem\n!\nipsum" "lorem\n=  =\nipsum" 
'(tempo-template-adoc-title-1)))
-
-;;   (let ((adoc-header-style 'adoc-header-style-two-line))
-;;     (adoctest-trans "" "\n====" '(tempo-template-adoc-title-1))
-;;     (adoctest-trans "" "\n~~~~" '(tempo-template-adoc-title-3))
-;;     (adoctest-trans "lorem\n!\nipsum" "lorem\n\n====\nipsum" 
'(tempo-template-adoc-title-1))))
-
-;; FIXME
-;; (ert-deftest adoctest-test-tempo-paragraphs ()
-;;   (adoctest-trans "" "  " '(tempo-template-adoc-literal-paragraph))
-;;   (adoctest-trans "lorem<ipsum>" "lorem\n  ipsum" 
'(tempo-template-adoc-literal-paragraph))
-;;   (adoctest-trans "" "TIP: " '(tempo-template-adoc-paragraph-tip))
-;;   (adoctest-trans "lorem<ipsum>" "lorem\nTIP: ipsum" 
'(tempo-template-adoc-paragraph-tip)))
+(ert-deftest adoctest-test-tempo-title ()
+  (let ((adoc-title-style 'adoc-title-style-one-line))
+    (adoctest-trans "" "= " '(tempo-template-adoc-title-1))
+    (adoctest-trans "" "=== " '(tempo-template-adoc-title-3))
+    (adoctest-trans "lorem\n!\nipsum" "lorem\n= \nipsum" 
'(tempo-template-adoc-title-1)))
+
+  (let ((adoc-title-style 'adoc-title-style-one-line-enclosed))
+    (adoctest-trans "" "=  =" '(tempo-template-adoc-title-1))
+    (adoctest-trans "" "===  ===" '(tempo-template-adoc-title-3))
+    (adoctest-trans "lorem\n!\nipsum" "lorem\n=  =\nipsum" 
'(tempo-template-adoc-title-1)))
+
+  (let ((adoc-title-style 'adoc-title-style-two-line))
+    (adoctest-trans "" "\n====" '(tempo-template-adoc-title-1))
+    (adoctest-trans "" "\n~~~~" '(tempo-template-adoc-title-3))
+    (adoctest-trans "lorem\n!\nipsum" "lorem\n\n====\nipsum" 
'(tempo-template-adoc-title-1))))
+
+(ert-deftest adoctest-test-tempo-paragraphs ()
+  (adoctest-trans "" "  " '(tempo-template-adoc-literal-paragraph))
+  (adoctest-trans "lorem<ipsum>" "lorem\n  ipsum" 
'(tempo-template-adoc-literal-paragraph))
+  (adoctest-trans "" "TIP: " '(tempo-template-adoc-paragraph-tip))
+  (adoctest-trans "lorem<ipsum>" "lorem\nTIP: ipsum" 
'(tempo-template-adoc-paragraph-tip)))
 
 (defun adoctest-delimited-block (del transform)
   "Todo document adoctest-delimited-block DEL TRANSFORM."
@@ -1010,16 +1012,15 @@ Don't use it for anything real.")
     (adoctest-trans
      "lorem <ipsum >dolor" (concat "lorem \n" del-line "\nipsum \n" del-line 
"\ndolor") transform)))
 
-;; FIXME
-;; (ert-deftest adoctest-test-tempo-delimited-blocks ()
-;;   (adoctest-delimited-block ?/ 
'(tempo-template-adoc-delimited-block-comment))
-;;   (adoctest-delimited-block ?+ 
'(tempo-template-adoc-delimited-block-passthrough))
-;;   (adoctest-delimited-block ?- 
'(tempo-template-adoc-delimited-block-listing))
-;;   (adoctest-delimited-block ?. 
'(tempo-template-adoc-delimited-block-literal))
-;;   (adoctest-delimited-block ?_ '(tempo-template-adoc-delimited-block-quote))
-;;   (adoctest-delimited-block ?= 
'(tempo-template-adoc-delimited-block-example))
-;;   (adoctest-delimited-block ?* 
'(tempo-template-adoc-delimited-block-sidebar))
-;;   (adoctest-delimited-block "--" 
'(tempo-template-adoc-delimited-block-open-block)))
+(ert-deftest adoctest-test-tempo-delimited-blocks ()
+  (adoctest-delimited-block ?/ '(tempo-template-adoc-delimited-block-comment))
+  (adoctest-delimited-block ?+ 
'(tempo-template-adoc-delimited-block-passthrough))
+  (adoctest-delimited-block ?- '(tempo-template-adoc-delimited-block-listing))
+  (adoctest-delimited-block ?. '(tempo-template-adoc-delimited-block-literal))
+  (adoctest-delimited-block ?_ '(tempo-template-adoc-delimited-block-quote))
+  (adoctest-delimited-block ?= '(tempo-template-adoc-delimited-block-example))
+  (adoctest-delimited-block ?* '(tempo-template-adoc-delimited-block-sidebar))
+  (adoctest-delimited-block "--" 
'(tempo-template-adoc-delimited-block-open-block)))
 
 (ert-deftest adoctest-test-tempo-lists ()
   (let ((tab-width 2)
@@ -1030,35 +1031,33 @@ Don't use it for anything real.")
     (adoctest-trans "" ":: " '(tempo-template-adoc-labeled-list-item))
     (adoctest-trans "<foo>" ":: foo" 
'(tempo-template-adoc-labeled-list-item))))
 
-;; FIXME
-;; (ert-deftest adoctest-test-tempo-macros ()
-;;   (adoctest-trans "" "http://foo.com[]"; '(tempo-template-adoc-url-caption))
-;;   (adoctest-trans "see <here> for" "see http://foo.com[here] for" 
'(tempo-template-adoc-url-caption))
-;;   (adoctest-trans "" "mailto:[]"; '(tempo-template-adoc-email-caption))
-;;   (adoctest-trans "ask <bob> for" "ask mailto:[bob] for" 
'(tempo-template-adoc-email-caption))
-;;   (adoctest-trans "" "[[]]" '(tempo-template-adoc-anchor))
-;;   (adoctest-trans "lorem <ipsum> dolor" "lorem [[ipsum]] dolor" 
'(tempo-template-adoc-anchor))
-;;   (adoctest-trans "" "anchor:[]" 
'(tempo-template-adoc-anchor-default-syntax))
-;;   (adoctest-trans "lorem <ipsum> dolor" "lorem anchor:ipsum[] dolor" 
'(tempo-template-adoc-anchor-default-syntax))
-;;   (adoctest-trans "" "<<,>>" '(tempo-template-adoc-xref))
-;;   (adoctest-trans "see <here> for" "see <<,here>> for" 
'(tempo-template-adoc-xref))
-;;   (adoctest-trans "" "xref:[]" '(tempo-template-adoc-xref-default-syntax))
-;;   (adoctest-trans "see <here> for" "see xref:[here] for" 
'(tempo-template-adoc-xref-default-syntax))
-;;   (adoctest-trans "" "image:[]" '(tempo-template-adoc-image)))
-
-;; FIXME
-;; (ert-deftest adoctest-test-tempo-passthroug-macros ()
-;;   ;; backticks are tested in adoctest-test-tempo-quotes
-;;   (adoctest-trans "" "pass:[]" '(tempo-template-adoc-pass))
-;;   (adoctest-trans "lorem <ipsum> dolor" "lorem pass:[ipsum] dolor" 
'(tempo-template-adoc-pass))
-;;   (adoctest-trans "" "asciimath:[]" '(tempo-template-adoc-asciimath))
-;;   (adoctest-trans "lorem <ipsum> dolor" "lorem asciimath:[ipsum] dolor" 
'(tempo-template-adoc-asciimath))
-;;   (adoctest-trans "" "latexmath:[]" '(tempo-template-adoc-latexmath))
-;;   (adoctest-trans "lorem <ipsum> dolor" "lorem latexmath:[ipsum] dolor" 
'(tempo-template-adoc-latexmath))
-;;   (adoctest-trans "" "++++++" '(tempo-template-adoc-pass-+++))
-;;   (adoctest-trans "lorem <ipsum> dolor" "lorem +++ipsum+++ dolor" 
'(tempo-template-adoc-pass-+++))
-;;   (adoctest-trans "" "$$$$" '(tempo-template-adoc-pass-$$))
-;;   (adoctest-trans "lorem <ipsum> dolor" "lorem $$ipsum$$ dolor" 
'(tempo-template-adoc-pass-$$)))
+(ert-deftest adoctest-test-tempo-macros ()
+  (adoctest-trans "" "http://foo.com[]"; '(tempo-template-adoc-url-caption))
+  (adoctest-trans "see <here> for" "see http://foo.com[here] for" 
'(tempo-template-adoc-url-caption))
+  (adoctest-trans "" "mailto:[]"; '(tempo-template-adoc-email-caption))
+  (adoctest-trans "ask <bob> for" "ask mailto:[bob] for" 
'(tempo-template-adoc-email-caption))
+  (adoctest-trans "" "[[]]" '(tempo-template-adoc-anchor))
+  (adoctest-trans "lorem <ipsum> dolor" "lorem [[ipsum]] dolor" 
'(tempo-template-adoc-anchor))
+  (adoctest-trans "" "anchor:[]" '(tempo-template-adoc-anchor-default-syntax))
+  (adoctest-trans "lorem <ipsum> dolor" "lorem anchor:ipsum[] dolor" 
'(tempo-template-adoc-anchor-default-syntax))
+  (adoctest-trans "" "<<,>>" '(tempo-template-adoc-xref))
+  (adoctest-trans "see <here> for" "see <<,here>> for" 
'(tempo-template-adoc-xref))
+  (adoctest-trans "" "xref:[]" '(tempo-template-adoc-xref-default-syntax))
+  (adoctest-trans "see <here> for" "see xref:[here] for" 
'(tempo-template-adoc-xref-default-syntax))
+  (adoctest-trans "" "image:[]" '(tempo-template-adoc-image)))
+
+(ert-deftest adoctest-test-tempo-passthrough-macros ()
+  ;; backticks are tested in adoctest-test-tempo-quotes
+  (adoctest-trans "" "pass:[]" '(tempo-template-adoc-pass))
+  (adoctest-trans "lorem <ipsum> dolor" "lorem pass:[ipsum] dolor" 
'(tempo-template-adoc-pass))
+  (adoctest-trans "" "asciimath:[]" '(tempo-template-adoc-asciimath))
+  (adoctest-trans "lorem <ipsum> dolor" "lorem asciimath:[ipsum] dolor" 
'(tempo-template-adoc-asciimath))
+  (adoctest-trans "" "latexmath:[]" '(tempo-template-adoc-latexmath))
+  (adoctest-trans "lorem <ipsum> dolor" "lorem latexmath:[ipsum] dolor" 
'(tempo-template-adoc-latexmath))
+  (adoctest-trans "" "++++++" '(tempo-template-adoc-pass-+++))
+  (adoctest-trans "lorem <ipsum> dolor" "lorem +++ipsum+++ dolor" 
'(tempo-template-adoc-pass-+++))
+  (adoctest-trans "" "$$$$" '(tempo-template-adoc-pass-$$))
+  (adoctest-trans "lorem <ipsum> dolor" "lorem $$ipsum$$ dolor" 
'(tempo-template-adoc-pass-$$)))
 
 (ert-deftest adoctest-test-make-two-line-title-underline ()
   (should (equal (adoc-make-two-line-title-underline 0 6)

Reply via email to