summaryrefslogtreecommitdiff
path: root/doc/asciidoc/doc/testasciidoc.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/asciidoc/doc/testasciidoc.txt')
-rw-r--r--doc/asciidoc/doc/testasciidoc.txt231
1 files changed, 231 insertions, 0 deletions
diff --git a/doc/asciidoc/doc/testasciidoc.txt b/doc/asciidoc/doc/testasciidoc.txt
new file mode 100644
index 0000000..1d9a1ea
--- /dev/null
+++ b/doc/asciidoc/doc/testasciidoc.txt
@@ -0,0 +1,231 @@
+AsciiDoc Tests
+==============
+
+AsciiDoc includes 'testasciidoc', a Python script runs a set of
+AsciiDoc conformance tests. 'testasciidoc' runs through a list of
+AsciiDoc source files, generates backend outputs and then compares
+them to expected result files. The whole process is driven by a
+configuration file containing a list of user configurable test
+specifications.
+
+
+Rationale
+---------
+When modifying AsciiDoc configuration files or source code it's very
+easy to introduce regression errors. 'testasciidoc' is a tool for
+writing many and varied test cases that can be run after changes have
+been made in order to verify that existing behavior has not been
+broken.
+
+The 'testasciidoc' 'update' command automates the (re)generation of
+expected test result data. Result data regeneration has to be
+performed after changes to test case source files or after legitimate
+changes to the AsciiDoc output formats -- doing this manually is
+prohibitively tedious.
+
+
+Running testasciidoc
+--------------------
+The `testasciidoc.py` script and the default `testasciidoc.conf`
+configuration file are located in the AsciiDoc distribution `tests`
+directory.
+
+To view the command usage run:
+
+---------------------------------------------------------------------
+$ python tests/testasciidoc.py
+Usage: testasciidoc.py [OPTIONS] COMMAND
+
+Run AsciiDoc conformance tests specified in configuration FILE.
+
+Commands:
+ list List tests
+ run [NUMBER] [BACKEND] Execute tests
+ update [NUMBER] [BACKEND] Regenerate and update test data
+
+Options:
+ -f, --conf-file=CONF_FILE
+ Use configuration file CONF_FILE (default configuration file is
+ testasciidoc.conf in testasciidoc.py directory)
+ --force
+ Update all test data overwriting existing data
+---------------------------------------------------------------------
+
+To view the list of tests in the default `testasciidoc.conf`
+configuration file run the 'list' command:
+
+---------------------------------------------------------------------
+$ python tests/testasciidoc.py list
+1: Test cases
+2: Tables
+3: Source highlighter
+4: Example article
+5: Example book
+6: Example multi-part book
+7: !User Guide
+---------------------------------------------------------------------
+
+The '!' prefix signals that a test is currently disabled.
+
+Before running the tests you will need to regenerate the expected
+outputs by running the 'update' command:
+
+---------------------------------------------------------------------
+$ python tests/testasciidoc.py update
+WRITING: tests/data/testcases-html4.html
+WRITING: tests/data/testcases-xhtml11.html
+WRITING: tests/data/testcases-docbook.xml
+ :
+WRITING: tests/data/book-multi-docbook.xml
+---------------------------------------------------------------------
+
+Now you can run the tests:
+
+---------------------------------------------------------------------
+$ python tests/testasciidoc.py run
+1: Test cases
+SOURCE: asciidoc: tests/data/testcases.txt
+PASSED: html4: tests/data/testcases-html4.html
+PASSED: xhtml11: tests/data/testcases-xhtml11.html
+PASSED: docbook: tests/data/testcases-docbook.xml
+ :
+6: Example multi-part book
+SOURCE: asciidoc: doc/book-multi.txt
+PASSED: html4: tests/data/book-multi-html4.html
+PASSED: xhtml11: tests/data/book-multi-xhtml11.html
+PASSED: docbook: tests/data/book-multi-docbook.xml
+
+TOTAL PASSED: 18
+---------------------------------------------------------------------
+
+[NOTE]
+=====================================================================
+- 'testasciidoc' requires AsciiDoc is located in your environment
+ search path, if not you'll need to set the `ASCIIDOC_PY` environment
+ variable to point to `asciidoc.py`.
+- If you don't have GNU source-highlight installed you should disable
+ the 'Tables' and 'Source highlighter' tests in the
+ `tests/testasciidoc.conf` configuration file.
+=====================================================================
+
+
+testasciidoc commands
+---------------------
+'list'::
+ List test numbers and titles. A '!' title prefix signals that a
+ test is currently disabled.
+
+'run'::
+ Read and execute tests from the test configuration file. A test
+ specifies AsciiDoc test case source file and command options. The
+ test compares generated outputs to expected outputs and any
+ differences displayed as a diff. You can run selected tests by
+ specifying the test number and/or backend after the `run` command.
+ Examples:
+
+ python tests/testasciidoc.py run
+ python tests/testasciidoc.py run 3
+ python tests/testasciidoc.py run html4
+ python tests/testasciidoc.py run 3 html4
+
+'update'::
+ Generates and updates missing and out of date test output data
+ files, this eliminates one of the most time consuming aspect of test
+ management. Use the `--force` option to force updates.
+ Examples:
+
+ python tests/testasciidoc.py update
+ python tests/testasciidoc.py --force update 4
+
+NOTE: You can run or update disabled tests by explicitly specifying
+the test number.
+
+
+Test configuration file
+-----------------------
+The tests configuration file format consists of one or more test specs
+separated by a line of one or more percent characters. Each test spec
+consists of an optional test title and description followed by one or
+more optional directives (a directive starts with a percent
+character). A 'directive' consists begins with a line containing a '%'
+character followed by a directive name followed by zero or more lines
+of directive data.
+
+Test spec format
+~~~~~~~~~~~~~~~~
+---------------------------------------------------------------------
+Optional test title
+Optional test description...
+
+% name
+Optional base output file name. Defaults to base source file name.
+
+% source
+AsciiDoc source file name.
+
+% backends
+Optional list of backends to be tested(default is all backends).
+% options
+Optional list of command-line option tuples.
+
+% attributes
+Optional dictionary of attribute values.
+
+---------------------------------------------------------------------
+
+Example test spec:
+
+---------------------------------------------------------------------
+Example book
+
+% options
+['--section-numbers',('--doctype','book')]
+
+% attributes
+# Exclude date from document footer.
+{'docdate':None}
+
+% source
+../doc/book.txt
+---------------------------------------------------------------------
+
+TIP: Take a look at the default `tests/testasciidoc.conf`
+configuration file that comes with AsciiDoc.
+
+- Tests can be disabled by prefixing the test title with an
+ exclamation '!' character.
+- All relative file names are relative to the configuration file
+ directory.
+- Multiple tests must by separated by a `%` separator line (one or
+ more percent characters).
+- Lines starting with a percent character specify a test 'directive'
+ and may be followed by zero or more lines of directive data.
+- Directive data lines cannot start with a percent character.
+- Lines starting with a `#` hash character are ignored.
+- The 'source' directive data is a single line containing the
+ AsciiDoc source file name.
+- The 'options' directive data is a Python list of `(name,value)`
+ tuples specifying AsciiDoc command-line options. A string item is
+ equivalent to a `(name,None)` tuple.
+- The 'attributes' directive data specifies a Python dictionary
+ containing AsciiDoc attributes to be passed to AsciiDoc.
+
+globals directive
+~~~~~~~~~~~~~~~~~
+An optional 'globals' directive can precede all test specs, the
+globals directive data is a Python dictionary containing global
+values. Currently the only global is 'datadir', the directory
+containing expected output files (defaults to configuration file
+directory). For example:
+
+---------------------------------------------------------------------
+% globals
+{'datadir': 'data'}
+---------------------------------------------------------------------
+
+Expected output test data files are stored in the 'datadir' and are
+named after the corresponding AsciiDoc input source file. For example
+if the AsciiDoc file name is `article.txt` then the corresponding
+backend output files will be `article-html4.html`,
+`article-xhtml11.html`, `article-docbook.xml` (stored in the 'datadir'
+directory).