emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] [babel] Trying to add ERT test cases


From: Martyn Jago
Subject: Re: [O] [babel] Trying to add ERT test cases
Date: Mon, 19 Sep 2011 16:46:09 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (darwin)

Hi Sebastien

"Sebastien Vauban"
<address@hidden> writes:

> Hi,
>
> I'd like to really contrib more on test cases, in particular every time I'd
> see something problematic. My goal (SOMEDAY/MAYBE) would be to (be able to)
> report any problem with an attached ERT test case...
>
> Last experience: for some unknown reason (maybe a Lisp nesting exceeded,
> though), it (rarely) happens that the speed commands don't work anymore. I'd
> like to test (ultimately all speed commans) against such a behavior.
>
> Hence:
>
> * Speed command (this must be at level-1 headline)
>   :PROPERTIES:
>   :ID:       4ee368b8-cf7c-4269-98c0-b28dcf94ff2b
>   :END:
>
> Some text.
>
> * Test
>
> #+begin_src emacs-lisp
> (ert-deftest ob-tangle/speed-command-r ()
>   "Test that speed command `r' does demote the headline."
>   (org-test-at-id "4ee368b8-cf7c-4269-98c0-b28dcf94ff2b"
>     (goto-char (point-at-bol))
>     (insert "r") ;; I don't want a self-insert of r, but the effect of typing 
> it
>     (goto-char (point-at-bol))
>     (should (looking-at "\\*\\* Speed command"))
>     (delete-char 1)))
> #+end_src
>
> Problems:
>
> - I want to simulate the user pressing `r', but `insert' does insert a literal
>   `r', instead of executing what's associated to it.
>
>   Of course, I don't want to replace the key press on `r' but a call to
>   `org-shiftright', that's the whole point of the test.
>
>   So, how can I insert a `r' character to be contextually interpreted?
>
> - when `should' is failing, the `delete-char' does not take place. This is
>   still mysterious to me, at this point in time.
>
> Any hints for me to go further?
>
> Best regards,
>   Seb

My solution doesn't simulate pressing `r' as such (which looks like it
will require some substantial setup), so I approached the test slightly
differently...

 - 1) Ensure =org-speed-command-default-hook= returns t when valid
       (default) speed command and bol
 - 2) Ensure actual speed command promotes correctly
 - 3) Use a test-buffer (with org-mode enabled) to avoid messing with
       test example

There may be a better solution however.

Best, Martyn

--8<---------------cut here---------------start------------->8---
(ert-deftest ob-tangle/speed-command-r ()
  (let ((org-use-speed-commands t))
    (with-temp-buffer
      (org-mode)
      (insert "* Speed command")
      (goto-char (point-at-bol))
      ;; ensure default speed commands return t
      (should (org-speed-command-default-hook "r"))
      (should (org-speed-command-default-hook "n"))

      ;; ensure non-default speed commands return nil
      (should-not (org-speed-command-default-hook "z"))

      ;; ensure default speed commands return nil if not at bol
      (forward-char)
      (should-not (org-speed-command-default-hook "r"))

      ;; ensure org-metaright promotes heading
      (goto-char (point-at-bol))
      (org-metaright 1)
      (goto-char (point-at-bol))
      (should (equal "** Speed command" (buffer-string)))
      ;; ensure org-metaleft demotes heading
      (org-metaleft 1)
      (should (equal "* Speed command" (buffer-string))))))
--8<---------------cut here---------------end--------------->8---





reply via email to

[Prev in Thread] Current Thread [Next in Thread]