tta/tests/README

  Copyright 2010-2026 Free Software Foundation, Inc.

  Copying and distribution of this README file, with or without
  modification, are permitted in any medium without royalty provided the
  copyright notice and this notice are preserved.

Files anywhere within the texinfo/tta/tests/ subdirectory which have no
other copyright notice are hereby placed in the public domain.

This directory contains tests of the texi2any program.

Prerequisites
=============
To run this testsuite, sed, awk, diff (with -u) are used. 
For LaTeX2HTML tests (not run by default), mktemp 
understanding the -d option is also required.

Some tests may also require a case insensitive filesystem.


Running the testsuite
=====================
This testsuite can be run one of the following ways:

* Using the makefile rules: "make -k check" (in this directory)
These tests use the scripts under the test_scripts directory.

* Using ./run_parser_all.sh with the directories one want to run the 
tests in given as arguments, for example "./run_parser_all.sh -dir formatting".
To run just one test, give the test name, e.g.
"./run_parser_all.sh -dir formatting cond".

Checking test results
---------------------
The test results are in the out_parser directories; the reference
results are in res_parser directories.  There can be these pairs.
- out_parser/ and res_parser/ for the default setting;
- out_parser_html/ and res_parser_html/ for html output;
- out_parser_info/ and res_parser_info/ for info results;
and diffs are put in the diffs/ subdir.

For example, to investigate a failure in the 
test_scripts/layout_formatting_docbook.sh test, compare the contents of the
files in the layout_res_parser/formatting_docbook and 
layout_out_parser/formatting_docbook directories, e.g.

diff {res,out}_parser/formatting_docbook/formatting.2

Also look in the layout/diffs directory.

If the test results are as expected, copy the output files onto the 
reference files.  Otherwise, if they need more investigation, see "Tests 
specification" below, to find out what input file, etc. was used for the 
test.  Sometimes you need to use "texi2any -F" to force an output file 
to be created.

When running tests via parser_tests.sh or run_parser_all.sh, then
a test failure causes
 F: a_test_directory
to be printed.  If there is a diff with the references, then
 D: a_test_directory
is printed. If there are no reference to compare with, then
 no res: a_test_directory
is printed.

If a whole directory check run using './parser_tests.sh' had no failure, 
the directory name is printed followed by a ok; it is followed
by a fail if there was a failure.

The test results are in a directory below the out directories. This 
directory name can be considered as the test name. Let's call it a_test
for the remainder of the explanation. The stderr output is in 
out_parser/a_test/a_test.2, stdout output is in 
out_parser/a_test/a_test.1.  All the commands called are output in 
tests.log.

Note that "make all-checks" also runs the testsuite, but also runs
TeX4ht and LaTeX2HTML tests and other tests that are not as portable
as the main testsuite and may require additional softwares.  See
below for more.


Regenerating test results
=========================
To update the test results, first the tests must be run as above.
A quick way to update all the tests is to run "make -k check copy-tests".

Giving -copy as the first argument to ../run_parser_all.sh or
parser_tests.sh will cause the reference results to be copied
from the results the last time the tests were run.  For example,
to update the reference results for one particular test:

$ ./parser_tests.sh -copy formatting
The copy-* make targets update all the references for various large sets
of tests via this method.

Exception: in the many_input_files subdirectory, the *parser*.sh scripts
can't be used for updating.  Instead, the Makefile's copy-tests and
copy-tex-html targets do it directly.


Testsuite and document strings translations
===========================================
At least one test, layout/formatting_fr_icons, depends heavily on
the translation of strings that can be translated and incorporated in
output documents.  The translations are in the po_document directory.
These translations are managed by the translation project and only
updated for the release.  They may lag behind the changes in code,
which may be problematic for test results.  The translations in
po_document should never be changed, as they will be overwritten by
the translation project.  If the translations need to be modified
for the test results, a filter script should be used instead.  An
example of such a script can be seen in po_document/fix-translations.sh.


Test requiring recoded file names
=================================

Some test require the possibility to recode file names, in general from
UTF-8 to a non UTF-8 encoding whan the test require a file name in a
non UTF-8 encoding.  The recoding of file names required by these
tests are done by make check, and it is possible to do it manually
with make input_file_names_recoded_stamp.txt.  If the recoding fails,
for instance if the recoding leads to invalid UTF-8 and the file system does
not accept invalid UTF-8, input_file_names_recoded_stamp.txt will contain
FAILED, and the test requiring the files with recoded file names will
be skipped.  The recoded files are generated in the built_input/ directory.

