From: David Maus <dmaus@ictsoc.de>
To: Eric Schulte <schulte.eric@gmail.com>
Cc: David Maus <dmaus@ictsoc.de>, emacs-orgmode@gnu.org
Subject: Re: [test] Mark tests with missing dependencies as "expected to fail"
Date: Sun, 13 Nov 2011 17:18:48 +0100 [thread overview]
Message-ID: <87zkg0ov13.wl%dmaus@ictsoc.de> (raw)
In-Reply-To: <87fwiq2rsl.fsf@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 3354 bytes --]
Hi Eric,
At Tue, 18 Oct 2011 10:22:34 -0600,
Eric Schulte wrote:
> Hi David,
>
> I agree it would be preferable to note that not all tests are run when
> dependencies are missing, although I don't think it is extremely
> important. I think some version of the above would be worthwhile if it
> could be done in a file-wide manner (as are the current dependency
> checks) and wouldn't require duplicating the dependency check or
> changing every test form individually. Perhaps a file-local-variable
> could be used to expect failures for every form defined in the file?
I tried the approach with a file-local variable but it didn't work
out: A macro can be expanded at any time, i.e. looks like there is no
way to obtain a reference to the buffer where the macro is defined at
expansion time.
But finally came up with this one:
#+begin_src emacs-lisp
(defmacro org-test-with-dependencies (dependencies &rest body)
"Mark `ert-deftest' forms in BODY with a expected result
depending on DEPENDENCIES. DEPENDENCIES is an alist with a
human-readable name of the dependency as key. The second element
of each member should be a form that evaluates to a non-nil value
if the dependency is met.
All `ert-deftest' forms in BODY are marked as expected to pass if
all dependencies are met. Otherwise the expected result is set to
`:failed' and the test's bodies modified to signal an error with
an error message indicating the first failing dependency."
(macrolet ((define-dependencies ()
`(cond
,@(mapcar (lambda (dependency)
`((not ,(second dependency)) ,(first dependency))) dependencies))))
(let ((missing-dependency (define-dependencies)))
`(progn
,@(mapcar (lambda (sexp)
(if (and (consp sexp)
(eq (first sexp) 'ert-deftest))
(let* ((docstring (if (stringp (fourth sexp)) (list (fourth sexp))))
(deftest-body (nthcdr (if docstring 4 3) sexp)))
`(,@(append (list (first sexp) (second sexp) (third sexp)) docstring)
:expected-result ,@(if missing-dependency
`(:failed (error "Missing dependency: %s" ,missing-dependency))
'(:passed))
,@deftest-body))
sexp)) body)))))
#+end_src
You wrap it around ert-deftest forms, e.g.
#+begin_src emacs-lisp
(org-test-with-dependencies (("ESS" (featurep 'ess)))
(ert-deftest test-ob-R/simple-session ()
(org-test-with-temp-text
"#+begin_src R :session R\n paste(\"Yep!\")\n#+end_src\n"
(should (string= "Yep!" (org-babel-execute-src-block))))))
#+end_src
#+begin_quote
ELISP> (macroexpand '(org-test-with-dependencies (("ESS" (featurep 'ess))) (ert-deftest foo () t)))
(progn
(ert-deftest foo nil :expected-result :failed
(error "Missing dependency: %s" "ESS")
t))
ELISP>
#end_quote
If this is acceptable I'd push it and start to adjust the test
definitions.
Best,
-- David
--
OpenPGP... 0x99ADB83B5A4478E6
Jabber.... dmjena@jabber.org
Email..... dmaus@ictsoc.de
[-- Attachment #2: Type: application/pgp-signature, Size: 230 bytes --]
next prev parent reply other threads:[~2011-11-13 16:18 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-18 4:32 [test] Mark tests with missing dependencies as "expected to fail" David Maus
2011-10-18 16:22 ` Eric Schulte
[not found] ` <CALbR62330+VdrP5sRHLa3Mre5HAi8+LkbkvkuxDGbyEjAApcJQ@mail.gmail.com>
2011-10-18 17:03 ` Fwd: " Brian Wightman
2011-11-13 16:18 ` David Maus [this message]
2011-11-13 19:31 ` Eric Schulte
2011-11-22 6:10 ` David Maus
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87zkg0ov13.wl%dmaus@ictsoc.de \
--to=dmaus@ictsoc.de \
--cc=emacs-orgmode@gnu.org \
--cc=schulte.eric@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.