Library meant to simplify writing of tests. Very light-weight in the approach. Test syntax will be familiar to users of CUnit, however this is far more basic.
Dependents: CircularBufferTest
Tests are expected to take the form of macro-based statements, such as:
// An empty buffer should yield getSize() of zero TST_EQ( buffer.getSize(), 0, "Empty buffer: getSize()" );
You still have to do the hard work of coming up with the tests and writing code to implement them, but this library is intended to give you a "jump start" towards getting something with consistent output and keeping track of the number of passes/fails - just import the library, include the header and you're away.
See CircularBufferTest main.cpp for an example of how this library can be used
Revision 0:62a10b8392a4, committed 2014-01-19
- Comitter:
- johnb
- Date:
- Sun Jan 19 17:14:59 2014 +0000
- Commit message:
- Quick utility library to support testing
Changed in this revision
diff -r 000000000000 -r 62a10b8392a4 TestSupportLite.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TestSupportLite.cpp Sun Jan 19 17:14:59 2014 +0000 @@ -0,0 +1,42 @@ +/** + +Copyright 2014 John Bailey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +*/ + +#include "TestSupportLite.hpp" + +TestResults::TestResults() : m_passed( 0 ), m_total( 0 ) +{ +} + +void TestResults::registerResult( const bool p_passed ) +{ + m_total++; + if( p_passed ) + { + m_passed++; + } +} + +std::size_t TestResults::getCount( void ) const +{ + return m_total; +} + +std::size_t TestResults::getPassed( void ) const +{ + return m_passed; +}
diff -r 000000000000 -r 62a10b8392a4 TestSupportLite.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TestSupportLite.hpp Sun Jan 19 17:14:59 2014 +0000 @@ -0,0 +1,85 @@ +/** + @file + @brief Support routines for writing very simple test harnesses + + @author John Bailey + + @copyright Copyright 2014 John Bailey + + @section LICENSE + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +*/ + +#if !defined TESTSUPPORTLITE_HPP +#define TESTSUPPORTLITE_HPP + +#include <cstring> // for size_t + +/** Boiler plate test support for the TST_EQ, TST_TRUE, etc macros + \param _p Indicate whether or not the test passed + \param _t Description of the test +*/ +#define TST_BOILER( _p, _t) do { TEST_OUT( _p, _t ); if( !_p ) { FAIL_OUT(); } } while ( 0 ) + +/** Testing macro - expects _x and _q to be equal (using the equality operator) + \param _x Value to be compared + \param _y Value to be compared + \param _t Description of test +*/ +#define TST_EQ( _x, _y, _t ) do { bool passed = ((_x)==(_y)); TST_BOILER( passed, _t ); } while( 0 ) + +/** Testing macro - expects _x to be true + \param _x Value to be evaluated + \param _t Description of test +*/ +#define TST_TRUE( _x, _t ) do { bool passed = (_x); TST_BOILER( passed, _t ); } while( 0 ) + +/** Testing macro - expects _x to be false + \param _x Value to be evaluated + \param _t Description of test +*/ +#define TST_FALSE( _x, _t ) TST_TRUE( !( _x ), _t ) + +/** Tasks to be carried out when the tests are over */ +#define TST_DONE() do { DONE_OUT(); } while( 0 ) + +/** Currently a very simple class just to encapsulate a few test statistics + + Implemented as a class rather than a set of global variables to simplify + multiple instatitation +*/ +class TestResults +{ + protected: + /** Number of tests that have passed */ + std::size_t m_passed; + /** Total number of tests run so far */ + std::size_t m_total; + public: + /* Default initialiser */ + TestResults( void ); + + /* Register that a test has been run + \parap p_passed Whether or not the test passed successfully */ + void registerResult( const bool p_passed ); + + /* Query the total number of tests run so far */ + std::size_t getCount( void ) const; + + /* Query the number of tests passed so far */ + std::size_t getPassed( void ) const; +}; + +#endif // !defined TESTSUPPORTLITE_HPP \ No newline at end of file
diff -r 000000000000 -r 62a10b8392a4 TestSupportSimple.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TestSupportSimple.cpp Sun Jan 19 17:14:59 2014 +0000 @@ -0,0 +1,26 @@ +/** + +Copyright 2014 John Bailey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +*/ + +#include "TestSupportSimple.hpp" + +#if defined __CC_ARM +#include "mbed.h" +Serial pc(USBTX, USBRX); // tx, rx +#endif + +TestResults tst_glob;
diff -r 000000000000 -r 62a10b8392a4 TestSupportSimple.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TestSupportSimple.hpp Sun Jan 19 17:14:59 2014 +0000 @@ -0,0 +1,54 @@ +/** + @file + @brief Set up TestSupportLite for simple tests + + @author John Bailey + + @copyright Copyright 2014 John Bailey + + @section LICENSE + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +*/ + +#if !defined TESTSUPPORTSIMPLE_HPP +#define TESTSUPPORTSIMPLE_HPP + +#if defined __CC_ARM +#include "mbed.h" +extern Serial pc; +#define TS_PRINTF( ... ) pc.printf(__VA_ARGS__) +#else +#include <stdio.h> +#define TS_PRINTF( ... ) printf(__VA_ARGS__) +#endif + +#include "TestSupportLite.hpp" + +extern TestResults tst_glob; + +/** Text to be displayed for each test being run */ +#define TEST_TXT "[%03d] {%c} %s\r\n" + +/** Text to be displayed at the end of the test run */ +#define DONE_TXT "----- [%d tests run, %d passed]\r\n" + +/** Text to be displayed for failing tests */ +#define FAIL_TXT " Test at %s:%d\r\n" + +#define TEST_OUT( _p, _t ) do { tst_glob.registerResult( _p ); TS_PRINTF( TEST_TXT, tst_glob.getCount(), _p?'X':' ', _t ); } while (0) +#define DONE_OUT() do { TS_PRINTF( DONE_TXT, tst_glob.getCount(), tst_glob.getPassed() ); } while ( 0 ) +#define FAIL_OUT() do { TS_PRINTF( FAIL_TXT, __FILE__, __LINE__ ); } while ( 0 ) + +#endif \ No newline at end of file