Tests requiring other non-ASCII file names
==========================================

There are rules in Makefile.am to generate input/non_ascii.tar which
contains test input files with non-ASCII characters in their names.
This allows us to create a distribution tarball without such files.
If these input files change, you may need to force regeneration of
non_ascii.tar by deleting the file.

TeX4ht and LaTeX2HTML tests
===========================
The tex4ht and latex2HTML related tests are not run automatically, as
some test results involving latex2HTML or tex4ht depend on the setup and 
version of these tools.

These tests may be run by
  make tex-html-checks
or, together with all the other tests by
  make all-checks

For the tests that use latex2html, to avoid the test failing if there is 
a dot in the cwd, mktemp is used to create a temporary directory, and 
the directory is passed through on the command line.


Other tests requiring specific softwares
========================================
Other tests requiring specific software are not run automatically, as
they may depend on the version of these specific software and require
these software to be present.  The required software are source-highlight
and latex with the preview package.  dvipng is also required for some
tests, if not found the tests will be skipped.

These tests may be run by
  make other-checks
or, together with all the other tests by
  make all-checks


Tests specification
===================
Test runs are driven by the contents of the list-of-tests file in
each subdirectory. This is a line-oriented file. A # starts a
comment.
The very first comment line of the file can be special, with
# formats :_html
which says which formats to generate.  If no format is specified, like
# formats :
no format is set on the command line.  Multiple formats can be
specified, like
# formats : :_info
in which no format and info are both generated.  If no format is
specified on the first line, the default formats specification which is
# formats :
is used.

Otherwise, each non-empty non-comment line describes a test.  The first
word on the line is the test name which corresponds also with the
resulting directory (what we called a_test above).  It is followed by
the source manual name. The source manual name has to have the .texi
extension.  Optionally, additional arguments can be given on the rest of
the line.

So, for example, the line

a_test manual.texi

specifies that for the test a_test, the file manual.texi is processed
and results are put are put in the a_test directory.  The line:

a_test_split_chapter manual.texi --split chapter

specifies that the results of the processing of manual.texi with additional
command line arguments --split chapter will be in the a_test_split_chapter
directory.

"Need recoded file names" should appear on a line for a test requiring
recoded file names. for example

manual_include_accented_file_name_latin1 manual_include_accented_file_name_latin1.texi -D 'needrecodedfilenames Need recoded file names'

Common .texi
------------
A common .texi file should be in the top-level directory (there is such an
example with coverage_macro.texi).

Init files
----------
Init files are searched for in ../perl/t/init/, ../perl/init and ../perl/ext.


Creating a new test
===================
- choose the subdir here for the new test.  Each subdir only generates
output in one or two formats (according to the `formats' line in
its list-of-tests), so if you want to test a particular output
format, use the right place.

- add the line to subdir/list-of-tests as described above.
- most probably, create the needed subdir/*.texi file
- ./run_parser_all.sh -dir subdir newtest

This will create subdir/out_parser*/newtest/ with the test results
(as explained above), as well as stdout in newtest.1 and stderr in newtest.2.
Look carefully to be sure they are as they should be.

For XML output, perhaps check validity using the commands in tta/TODO.

When things look good, use the -copy option to create the
subdir/res_parser*/newtest/ subdirs and copy the output files there.

The test run will be logged in subdir/test_log/newtest.log,
including the exact invocation of texi2any, which can alter anything.
For even more, use sh -vx to show exactly what run_parser_all is doing.

When satisfied, add the .texi in subdir/Makefile.am.

Of course commit all the files and try a make check afterward to verify
it gets run, and passes.

See tta/perl/t/README for info about those tests.


Deleting a test
===============

Run "make" to recreate the test scripts (which runs
../maintain/regenerate_cmd_tests.sh).

git status test_scripts/

Then "git rm" the missing files.

Delete directories containing reference test results, e.g.

ls -d formatting/*/unknown_nodes_renamed
rm -r formatting/out_parser/unknown_nodes_renamed
git rm formatting/res_parser/unknown_nodes_renamed

