xref: /Universal-ctags/docs/testing-ctags.rst (revision 794391fc62d05dda7931b22c6e35868742a5c528)
18c31bb07SMasatake YAMATO.. _testing_ctags:
28c31bb07SMasatake YAMATO
38c31bb07SMasatake YAMATO=============================================================================
48c31bb07SMasatake YAMATOTesting ctags
58c31bb07SMasatake YAMATO=============================================================================
68c31bb07SMasatake YAMATO
78c31bb07SMasatake YAMATO.. contents:: `Table of contents`
88c31bb07SMasatake YAMATO	:depth: 1
98c31bb07SMasatake YAMATO	:local:
108c31bb07SMasatake YAMATO
118c31bb07SMasatake YAMATO..	tmain.rst
128c31bb07SMasatake YAMATO
138c31bb07SMasatake YAMATO*Tmain*: a facility for testing main part
148c31bb07SMasatake YAMATO------------------------------------------------------------
158c31bb07SMasatake YAMATO
168c31bb07SMasatake YAMATO:Maintainer: Masatake YAMATO <yamato@redhat.com>
178c31bb07SMasatake YAMATO
188c31bb07SMasatake YAMATO----
198c31bb07SMasatake YAMATO
208c31bb07SMasatake YAMATO*Tmain* is introduced to test the area where *Units*
218c31bb07SMasatake YAMATOdoes not cover well.
228c31bb07SMasatake YAMATO
238c31bb07SMasatake YAMATO*Units* works fine for testing parsers. However, it
248c31bb07SMasatake YAMATOassumes something input is given to ctags command,
258c31bb07SMasatake YAMATOand a `tags` file is generated from ctags command.
268c31bb07SMasatake YAMATO
278c31bb07SMasatake YAMATOOther aspects cannot be tested. Such areas are files
288c31bb07SMasatake YAMATOand directories layout after installation, standard
298c31bb07SMasatake YAMATOerror output, exit status, etc.
308c31bb07SMasatake YAMATO
318c31bb07SMasatake YAMATOYou can run test cases with following command line:
328c31bb07SMasatake YAMATO
338c31bb07SMasatake YAMATO::
348c31bb07SMasatake YAMATO
358c31bb07SMasatake YAMATO	$ make tmain
368c31bb07SMasatake YAMATO
378c31bb07SMasatake YAMATO*Tmain* is still under development so I will not write
388c31bb07SMasatake YAMATOthe details here.
398c31bb07SMasatake YAMATO
408c31bb07SMasatake YAMATO
418c31bb07SMasatake YAMATOTo write a test case, see files under `Tmain/tmain-example.d`.
428c31bb07SMasatake YAMATOIn the example, *Tmain* does:
438c31bb07SMasatake YAMATO
448c31bb07SMasatake YAMATO1. runs new subshell and change the working directory to `Tmain/tmain-example.d`,
458c31bb07SMasatake YAMATO2. runs `run.sh` with `bash`,
468c31bb07SMasatake YAMATO3. captures stdout, stderr and exit status, and
478c31bb07SMasatake YAMATO4. compares them with `stdout-expected.txt`, `stderr-expected.txt`,
488c31bb07SMasatake YAMATO   and `exit-expected.txt`.
498c31bb07SMasatake YAMATO5. compares it with `tags-expected.txt` if run.sh generates `tags` file.
508c31bb07SMasatake YAMATO
518c31bb07SMasatake YAMATO`run.sh` is run with following 3 arguments:
528c31bb07SMasatake YAMATO
538c31bb07SMasatake YAMATO1. the path for the target ctags
548c31bb07SMasatake YAMATO2. the path for `builddir` directory
558c31bb07SMasatake YAMATO3. the path for the target readtags
568c31bb07SMasatake YAMATO
578c31bb07SMasatake YAMATOThe path for readtags is not reliable; readtags command is not
588c31bb07SMasatake YAMATOavailable if --disable-readcmd was given in configure time.  A case,
598c31bb07SMasatake YAMATOtesting the behavior of readtags, must verify the command existence
608c31bb07SMasatake YAMATOwith `test -x $3` before going into the main part of the test.
618c31bb07SMasatake YAMATO
628c31bb07SMasatake YAMATOWhen comparing `tags` file with `tags-expected.txt`, you
638c31bb07SMasatake YAMATOmust specify the path of `tags` explicitly with -o option
648c31bb07SMasatake YAMATOin ctags command line like::
658c31bb07SMasatake YAMATO
668c31bb07SMasatake YAMATO	CTAGS=$1
678c31bb07SMasatake YAMATO	BUILDDIR=$2
688c31bb07SMasatake YAMATO	${CTAGS} ... -o $BUILDDIR/tags ...
698c31bb07SMasatake YAMATO
708c31bb07SMasatake YAMATOThis makes it possible to keep the original source directory clean.
718c31bb07SMasatake YAMATO
728c31bb07SMasatake YAMATOSee also `tmain_run` and `tmain_compare` functions in `misc/units`.
738c31bb07SMasatake YAMATO
748c31bb07SMasatake YAMATOIf run.sh exits with code 77, the test case is skipped.
758c31bb07SMasatake YAMATOThe output to stdout is captured and printed as the reason
768c31bb07SMasatake YAMATOof skipping.
778c31bb07SMasatake YAMATO
788c31bb07SMasatake YAMATOTODO
798c31bb07SMasatake YAMATO~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
808c31bb07SMasatake YAMATO
818c31bb07SMasatake YAMATO* Run under valgrind
828c31bb07SMasatake YAMATO
838c31bb07SMasatake YAMATO..	tinst.rst
848c31bb07SMasatake YAMATO
858c31bb07SMasatake YAMATO*Tinst*: installation test
868c31bb07SMasatake YAMATO---------------------------------------------------------------------
878c31bb07SMasatake YAMATO
888c31bb07SMasatake YAMATO:Maintainer: Masatake YAMATO <yamato@redhat.com>
898c31bb07SMasatake YAMATO
908c31bb07SMasatake YAMATO-----
918c31bb07SMasatake YAMATO
928c31bb07SMasatake YAMATOtinst target is for testing the result of ``make install``.
938c31bb07SMasatake YAMATO
948c31bb07SMasatake YAMATO::
958c31bb07SMasatake YAMATO
968c31bb07SMasatake YAMATO   $ make tinst
978c31bb07SMasatake YAMATO
988c31bb07SMasatake YAMATOFussy syntax checking
998c31bb07SMasatake YAMATO------------------------------------------------------------
1008c31bb07SMasatake YAMATOIf ``-Wall`` of gcc is not enough, you may be interested in this.
1018c31bb07SMasatake YAMATO
1028c31bb07SMasatake YAMATOYou can change C compiler warning options with 'WARNING_CFLAGS'
1038c31bb07SMasatake YAMATOconfigure arg-var option.
1048c31bb07SMasatake YAMATO
1058c31bb07SMasatake YAMATO::
1068c31bb07SMasatake YAMATO
1078c31bb07SMasatake YAMATO   $ ./configure WARNING_CFLAGS='-Wall -Wextra'
1088c31bb07SMasatake YAMATO
1098c31bb07SMasatake YAMATO
1108c31bb07SMasatake YAMATOIf configure option '--with-sparse-cgcc' is specified,
1118c31bb07SMasatake YAMATOcgcc is used as CC. cgcc is part of `Sparse, Semantic Parser for C
1128c31bb07SMasatake YAMATO<https://sparse.docs.kernel.org/en/latest/>`_.
1138c31bb07SMasatake YAMATOIt is used in development of Linux kernel for finding programming error.
1148c31bb07SMasatake YAMATOcgcc acts as a c compiler but more fussy. '-Wsparse-all' is used as
1158c31bb07SMasatake YAMATOdefault option passed to cgcc but you can change with 'CGCC_CFLAGS'
1168c31bb07SMasatake YAMATOconfigure arg-var option.
1178c31bb07SMasatake YAMATO
1188c31bb07SMasatake YAMATO::
1198c31bb07SMasatake YAMATO
1208c31bb07SMasatake YAMATO   $ ./configure --with-sparse-cgcc [CGCC_CFLAGS='-Wsparse-all']
1218c31bb07SMasatake YAMATO
1228c31bb07SMasatake YAMATO
1238c31bb07SMasatake YAMATOFinding performance bottleneck
1248c31bb07SMasatake YAMATO------------------------------------------------------------
1258c31bb07SMasatake YAMATO
1268c31bb07SMasatake YAMATOSee `Profiling with gperftools
1278c31bb07SMasatake YAMATO<https://wiki.geany.org/howtos/profiling/gperftools>`_ and `#383
1288c31bb07SMasatake YAMATO<https://github.com/universal-ctags/ctags/issues/383>`_.
1298c31bb07SMasatake YAMATO
130*794391fcSMasatake YAMATOSee also `codebase <https://github.com/universal-ctags/codebase>`_.
131*794391fcSMasatake YAMATO
1328c31bb07SMasatake YAMATOChecking coverage
1338c31bb07SMasatake YAMATO------------------------------------------------------------
1348c31bb07SMasatake YAMATOBefore starting coverage measuring, you need to specify
1358c31bb07SMasatake YAMATO'--enable-coverage-gcov' configure option.
1368c31bb07SMasatake YAMATO
1378c31bb07SMasatake YAMATO::
1388c31bb07SMasatake YAMATO
1398c31bb07SMasatake YAMATO   $ ./configure --enable-coverage-gcov
1408c31bb07SMasatake YAMATO
1418c31bb07SMasatake YAMATO
1428c31bb07SMasatake YAMATOAfter doing ``make clean``, you can build coverage measuring ready
1438c31bb07SMasatake YAMATOctags by ``make``. At this time *\*.gcno* files are generated
1448c31bb07SMasatake YAMATOby the compiler. *\*.gcno* files can be removed with ``make clean``.
1458c31bb07SMasatake YAMATO
1468c31bb07SMasatake YAMATOAfter building ctags, you can run run-gcov target.  When running
1478c31bb07SMasatake YAMATO*\*.gcda* files.  The target runs ctags with all input files under
1488c31bb07SMasatake YAMATO*Units/\*\*/input.\**; and call ``gcov``. Human readable result is
1498c31bb07SMasatake YAMATOprinted. The detail can be shown in *\*.gcov*. files. *\*.gcda* files
1508c31bb07SMasatake YAMATOand *\*.gcov* files can be removed with ``make clean-gcov``.
1518c31bb07SMasatake YAMATO
1528c31bb07SMasatake YAMATORunning cppcheck
1538c31bb07SMasatake YAMATO------------------------------------------------------------
1548c31bb07SMasatake YAMATO
1558c31bb07SMasatake YAMATO.. NOT REVIEWED YET
1568c31bb07SMasatake YAMATO
1578c31bb07SMasatake YAMATO`cppcheck <http://cppcheck.sourceforge.net/>`_ is a tool for static C/C++ code
1588c31bb07SMasatake YAMATOanalysis.
1598c31bb07SMasatake YAMATO
1608c31bb07SMasatake YAMATOTo run it do as following after install cppcheck::
1618c31bb07SMasatake YAMATO
1628c31bb07SMasatake YAMATO   $ make cppcheck
163