| [19bc74] | 1 | /*
 | 
|---|
 | 2 |  * Project: MoleCuilder
 | 
|---|
 | 3 |  * Description: creates and alters molecular systems
 | 
|---|
 | 4 |  * Copyright (C)  2010 University of Bonn. All rights reserved.
 | 
|---|
 | 5 |  * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
 | 
|---|
 | 6 |  */
 | 
|---|
 | 7 | 
 | 
|---|
 | 8 | /**
 | 
|---|
 | 9 |  * \file code-tests.dox
 | 
|---|
 | 10 |  *
 | 
|---|
 | 11 |  * Created on: Oct 28, 2011
 | 
|---|
 | 12 |  *    Author: heber
 | 
|---|
 | 13 |  */
 | 
|---|
 | 14 | 
 | 
|---|
 | 15 | 
 | 
|---|
 | 16 | /**
 | 
|---|
 | 17 |  * \page codetest "Code tests"
 | 
|---|
 | 18 |  *
 | 
|---|
 | 19 |  * Code tests enforce certain principles which the programmer must follow.
 | 
|---|
 | 20 |  *
 | 
|---|
 | 21 |  * At this moment these are:
 | 
|---|
 | 22 |  * -# Every .cpp files must include \b config.h and \b CodePatterns/MemDebug.hpp
 | 
|---|
 | 23 |  * -# Every .hpp files must include \b config.h
 | 
|---|
| [750cff] | 24 |  * -# Every .dox file contains a (correctly formatted: YYYY-MM-DD) date stamp.
 | 
|---|
| [caece4] | 25 |  * -# Every .cpp file must contain a correct copyright header
 | 
|---|
 | 26 |  * -# Every .hpp file must be present in a Makefile.am (for distributable archive)
 | 
|---|
| [19bc74] | 27 |  *
 | 
|---|
 | 28 |  * These make sure that the memory debugger is catching every movement on the
 | 
|---|
| [750cff] | 29 |  * heap and that every module knows about the behavior controling \e #define's that
 | 
|---|
 | 30 |  * are checked by autoconf and written to \b config.h in the build directory. And
 | 
|---|
 | 31 |  * also that for every documentation file it is known when it was current.
 | 
|---|
| [19bc74] | 32 |  *
 | 
|---|
| [750cff] | 33 |  * \section codetest-structure Directory structure
 | 
|---|
| [19bc74] | 34 |  *
 | 
|---|
 | 35 |  * The code tests are contained in \b tests/CodeChecks. Therein are all test
 | 
|---|
 | 36 |  * scripts gathered that use autotest (http://www.gnu.org/s/hello/manual/autoconf/Using-Autotest.html#Using-Autotest).
 | 
|---|
 | 37 |  * Mostly, these look through files
 | 
|---|
 | 38 |  *
 | 
|---|
| [750cff] | 39 |  * \section codetest-launch-all Launching all tests
 | 
|---|
| [19bc74] | 40 |  *
 | 
|---|
| [750cff] | 41 |  *  In order to launch all tests, simply do:
 | 
|---|
 | 42 |  *  -# Enter \b tests/CodeChecks in your build directory
 | 
|---|
 | 43 |  *  -# Run
 | 
|---|
 | 44 |  *    \code make check \endcode
 | 
|---|
 | 45 |  *    there
 | 
|---|
| [19bc74] | 46 |  *
 | 
|---|
| [750cff] | 47 |  * \section codetest-launch-some Launching some tests
 | 
|---|
| [19bc74] | 48 |  *
 | 
|---|
| [750cff] | 49 |  *  Launching a single or just some of the tests is only a little bit more
 | 
|---|
 | 50 |  *  complicated. Proceed as follows:
 | 
|---|
 | 51 |  *  -# Enter \b tests/CodeChecks in your build directory
 | 
|---|
 | 52 |  *  -# Run
 | 
|---|
 | 53 |  *  \code ../../../tests/CodeChecks/testsuite <option> AUTOTEST_PATH="<buildpath>/src" \endcode,
 | 
|---|
 | 54 |  *  where \a <option> is explained in the subsections below and \a <buildpath> is
 | 
|---|
 | 55 |  *  the build path (i.e. the variable \a AUTOTEST_PATH should contain the path to
 | 
|---|
 | 56 |  *  the executable).
 | 
|---|
| [19bc74] | 57 |  *
 | 
|---|
| [750cff] | 58 |  *  \subsection regressiontest-launch-by-number ... by number
 | 
|---|
| [19bc74] | 59 |  *
 | 
|---|
| [750cff] | 60 |  *    Tests can be launched by specifying their test number, e.g. then \a <option>
 | 
|---|
 | 61 |  *    might be \a 1 or \a 1-2 or just nothing for all of them.
 | 
|---|
 | 62 |  *
 | 
|---|
 | 63 |  *  \subsection regressiontest-launch-by-keyword .. by keyword
 | 
|---|
 | 64 |  *
 | 
|---|
 | 65 |  *    Tests may as well be launched by some keywords, e.g. each code check has
 | 
|---|
 | 66 |  *    a specific keyword which is given via \b AT_KEYWORD directive of Autotest.
 | 
|---|
 | 67 |  *    I.e. we may launch the test on \b config.h presence via the \a <option>
 | 
|---|
 | 68 |  *    \a -k \a config_h. Also multiple keywords may be given.
 | 
|---|
 | 69 |  *
 | 
|---|
 | 70 |  * \section codetest-results Inspecting results
 | 
|---|
 | 71 |  *
 | 
|---|
 | 72 |  *  The testsuite can be launched with the additional option of \a -d which leaves the
 | 
|---|
 | 73 |  *  directory of the test present even though the test has passed for inspection.
 | 
|---|
 | 74 |  *
 | 
|---|
 | 75 |  *  If a test fails, in whatever way it was launched, will leave in the build directory
 | 
|---|
 | 76 |  *  a folder \b tests/CodeChecks/testsuite.dir/<nr> where \a <nr> is the number of the
 | 
|---|
 | 77 |  *  test (padded maybe with some zeros).
 | 
|---|
 | 78 |  *
 | 
|---|
 | 79 |  *  In the current state tests will fail because one file does not include \b
 | 
|---|
 | 80 |  *  config.h or \b MemDebug.hpp. Hence, check the testsuite's log to get the file
 | 
|---|
 | 81 |  *  name of the culprit at its very bottom.
 | 
|---|
 | 82 |  *
 | 
|---|
 | 83 |  * \section unittest-add Adding new tests
 | 
|---|
 | 84 |  *
 | 
|---|
 | 85 |  *  \attention Name convention of files, (no spaces, use underscore) e.g.
 | 
|---|
 | 86 |  *  \b testsuite-config_h.at
 | 
|---|
 | 87 |  *  - the test script file should be called as follows:
 | 
|---|
 | 88 |  *    -# testsuite-...
 | 
|---|
 | 89 |  *    -# followed by the construct that is tested.
 | 
|---|
 | 90 |  *
 | 
|---|
 | 91 |  *  In order to add a new test, you have to do the following:
 | 
|---|
 | 92 |  *  -# Add a new \b testsuite-....at script to the folder \b tests/CodeChecks
 | 
|---|
 | 93 |  *    (have a look at the present ones and see above for help on the commands
 | 
|---|
 | 94 |  *    recognized by Autotest. \e Mind \e giving it a suitable \e keyword!).
 | 
|---|
 | 95 |  *  -# Add the file to Makefile.am such that the testsuite is re-created when
 | 
|---|
 | 96 |  *    you change the test script.
 | 
|---|
 | 97 |  *  -# Add the file as an \e m4_include directive to testsuite.at.
 | 
|---|
 | 98 |  *
 | 
|---|
| [caece4] | 99 |  *  These files may also contain exceptions which are stored as a simple list of
 | 
|---|
 | 100 |  *  files for which one of the above rules does not apply.
 | 
|---|
| [750cff] | 101 |  *
 | 
|---|
| [caece4] | 102 |  * \date 2014-03-10
 | 
|---|
| [19bc74] | 103 |  *
 | 
|---|
 | 104 |  */
 | 
|---|