Unit tests must be done at integration process.

* Remove --enable-unittests and --disable-unittests and add --do-unittests function
* --do-unittests function will exit 0 on success.
* minetest and minetestserver binaries are launched with --do-unittests in travis build.
This commit is contained in:
Loic Blot 2015-02-19 09:38:01 +01:00
parent 38e6280552
commit b3aeba684b
4 changed files with 21 additions and 28 deletions

@ -355,6 +355,10 @@ add_subdirectory(jthread)
add_subdirectory(script)
add_subdirectory(util)
set (unittests_SRCS
test.cpp
)
set(common_SRCS
ban.cpp
base64.cpp
@ -422,7 +426,6 @@ set(common_SRCS
sound.cpp
staticobject.cpp
subgame.cpp
test.cpp
tool.cpp
treegen.cpp
version.cpp
@ -435,6 +438,7 @@ set(common_SRCS
${JTHREAD_SRCS}
${common_SCRIPT_SRCS}
${UTIL_SRCS}
${unittests_SRCS}
)
# This gives us the icon and file version information

@ -17,19 +17,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifdef NDEBUG
/*#ifdef _WIN32
#pragma message ("Disabling unit tests")
#else
#warning "Disabling unit tests"
#endif*/
// Disable unit tests
#define ENABLE_TESTS 0
#else
// Enable unit tests
#define ENABLE_TESTS 1
#endif
#ifdef _MSC_VER
#ifndef SERVER // Dedicated server isn't linked with Irrlicht
#pragma comment(lib, "Irrlicht.lib")
@ -279,9 +266,9 @@ int main(int argc, char *argv[])
#ifndef __ANDROID__
// Run unit tests
if ((ENABLE_TESTS && cmd_args.getFlag("disable-unittests") == false)
|| cmd_args.getFlag("enable-unittests") == true) {
if (cmd_args.getFlag("do-unittests")) {
run_tests();
return 0;
}
#endif
@ -352,10 +339,8 @@ static void set_allowed_options(OptionList *allowed_options)
_("Load configuration from specified file"))));
allowed_options->insert(std::make_pair("port", ValueSpec(VALUETYPE_STRING,
_("Set network port (UDP)"))));
allowed_options->insert(std::make_pair("disable-unittests", ValueSpec(VALUETYPE_FLAG,
_("Disable unit tests"))));
allowed_options->insert(std::make_pair("enable-unittests", ValueSpec(VALUETYPE_FLAG,
_("Enable unit tests"))));
allowed_options->insert(std::make_pair("do-unittests", ValueSpec(VALUETYPE_FLAG,
_("Run the unit tests and exit"))));
allowed_options->insert(std::make_pair("map-dir", ValueSpec(VALUETYPE_STRING,
_("Same as --world (deprecated)"))));
allowed_options->insert(std::make_pair("world", ValueSpec(VALUETYPE_STRING,

@ -2132,9 +2132,9 @@ void run_tests()
TEST(TestCollision);
if(INTERNET_SIMULATOR == false){
TEST(TestSocket);
dout_con<<"=== BEGIN RUNNING UNIT TESTS FOR CONNECTION ==="<<std::endl;
dout_con << "=== BEGIN RUNNING UNIT TESTS FOR CONNECTION ===" << std::endl;
TEST(TestConnection);
dout_con<<"=== END RUNNING UNIT TESTS FOR CONNECTION ==="<<std::endl;
dout_con << "=== END RUNNING UNIT TESTS FOR CONNECTION ===" << std::endl;
}
log_set_lev_silence(LMT_ERROR, false);
@ -2142,13 +2142,13 @@ void run_tests()
delete idef;
delete ndef;
if(tests_failed == 0){
infostream<<"run_tests(): "<<tests_failed<<" / "<<tests_run<<" tests failed."<<std::endl;
infostream<<"run_tests() passed."<<std::endl;
if(tests_failed == 0) {
actionstream << "run_tests(): " << tests_failed << " / " << tests_run << " tests failed." << std::endl;
actionstream << "run_tests() passed." << std::endl;
return;
} else {
errorstream<<"run_tests(): "<<tests_failed<<" / "<<tests_run<<" tests failed."<<std::endl;
errorstream<<"run_tests() aborting."<<std::endl;
errorstream << "run_tests(): " << tests_failed << " / " << tests_run << " tests failed." << std::endl;
errorstream << "run_tests() aborting." << std::endl;
abort();
}
}

@ -3,8 +3,12 @@
if [ $WINDOWS = "no" ]; then
mkdir -p travisbuild
cd travisbuild
cmake -DENABLE_GETTEXT=1 -DENABLE_LEVELDB=1 -DENABLE_REDIS=1 ..
cmake -DENABLE_GETTEXT=1 -DENABLE_LEVELDB=1 -DENABLE_REDIS=1 -DCMAKE_BUILD_TYPE=Debug ..
make -j2
echo "Running unit tests for minetest"
../bin/minetest --do-unittests
echo "Running unit tests for minetestserver"
../bin/minetestserver --do-unittests
else
[ $CC = "clang" ] && exit 1 # Not supposed to happen
# We need to have our build directory outside of the minetest directory because