Unit testing
This commit is contained in:
		
							
								
								
									
										82
									
								
								tests/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								tests/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,82 @@ | ||||
| find_package(Qt5 COMPONENTS Test Core Network Widgets) | ||||
|  | ||||
| include_directories(${MMC_SRC}) | ||||
|  | ||||
| unset(MultiMC_TESTS) | ||||
| macro(add_unit_test name) | ||||
| 	unset(srcs) | ||||
| 	foreach(arg ${testname} ${ARGN}) | ||||
| 		list(APPEND srcs ${CMAKE_CURRENT_SOURCE_DIR}/${arg}) | ||||
| 	endforeach() | ||||
| 	add_executable(tst_${name} ${srcs}) | ||||
| 	qt5_use_modules(tst_${name} Test Core Network Widgets) | ||||
| 	target_link_libraries(tst_${name} MultiMC_common) | ||||
| 	add_test(tst_${name} tst_${name}) | ||||
| 	list(APPEND MultiMC_TESTS tst_${name}) | ||||
| endmacro() | ||||
|  | ||||
| macro(add_unit_test2 name) | ||||
| 	add_unit_test(${name} tst_${name}.cpp) | ||||
| endmacro() | ||||
|  | ||||
| # Tests START # | ||||
|  | ||||
| add_unit_test2(pathutils) | ||||
|  | ||||
| # Tests END # | ||||
| 	 | ||||
| set(COVERAGE_SOURCE_DIRS | ||||
|  ${MMC_SRC}/logic/* | ||||
|  ${MMC_SRC}/logic/lists/* | ||||
|  ${MMC_SRC}/logic/net/* | ||||
|  ${MMC_SRC}/logic/tasks/* | ||||
|  ${MMC_SRC}/gui/* | ||||
|  ${MMC_SRC}/gui/dialogs/* | ||||
|  ${MMC_SRC}/gui/widgets/* | ||||
|  ${MMC_SRC}/depends/settings/include/* | ||||
|  ${MMC_SRC}/depends/settings/src/* | ||||
|  ${MMC_SRC}/depends/util/include/* | ||||
|  ${MMC_SRC}/depends/util/src/* | ||||
| ) | ||||
|  | ||||
| if(MultiMC_CODE_COVERAGE) | ||||
| 	unset(MultiMC_RUN_TESTS) | ||||
| 	unset(MultiMC_TEST_COVERAGE_FILES) | ||||
|  | ||||
| 	foreach(test ${MultiMC_TESTS}) | ||||
| 		add_custom_target(MultiMC_RUN_TEST_${test} | ||||
| 		 COMMAND lcov -d ${CMAKE_CURRENT_BINARY_DIR} -z -q # clean test | ||||
| 				&& lcov -d ${MMC_BIN} -z -q # clean common | ||||
| 				&& lcov -d ${MMC_BIN}/depends/settings/CMakeFiles/libSettings.dir -z -q # clean settings | ||||
| 				&& lcov -d ${MMC_BIN}/depends/utils/CMakeFiles/libUtil.dir -z -q # clean utils | ||||
| 				&& ${MMC_BIN}/${test} -o coverage_${test}.out,xml # run test | ||||
| 				&& lcov -q --checksum -b ${MMC_SRC} -d ${CMAKE_CURRENT_BINARY_DIR} -c -o coverage_${test}.info # generate for test | ||||
| 				&& lcov -q --checksum -b ${MMC_SRC} -d ${MMC_BIN} -c -o coverage_common.info # generate for common | ||||
| 				&& lcov -q --checksum -b ${MMC_SRC} -d ${MMC_BIN}/depends/settings/CMakeFiles/libSettings.dir -c -o coverage_settings.info # generate for settings | ||||
| 				&& lcov -q --checksum -b ${MMC_SRC} -d ${MMC_BIN}/depends/util/CMakeFiles/libUtil.dir -c -o coverage_utils.info # generate for utils | ||||
| 				&& lcov -q --checksum -b ${MMC_SRC} -d . | ||||
| 					-a coverage_${test}.info -a coverage_common.info -a coverage_settings.info -a coverage_utils.info | ||||
| 					-o coverage_${test}-combined.info # combine test and common | ||||
| 				&& lcov -q --checksum -b ${MMC_SRC} --list-full-path --extract coverage_${test}-combined.info ${COVERAGE_SOURCE_DIRS} -o coverage_${test}-stripped.info # strip | ||||
| 		 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} | ||||
| 		 VERBATIM | ||||
| 		 DEPENDS ${test} | ||||
| 		 COMMENT "Running ${test}..." | ||||
| 		) | ||||
| 		list(APPEND MultiMC_TEST_COVERAGE_FILES coverage_${test}-stripped.info) | ||||
| 		list(APPEND MultiMC_RUN_TESTS MultiMC_RUN_TEST_${test}) | ||||
| 	endforeach(test) | ||||
|  | ||||
| 	add_custom_target(MultiMC_GENERATE_COVERAGE | ||||
| 	 DEPENDS ${MultiMC_RUN_TESTS} | ||||
| 	 COMMENT "Generating coverage files..." | ||||
| 	) | ||||
| 	add_custom_target(MultiMC_GENERATE_COVERAGE_HTML | ||||
| 	 COMMAND genhtml -t "MultiMC 5 Test Coverage" --num-spaces 4 --demangle-cpp --legend -o ${MMC_SRC}/html/coverage ${MultiMC_TEST_COVERAGE_FILES} | ||||
| 	 DEPENDS MultiMC_GENERATE_COVERAGE | ||||
| 	 COMMENT "Generating test coverage html..." | ||||
| 	) | ||||
| 	add_custom_target(MultiMC_RUN_TESTS DEPENDS MultiMC_GENERATE_COVERAGE_HTML) | ||||
| endif(MultiMC_CODE_COVERAGE) | ||||
|  | ||||
| add_subdirectory(data) | ||||
							
								
								
									
										31
									
								
								tests/TestUtil.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								tests/TestUtil.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include <QFile> | ||||
| #include <QCoreApplication> | ||||
| #include <QTest> | ||||
| #include <QDir> | ||||
|  | ||||
| #include "MultiMC.h" | ||||
|  | ||||
| struct TestsInternal | ||||
| { | ||||
|         static QByteArray readFile(const QString &fileName) | ||||
|         { | ||||
|                 QFile f(fileName); | ||||
|                 f.open(QFile::ReadOnly); | ||||
|                 return f.readAll(); | ||||
|         } | ||||
| }; | ||||
|  | ||||
| #define MULTIMC_GET_TEST_FILE(file) TestsInternal::readFile(QFINDTESTDATA( file )) | ||||
|  | ||||
| #define QTEST_GUILESS_MAIN_MULTIMC(TestObject) \ | ||||
| int main(int argc, char *argv[]) \ | ||||
| { \ | ||||
| 	char *argv_[] = { argv[0] }; \ | ||||
| 	int argc_ = 1; \ | ||||
| 	MultiMC app(argc_, argv_, QDir::temp().absoluteFilePath("MultiMC_Test")); \ | ||||
| 	app.setAttribute(Qt::AA_Use96Dpi, true); \ | ||||
| 	TestObject tc; \ | ||||
| 	return QTest::qExec(&tc, argc, argv); \ | ||||
| } | ||||
							
								
								
									
										4
									
								
								tests/data/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								tests/data/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| add_custom_target(MultiMC_Test_Data | ||||
|  ALL | ||||
|  COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} | ||||
| ) | ||||
							
								
								
									
										76
									
								
								tests/tst_pathutils.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								tests/tst_pathutils.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,76 @@ | ||||
| #include <QTest> | ||||
| #include "TestUtil.h" | ||||
|  | ||||
| #include "depends/util/include/pathutils.h" | ||||
|  | ||||
| class PathUtilsTest : public QObject | ||||
| { | ||||
| 	Q_OBJECT | ||||
| private | ||||
| slots: | ||||
| 	void initTestCase() | ||||
| 	{ | ||||
|  | ||||
| 	} | ||||
| 	void cleanupTestCase() | ||||
| 	{ | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	void test_PathCombine1_data() | ||||
| 	{ | ||||
| 		QTest::addColumn<QString>("result"); | ||||
| 		QTest::addColumn<QString>("path1"); | ||||
| 		QTest::addColumn<QString>("path2"); | ||||
|  | ||||
| #if defined(Q_OS_UNIX) | ||||
| 		QTest::newRow("unix 1") << "/abc/def/ghi/jkl" << "/abc/def" << "ghi/jkl"; | ||||
| 		QTest::newRow("unix 2") << "/abc/def/ghi/jkl" << "/abc/def/" << "ghi/jkl"; | ||||
| #elif defined(Q_OS_WIN) | ||||
| 		QTest::newRow("win, from C:") << "C:\\abc" << "C:" << "abc\\def"; | ||||
| 		QTest::newRow("win 1") << "C:\\abc\\def\\ghi\\jkl" << "C:\\abc\\def" << "ghi\\jkl"; | ||||
| 		QTest::newRow("win 2") << "C:\\abc\\def\\ghi\\jkl" << "C:\\abc\\def\\" << "ghi\\jkl"; | ||||
| #endif | ||||
| 	} | ||||
| 	void test_PathCombine1() | ||||
| 	{ | ||||
| 		QFETCH(QString, result); | ||||
| 		QFETCH(QString, path1); | ||||
| 		QFETCH(QString, path2); | ||||
|  | ||||
| 		QCOMPARE(PathCombine(path1, path2), result); | ||||
| 	} | ||||
|  | ||||
| 	void test_PathCombine2_data() | ||||
| 	{ | ||||
| 		QTest::addColumn<QString>("result"); | ||||
| 		QTest::addColumn<QString>("path1"); | ||||
| 		QTest::addColumn<QString>("path2"); | ||||
| 		QTest::addColumn<QString>("path3"); | ||||
|  | ||||
| #if defined(Q_OS_UNIX) | ||||
| 		QTest::newRow("unix 1") << "/abc/def/ghi/jkl" << "/abc" << "def" << "ghi/jkl"; | ||||
| 		QTest::newRow("unix 2") << "/abc/def/ghi/jkl" << "/abc/" << "def" << "ghi/jkl"; | ||||
| 		QTest::newRow("unix 3") << "/abc/def/ghi/jkl" << "/abc" << "def/" << "ghi/jkl"; | ||||
| 		QTest::newRow("unix 4") << "/abc/def/ghi/jkl" << "/abc/" << "def/" << "ghi/jkl"; | ||||
| #elif defined(Q_OS_WIN) | ||||
| 		QTest::newRow("win 1") << "C:\\abc\\def\\ghi\\jkl" << "C:\\abc" << "def" << "ghi\\jkl"; | ||||
| 		QTest::newRow("win 2") << "C:\\abc\\def\\ghi\\jkl" << "C:\\abc\\" << "def" << "ghi\\jkl"; | ||||
| 		QTest::newRow("win 3") << "C:\\abc\\def\\ghi\\jkl" << "C:\\abc" << "def\\" << "ghi\\jkl"; | ||||
| 		QTest::newRow("win 4") << "C:\\abc\\def\\ghi\\jkl" << "C:\\abc\\" << "def" << "ghi\\jkl"; | ||||
| #endif | ||||
| 	} | ||||
| 	void test_PathCombine2() | ||||
| 	{ | ||||
| 		QFETCH(QString, result); | ||||
| 		QFETCH(QString, path1); | ||||
| 		QFETCH(QString, path2); | ||||
| 		QFETCH(QString, path3); | ||||
|  | ||||
| 		QCOMPARE(PathCombine(path1, path2, path3), result); | ||||
| 	} | ||||
| }; | ||||
|  | ||||
| QTEST_GUILESS_MAIN_MULTIMC(PathUtilsTest) | ||||
|  | ||||
| #include "tst_pathutils.moc" | ||||
		Reference in New Issue
	
	Block a user