0
0
Fork 1
mirror of https://git.savannah.gnu.org/git/emacs/org-mode.git synced 2024-09-12 21:40:03 +00:00
org-mode/testing/README.org

95 lines
3.6 KiB
Org Mode
Raw Normal View History

2010-10-02 21:23:27 +00:00
#+OPTIONS: ^:nil
* Testing elisp files with ERT
The aim is to provide a few simple yet helpfull commands for testing
while hacking on elisp files. The entire thing is based on
conventions. You don't need to care for those conventions, but it
makes live easier.
Currently three commands are provided:
* =org-test-edit-buffer-file-tests= :: Open the file with tests for
the current buffer. If the file and it's parent directories do
not yet exist, create them. If the file did not yet exist,
insert a little template test to get started.
* =org-test-test-current-defun= :: Look up test files for defun at
point and execute the tests. This is done by searching an
elisp file with the name of the current defun plus ".el". In
case your point is in defun DEFUN in the file
=proj/lisp/FILE.el=, this command will search the directory tree
up until it finds a directory named =testing/=. If there is a
directory =proj/testing/= it assumes your tests are in
=proj/testing/lisp/FILE.el/DEFUN.el=. If that file is found, it
will be loaded and all ERT tests for the selector "^DEFUN" will
be executed. If that file does not exist, fall back on loading
=proj/testing/lisp/FILE.el/tests.el=.
* =org-test-test-buffer-file= :: Look up a test file for
`buffer-file-name' and execute the tests. This is done by
searching for a directory =testing/= from `buffer-file-name's
directory upwards and then apply the relative path to your
source file there. In case you're editing =proj/lisp/FILE.el=,
and a directory =proj/testing/= exists, this command will try to
load =proj/testing/lisp/FILE.el/tests.el= and other elisp files
in that directory. The resulting list of files will be loaded
and all ERT tests for selector "^FILE" will be executed. With
a prefix argument, load only =tests.el=.
* =org-test-run-all-tests= :: Run all tests for all lisp files and all
defuns in your project.
The first two commands call `ert-delete-all-tests' to make sure that
only the desired tests are executed. All functions load the test
files for each call, hence always a current version of tests are
used. (This might change in the future...)
* Getting started
You should obtain ERT by cloning Christian Ohler's public git
repository:
: sh$ git clone http://github.com/ohler/ert.git
Ensure that the =ert/= directory is in your loadpath:
: (add-to-list 'load-path "~/path/to/ert/")
*** Where to put the tests
The tests live in a directory (e.g. =proj/testing/=) that closely
resembles the directory structure below =proj/=.
For example let's assume a file =proj/lisp/FILE.el= exists. To write tests
for this file, create a directory structure in =proj/testing/= with the relative
path to your file plus the name of that file as directory:
=proj/testing/lisp/FILE.el/=
Org-test searches that directory for a file named =tests.el= and
executes all ERT tests that match the selector "=^FILE=".
To run a test, you might want to use one of the two commands
provided by =org-test.el= (see above).
* TODOs
*** TODO Setup a buffers for testing
***** TODO Compare the contents of such a buffer
...with a control file.
*** TODO Provide directory and file functions
Provide little services to help test writers with temporary
buffers, files and directories.
Or just use temp-files for that?
*** TODO let-bind different setups for tests
Maybe just provide an example on how to do that.