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