| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 | # -*- mode:org -*-#+TITLE: Org-mode Testing#+PROPERTY: results silent* DependenciesThe only dependency is [[http://www.emacswiki.org/emacs/ErtTestLibrary][ERT]] the Emacs testing library which ships withEmacs24.  If you are running an older version of Emacs and don'talready have ERT installed it can be installed from its old [[https://github.com/ohler/ert][gitrepository]].* Non-interactive batch testing from the command lineThe simplest way to run the Org-mode test suite is from the commandline with the following invocation.  Note that the paths below arerelative to the base of the Org-mode directory.Also note that many of the current tests uses babel evaluation...#+BEGIN_SRC sh :dir (expand-file-name "..")  # For Emacs earlier than 24, add -L /path/to/ert  emacs -Q --batch \        -L lisp/ -L testing/ -L testing/lisp -l lisp/org.el \        -l lisp/org-id.el -l testing/org-test.el \        --eval "(progn (org-reload) (setq org-confirm-babel-evaluate nil) \        (org-babel-do-load-languages 'org-babel-load-languages \        '((emacs-lisp . t) (sh . t) (org . t))))" \        -f org-test-run-batch-tests#+END_SRCThe options in the above command are explained below.| -Q      | ignores any personal configuration ensuring a vanilla Emacs instance is used || --batch | runs Emacs in "batch" mode with no gui and termination after execution       || -l      | loads Org-mode and the org mode test suite defined in testing/org-test.el    || --eval  | reloads Org-mode and allows evaluation of code blocks by the tests           || -f      | actually runs the tests using the `org-test-run-batch-tests' function        |* Interactive testing from within EmacsTo run the Org-mode test suite from a current Emacs instance simplyload and run the test suite with the following commands.1) First load the test suite.   #+BEGIN_SRC emacs-lisp :var here=(buffer-file-name)     (add-to-list 'load-path (file-name-directory here))     (require 'org-test)   #+END_SRC2) Disable babel evaluation confirmation   #+BEGIN_SRC emacs-lisp     (setq org-confirm-babel-evaluate)   #+END_SRC3) Then run the test suite,   #+BEGIN_SRC emacs-lisp     (org-test-run-all-tests)   #+END_SRC   or when a test fails run it interactively and investigate the   problem in the ERT results buffer.   How to run one test:   Use this as a demo example of a failing test   #+BEGIN_SRC emacs-lisp     (ert-deftest test-org/org-link-escape-ascii-character-demo-of-fail ()       (should (string= "%5B"  ;; expecting %5B is right                        (org-link-escape "[")))       (should (string= "%5C"  ;; expecting %5C is wrong, %5D right                        (org-link-escape "]"))))   #+END_SRC   or evaluate the ert-deftest form of the test you want to run.  Then   "M-x ert RET test-org/org-link-escape-ascii-character-demo-of-fail RET"   When not visible yet switch to the ERT results buffer named   "\*ert\*".  When a test failed the ERT results buffer shows the   details of the first "should" that failed.  See   (info "(ert)Running Tests Interactively") on how to re-run, start   the debugger etc.   How to run all tests of a single test file:   "M-x ert-delete-all-tests RET", confirm.  Open the file   ./lisp/test-*.el, "M-x eval-buffer RET", "M-x ert RET t RET"   Consider to set pp-escape-newlines nil before running the test when   looking at "should" in the ERT results buffer.  Especially when   using "l" to look at passed test results and possibly missing an   appropriate setting of pp-escape-newlines made only temporarily for   the running time of the test as e. g. tests using   org-test-table-target-expect-tblfm do.* Troubleshooting- If the value of the =org-babel-no-eval-on-ctrl-c-ctrl-c= is non-nil  then it will result in some test failure, as there are tests which  rely on this behavior.
 |