summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2016-04-13 01:24:55 +0200
committerPetr Mrázek <peterix@gmail.com>2016-05-01 00:01:39 +0200
commite8ba5dafc63de65ed8a469353b808e391633f0fc (patch)
tree1e7d8c340bd68ae339904dde867875226f10b150 /cmake
parented3884fd38c26185522248994c79c9525b8892ad (diff)
downloadMultiMC-e8ba5dafc63de65ed8a469353b808e391633f0fc.tar
MultiMC-e8ba5dafc63de65ed8a469353b808e391633f0fc.tar.gz
MultiMC-e8ba5dafc63de65ed8a469353b808e391633f0fc.tar.lz
MultiMC-e8ba5dafc63de65ed8a469353b808e391633f0fc.tar.xz
MultiMC-e8ba5dafc63de65ed8a469353b808e391633f0fc.zip
NOISSUE remove dead unit tests and reorganize CMake code related to unit tests
Diffstat (limited to 'cmake')
-rw-r--r--cmake/UnitTest.cmake49
-rw-r--r--cmake/UnitTest/TestUtil.h28
-rw-r--r--cmake/UnitTest/generate_test_data.cmake26
-rw-r--r--cmake/UnitTest/test.manifest27
-rw-r--r--cmake/UnitTest/test.rc28
5 files changed, 158 insertions, 0 deletions
diff --git a/cmake/UnitTest.cmake b/cmake/UnitTest.cmake
new file mode 100644
index 00000000..1cbb2b60
--- /dev/null
+++ b/cmake/UnitTest.cmake
@@ -0,0 +1,49 @@
+find_package(Qt5Test REQUIRED)
+
+set(TEST_RESOURCE_PATH ${CMAKE_CURRENT_LIST_DIR})
+
+message(${TEST_RESOURCE_PATH})
+
+function(add_unit_test name)
+ set(options "")
+ set(oneValueArgs DATA)
+ set(multiValueArgs SOURCES LIBS QT)
+
+ cmake_parse_arguments(OPT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
+
+ if(WIN32)
+ add_executable(tst_${name} ${OPT_SOURCES} ${TEST_RESOURCE_PATH}/UnitTest/test.rc)
+ else()
+ add_executable(tst_${name} ${OPT_SOURCES})
+ endif()
+
+ if(NOT "${OPT_DATA}" STREQUAL "")
+ set(TEST_DATA_PATH "${CMAKE_CURRENT_BINARY_DIR}/data")
+ set(TEST_DATA_PATH_SRC "${CMAKE_CURRENT_SOURCE_DIR}/${OPT_DATA}")
+ message("From ${TEST_DATA_PATH_SRC} to ${TEST_DATA_PATH}")
+ string(REGEX REPLACE "[/\\:]" "_" DATA_TARGET_NAME "${TEST_DATA_PATH_SRC}")
+ if(UNIX)
+ # on unix we get the third / from the filename
+ set(TEST_DATA_URL "file://${TEST_DATA_PATH}")
+ else()
+ # we don't on windows, so we have to add it ourselves
+ set(TEST_DATA_URL "file:///${TEST_DATA_PATH}")
+ endif()
+ if(NOT TARGET "${DATA_TARGET_NAME}")
+ add_custom_target(${DATA_TARGET_NAME})
+ add_dependencies(tst_${name} ${DATA_TARGET_NAME})
+ add_custom_command(
+ TARGET ${DATA_TARGET_NAME}
+ COMMAND ${CMAKE_COMMAND} "-DTEST_DATA_URL=${TEST_DATA_URL}" -DSOURCE=${TEST_DATA_PATH_SRC} -DDESTINATION=${TEST_DATA_PATH} -P ${TEST_RESOURCE_PATH}/UnitTest/generate_test_data.cmake
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ )
+ endif()
+ endif()
+
+ target_link_libraries(tst_${name} ${OPT_LIBS})
+ qt5_use_modules(tst_${name} Test ${OPT_QT})
+
+ target_include_directories(tst_${name} PRIVATE "${TEST_RESOURCE_PATH}/UnitTest/")
+
+ add_test(NAME ${name} COMMAND tst_${name})
+endfunction()
diff --git a/cmake/UnitTest/TestUtil.h b/cmake/UnitTest/TestUtil.h
new file mode 100644
index 00000000..84f18a2e
--- /dev/null
+++ b/cmake/UnitTest/TestUtil.h
@@ -0,0 +1,28 @@
+#pragma once
+
+#include <QFile>
+#include <QCoreApplication>
+#include <QTest>
+#include <QDir>
+
+#define expandstr(s) expandstr2(s)
+#define expandstr2(s) #s
+
+class TestsInternal
+{
+public:
+ static QByteArray readFile(const QString &fileName)
+ {
+ QFile f(fileName);
+ f.open(QFile::ReadOnly);
+ return f.readAll();
+ }
+ static QString readFileUtf8(const QString &fileName)
+ {
+ return QString::fromUtf8(readFile(fileName));
+ }
+};
+
+#define MULTIMC_GET_TEST_FILE(file) TestsInternal::readFile(QFINDTESTDATA(file))
+#define MULTIMC_GET_TEST_FILE_UTF8(file) TestsInternal::readFileUtf8(QFINDTESTDATA(file))
+
diff --git a/cmake/UnitTest/generate_test_data.cmake b/cmake/UnitTest/generate_test_data.cmake
new file mode 100644
index 00000000..9de7410b
--- /dev/null
+++ b/cmake/UnitTest/generate_test_data.cmake
@@ -0,0 +1,26 @@
+# Copy files from source directory to destination directory, substituting any
+# variables. Create destination directory if it does not exist.
+
+function(configure_files srcDir destDir)
+ message(STATUS "Configuring directory ${destDir} from ${srcDir}")
+ make_directory(${destDir})
+
+ file(GLOB templateFiles RELATIVE ${srcDir} ${srcDir}/*)
+ foreach(templateFile ${templateFiles})
+ set(srcTemplatePath ${srcDir}/${templateFile})
+ if(NOT IS_DIRECTORY ${srcTemplatePath})
+ message(STATUS "Configuring file ${templateFile}")
+ configure_file(
+ ${srcTemplatePath}
+ ${destDir}/${templateFile}
+ @ONLY
+ NEWLINE_STYLE LF
+ )
+ else()
+ message(STATUS "Recursing? ${srcTemplatePath}")
+ configure_files("${srcTemplatePath}" "${destDir}/${templateFile}")
+ endif()
+ endforeach()
+endfunction()
+
+configure_files(${SOURCE} ${DESTINATION}) \ No newline at end of file
diff --git a/cmake/UnitTest/test.manifest b/cmake/UnitTest/test.manifest
new file mode 100644
index 00000000..8b4dbb98
--- /dev/null
+++ b/cmake/UnitTest/test.manifest
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
+ <assemblyIdentity name="MultiMC.Test.0" type="win32" version="5.0.0.0" />
+ <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
+ <security>
+ <requestedPrivileges>
+ <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
+ </requestedPrivileges>
+ </security>
+ </trustInfo>
+ <dependency>
+ <dependentAssembly>
+ <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"/>
+ </dependentAssembly>
+ </dependency>
+ <description>Custom Minecraft launcher for managing multiple installs.</description>
+ <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+ <application>
+ <!--The ID below indicates app support for Windows Vista -->
+ <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
+ <!--The ID below indicates app support for Windows 7 -->
+ <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
+ <!--The ID below indicates app support for Windows Developer Preview / Windows 8 -->
+ <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
+ </application>
+ </compatibility>
+</assembly> \ No newline at end of file
diff --git a/cmake/UnitTest/test.rc b/cmake/UnitTest/test.rc
new file mode 100644
index 00000000..a288dba6
--- /dev/null
+++ b/cmake/UnitTest/test.rc
@@ -0,0 +1,28 @@
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+
+1 RT_MANIFEST "test.manifest"
+
+VS_VERSION_INFO VERSIONINFO
+FILEVERSION 1,0,0,0
+FILEOS VOS_NT_WINDOWS32
+FILETYPE VFT_APP
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "000004b0"
+ BEGIN
+ VALUE "CompanyName", "MultiMC Contributors"
+ VALUE "FileDescription", "Testcase"
+ VALUE "FileVersion", "1.0.0.0"
+ VALUE "ProductName", "MultiMC Testcase"
+ VALUE "ProductVersion", "5"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x0000, 0x04b0 // Unicode
+ END
+END