summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbuild/bmaketests79
-rwxr-xr-xbuild/buildtest (renamed from build/maketest.sh)0
-rwxr-xr-xconfigure.ac13
-rw-r--r--src/Makefile.am4
-rw-r--r--src/main.cpp17
5 files changed, 113 insertions, 0 deletions
diff --git a/build/bmaketests b/build/bmaketests
new file mode 100755
index 000000000..e1d980a98
--- /dev/null
+++ b/build/bmaketests
@@ -0,0 +1,79 @@
+#!/bin/sh
+
+cd ..
+
+dir=`pwd`
+
+export CC=gcc-4.5
+export CXX=g++-4.5
+
+export LANG=C
+export CXXFLAGS="-Wunreachable-code -Wmissing-field-initializers \
+-Wabi -Wdisabled-optimization -Wuninitialized \
+-Wvolatile-register-var -Winvalid-pch -Wredundant-decls \
+-Wnormalized=nfkc -Wmissing-format-attribute -Wmissing-noreturn \
+-Wswitch-default -Wsign-promo -Waddress -Wmissing-declarations \
+-Wctor-dtor-privacy -Wstrict-null-sentinel \
+-Wunused-parameter -Wlogical-op \
+-Wempty-body -Wsign-compare -Wclobbered -Wcast-align -Wcast-qual \
+-Wtype-limits -Wpointer-arith -Wundef -Wmissing-include-dirs \
+-Wignored-qualifiers -Winit-self -pedantic -Wall -ggdb3 -O2 -pipe \
+-Wpacked -Wshadow -Wunused -Wsynth \
+-Wbuiltin-macro-redefined -Wctor-dtor-privacy -Wdeprecated -Wextra \
+-Wendif-labels -Wformat=1 -Wimport -Wnon-virtual-dtor -Wpsabi \
+-Wsign-promo -Wwrite-strings -D_FORTIFY_SOURCE=2"
+
+autoreconf -i 2>../build/make.log
+
+result=$?
+if [ "$result" != 0 ]; then
+ echo autoreconf error
+ exit 1
+fi
+
+./configure --prefix=$dir/run \
+--datadir=$dir/run/share/games \
+--bindir=$dir/run/bin \
+--mandir=$dir/run/share/man \
+--enable-memdebug=yes \
+--with-internalguichan=yes \
+--enable-tcmalloc=no \
+--enable-googleprofiler=no \
+--enable-unittests=yes
+
+result=$?
+if [ "$result" != 0 ]; then
+ echo configure error
+ exit 1
+fi
+
+cd po
+#make -j5 update-po 2>../make1.log
+make -j5 update-gmo 2>../build/make1.log
+
+result=$?
+if [ "$result" != 0 ]; then
+ echo update-gmo error
+ exit 1
+fi
+
+cd ..
+make -j5 2>build/make2.log
+
+result=$?
+if [ "$result" != 0 ]; then
+ echo make error
+ exit 1
+fi
+
+make install
+
+result=$?
+if [ "$result" != 0 ]; then
+ echo make install error
+ exit 1
+fi
+
+cd run
+export GLIBCXX_FORCE_NEW=1
+./bin/manaplus
diff --git a/build/maketest.sh b/build/buildtest
index 61b20f0fe..61b20f0fe 100755
--- a/build/maketest.sh
+++ b/build/buildtest
diff --git a/configure.ac b/configure.ac
index ef92317d6..996ad3f3c 100755
--- a/configure.ac
+++ b/configure.ac
@@ -209,6 +209,19 @@ esac],[memdebug_enabled=false])
AM_CONDITIONAL(ENABLE_MEM_DEBUG, test x$memdebug_enabled = xtrue)
+# Enable unit tests
+AC_ARG_ENABLE(unittests,
+[ --enable-unittests Turn on unit tests],
+[case "${enableval}" in
+ yes) unittests_enabled=true
+LIBS="$LIBS -lgtest"
+ ;;
+ no) unittests_enabled=false ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-tests) ;;
+esac],[unittests_enabled=false])
+
+AM_CONDITIONAL(ENABLE_UNITTESTS, test x$unittests_enabled = xtrue)
+
# Enable tcmalloc
AC_ARG_ENABLE(tcmalloc,
[ --enable-tcmalloc Turn on tcmalloc],
diff --git a/src/Makefile.am b/src/Makefile.am
index 204c21bfc..62b762af6 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -21,6 +21,10 @@ else
manaplus_SOURCES =
endif
+if ENABLE_UNITTESTS
+manaplus_CXXFLAGS += -DUNITTESTS
+endif
+
if USE_INTERNALGUICHAN
manaplus_CXXFLAGS += -DUSE_INTERNALGUICHAN
manaplus_SOURCES += guichan/include/guichan/actionevent.hpp \
diff --git a/src/main.cpp b/src/main.cpp
index dc87ca9e0..f30e7bc62 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -35,6 +35,10 @@
#include "utils/stringutils.h"
#include "utils/xml.h"
+#ifdef UNITTESTS
+#include <gtest/gtest.h>
+#endif
+
#ifdef __MINGW32__
#include <windows.h>
#endif
@@ -210,6 +214,8 @@ static void parseOptions(int argc, char *argv[], Client::Options &options)
extern "C" char const *_nl_locale_name_default(void);
#endif
+#ifndef UNITTESTS
+// main for normal game usage
int main(int argc, char *argv[])
{
#if defined(__MINGW32__)
@@ -262,3 +268,14 @@ int main(int argc, char *argv[])
return client.testsExec();
}
}
+
+#else
+
+// main for unit testing
+int main(int argc, char **argv)
+{
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
+
+#endif