Initial ui test.
This commit is contained in:
parent
7fcc8e43ae
commit
36515556b8
15 changed files with 178 additions and 28 deletions
|
@ -16,32 +16,13 @@
|
|||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
void initializeCommandLineArgs(CommandLineArgs* args)
|
||||
{
|
||||
int nArgs{ 0 };
|
||||
auto szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
|
||||
if (szArglist == nullptr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
std::vector<std::string> windowsArgs(nArgs);
|
||||
for (int idx = 0; idx < nArgs; idx++)
|
||||
{
|
||||
windowsArgs[idx] = StringUtils::convert(szArglist[idx]);
|
||||
}
|
||||
LocalFree(szArglist);
|
||||
|
||||
args->process(windowsArgs);
|
||||
}
|
||||
|
||||
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow)
|
||||
{
|
||||
std::ofstream out("out.txt");
|
||||
std::cout.rdbuf(out.rdbuf());
|
||||
|
||||
auto args = CommandLineArgs::Create();
|
||||
initializeCommandLineArgs(args.get());
|
||||
CommandLineArgs::initialize(args.get());
|
||||
args->recordLaunchPath();
|
||||
|
||||
// Start the main app
|
||||
|
|
|
@ -50,7 +50,7 @@ void ContentFile::doLinkTagSubstitution(const Path& basePath)
|
|||
auto full_path = mFilename.parent_path() / Path(replaced_target);
|
||||
auto base_relative_path = PathUtils::getRelativePath(full_path, basePath);
|
||||
auto output_path = PathUtils::getPathDelimited(base_relative_path);
|
||||
link->setTarget(Path(output_path).replace_extension(".html"));
|
||||
link->setTarget(Path(output_path).replace_extension(".html").string());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
#include "CommandLineArgs.h"
|
||||
|
||||
#include "StringUtils.h"
|
||||
#ifdef _WIN32
|
||||
#include "Windows.h"
|
||||
#endif
|
||||
|
||||
CommandLineArgs::CommandLineArgs()
|
||||
: mArugments(),
|
||||
mLaunchPath()
|
||||
|
@ -7,6 +12,27 @@ CommandLineArgs::CommandLineArgs()
|
|||
|
||||
}
|
||||
|
||||
void CommandLineArgs::initialize(CommandLineArgs* args)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
int nArgs{ 0 };
|
||||
auto szArglist = ::CommandLineToArgvW(::GetCommandLineW(), &nArgs);
|
||||
if (szArglist == nullptr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
std::vector<std::string> windowsArgs(nArgs);
|
||||
for (int idx = 0; idx < nArgs; idx++)
|
||||
{
|
||||
windowsArgs[idx] = StringUtils::convert(szArglist[idx]);
|
||||
}
|
||||
::LocalFree(szArglist);
|
||||
|
||||
args->process(windowsArgs);
|
||||
#endif
|
||||
}
|
||||
|
||||
std::unique_ptr<CommandLineArgs> CommandLineArgs::Create()
|
||||
{
|
||||
return std::make_unique<CommandLineArgs>();
|
||||
|
|
|
@ -26,6 +26,7 @@ public:
|
|||
|
||||
std::vector<std::string> getUserArgs() const;
|
||||
|
||||
static void initialize(CommandLineArgs* args);
|
||||
private:
|
||||
std::vector<std::string> mArugments;
|
||||
std::filesystem::path mLaunchPath;
|
||||
|
|
|
@ -26,10 +26,20 @@ foreach(module ${TEST_MODULES})
|
|||
|
||||
list(APPEND INTEGRATION_TEST_FILES ${${MODULE_UPPER}_INTEGRATION_TEST_FILES})
|
||||
list(APPEND INTEGRATION_TEST_DEPENDENCIES ${${MODULE_UPPER}_INTEGRATION_TEST_DEPENDENCIES})
|
||||
|
||||
list(APPEND UI_TEST_FILES ${${MODULE_UPPER}_UI_TEST_FILES})
|
||||
list(APPEND UI_TEST_DEPENDENCIES ${${MODULE_UPPER}_UI_TEST_DEPENDENCIES})
|
||||
endforeach()
|
||||
|
||||
add_executable(unit_tests test_runner.cpp ${UNIT_TEST_FILES})
|
||||
target_link_libraries(unit_tests PUBLIC test_utils ${UNIT_TEST_DEPENDENCIES})
|
||||
set_property(TARGET unit_tests PROPERTY FOLDER test)
|
||||
|
||||
add_executable(integration_tests test_runner.cpp ${INTEGRATION_TEST_FILES})
|
||||
target_link_libraries(integration_tests PUBLIC test_utils ${INTEGRATION_TEST_DEPENDENCIES})
|
||||
set_property(TARGET integration_tests PROPERTY FOLDER test)
|
||||
|
||||
add_executable(ui_tests WIN32 ui_test_runner.cpp ${UI_TEST_FILES})
|
||||
target_link_libraries(ui_tests PUBLIC test_utils ${UI_TEST_DEPENDENCIES})
|
||||
set_property(TARGET ui_tests PROPERTY FOLDER test)
|
||||
|
||||
|
|
|
@ -3,11 +3,16 @@
|
|||
|
||||
#include "AudioSample.h"
|
||||
#include "AudioSynth.h"
|
||||
#include "AudioDevice.h"
|
||||
#include "WasapiInterface.h"
|
||||
|
||||
TEST_CASE(TestWasapiInterface, "audio")
|
||||
{
|
||||
WasapiInterface audio_interface;
|
||||
auto device = AudioDevice::Create();
|
||||
audio_interface.Play(device);
|
||||
|
||||
AudioSynth synth;
|
||||
const auto sample = synth.getSineWave(240, 5);
|
||||
|
||||
audio_interface.play(device.get(), sample.get(), 1000);
|
||||
};
|
||||
|
|
|
@ -13,8 +13,20 @@ set(GRAPHICS_UNIT_TEST_FILES
|
|||
${PLATFORM_UNIT_TEST_FILES}
|
||||
PARENT_SCOPE
|
||||
)
|
||||
|
||||
if(WIN32)
|
||||
set(GRAPHICS_UI_TEST_FILES
|
||||
graphics/TestDirectXRendering.cpp
|
||||
PARENT_SCOPE
|
||||
)
|
||||
endif()
|
||||
|
||||
set(GRAPHICS_UNIT_TEST_DEPENDENCIES
|
||||
graphics client
|
||||
PARENT_SCOPE
|
||||
PARENT_SCOPE
|
||||
)
|
||||
|
||||
set(GRAPHICS_UI_TEST_DEPENDENCIES
|
||||
graphics client
|
||||
PARENT_SCOPE
|
||||
)
|
18
test/graphics/TestDirectXRendering.cpp
Normal file
18
test/graphics/TestDirectXRendering.cpp
Normal file
|
@ -0,0 +1,18 @@
|
|||
#include "TestCase.h"
|
||||
#include "TestCaseRunner.h"
|
||||
|
||||
#include "MainApplication.h"
|
||||
#include "GuiApplication.h"
|
||||
|
||||
#include "TestFramework.h"
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
|
||||
TEST_CASE(TestDirectXRendering, "graphics")
|
||||
{
|
||||
auto gui_app = TestCaseRunner::getInstance().getTestApplication();
|
||||
|
||||
gui_app->run();
|
||||
};
|
|
@ -1,6 +1,7 @@
|
|||
#include "TestCase.h"
|
||||
#include "TestCaseRunner.h"
|
||||
|
||||
#include "MainApplication.h"
|
||||
#include "GuiApplication.h"
|
||||
|
||||
#include "TestFramework.h"
|
||||
|
|
|
@ -1,9 +1,13 @@
|
|||
add_library(test_utils STATIC
|
||||
TestCase.h
|
||||
TestUtils.h
|
||||
TestCaseRunner.h
|
||||
TestFramework.h
|
||||
TestCaseRunner.cpp
|
||||
)
|
||||
|
||||
target_include_directories(test_utils PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
)
|
||||
target_link_libraries(test_utils core)
|
||||
target_include_directories(test_utils PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
|
||||
target_link_libraries(test_utils core)
|
||||
set_property(TARGET test_utils PROPERTY FOLDER test)
|
||||
|
||||
configure_file(TestDataLocations.h.in TestDataLocations.h)
|
|
@ -18,6 +18,16 @@ TestCaseRunner::~TestCaseRunner()
|
|||
|
||||
}
|
||||
|
||||
GuiApplication* TestCaseRunner::getTestApplication()
|
||||
{
|
||||
return mTestApplication;
|
||||
}
|
||||
|
||||
void TestCaseRunner::setTestApplication(GuiApplication* app)
|
||||
{
|
||||
mTestApplication = app;
|
||||
}
|
||||
|
||||
TestCaseRunner& TestCaseRunner::getInstance()
|
||||
{
|
||||
static TestCaseRunner instance;
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
class GuiApplication;
|
||||
|
||||
class TestCaseRunner
|
||||
{
|
||||
public:
|
||||
|
@ -14,13 +16,18 @@ public:
|
|||
|
||||
~TestCaseRunner();
|
||||
|
||||
GuiApplication* getTestApplication();
|
||||
|
||||
void addTestCase(const std::string& label, const std::string& tag, TestCase::TestCaseFunction func);
|
||||
|
||||
void markTestFailure(const std::string& line);
|
||||
|
||||
bool run(const std::vector<std::string>& args);
|
||||
|
||||
void setTestApplication(GuiApplication* app);
|
||||
private:
|
||||
|
||||
GuiApplication* mTestApplication{ nullptr };
|
||||
std::vector<std::string> mFailingTests;
|
||||
static bool sLastTestFailed;
|
||||
static std::string sFailureLine;
|
||||
|
|
13
test/test_utils/TestDataLocations.h.in
Normal file
13
test/test_utils/TestDataLocations.h.in
Normal file
|
@ -0,0 +1,13 @@
|
|||
#pragma once
|
||||
|
||||
#include <filesystem>
|
||||
|
||||
using Path = std::filesystem::path;
|
||||
|
||||
namespace TestDataLocations
|
||||
{
|
||||
static Path getTestDataDir()
|
||||
{
|
||||
return std::filesystem::path("${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") / "test_data";
|
||||
}
|
||||
}
|
|
@ -1,5 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include "TestDataLocations.h"
|
||||
|
||||
#include <filesystem>
|
||||
|
||||
using Path = std::filesystem::path;
|
||||
|
@ -22,6 +24,6 @@ public:
|
|||
|
||||
static Path getTestDataDir()
|
||||
{
|
||||
return std::filesystem::current_path() / "test_data";
|
||||
return TestDataLocations::getTestDataDir();
|
||||
}
|
||||
};
|
||||
|
|
60
test/ui_test_runner.cpp
Normal file
60
test/ui_test_runner.cpp
Normal file
|
@ -0,0 +1,60 @@
|
|||
#include "TestFramework.h"
|
||||
|
||||
#include "CommandLineArgs.h"
|
||||
#include "MainApplication.h"
|
||||
#include "GuiApplication.h"
|
||||
#include "Widget.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
#include "Win32WindowInterface.h"
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#include <iostream>
|
||||
|
||||
class TestApp : public GuiApplication
|
||||
{
|
||||
public:
|
||||
TestApp(std::unique_ptr<CommandLineArgs> args = nullptr, std::unique_ptr<MainApplication> mainApp = nullptr)
|
||||
: GuiApplication(std::move(args), std::move(mainApp))
|
||||
{
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
#ifdef _WIN32
|
||||
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow)
|
||||
{
|
||||
std::ofstream out("out.txt");
|
||||
std::cout.rdbuf(out.rdbuf());
|
||||
|
||||
CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);
|
||||
|
||||
auto args = CommandLineArgs::Create();
|
||||
CommandLineArgs::initialize(args.get());
|
||||
|
||||
auto main_app = MainApplication::Create();
|
||||
|
||||
auto applicationContext = std::make_unique<Win32ApplicationContext>();
|
||||
applicationContext->hInstance = reinterpret_cast<void*>(hInstance);
|
||||
applicationContext->nCmdShow = nCmdShow;
|
||||
|
||||
main_app->initialize(std::move(args), std::move(applicationContext));
|
||||
|
||||
auto gui_app = std::make_unique<TestApp>(nullptr, std::move(main_app));
|
||||
|
||||
#else
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
auto args = CommandLineArgs::Create();
|
||||
args->process(argc, argv);
|
||||
#endif
|
||||
|
||||
TestCaseRunner::getInstance().setTestApplication(gui_app.get());
|
||||
auto result = TestCaseRunner::getInstance().run({});
|
||||
|
||||
#ifdef _WIN32
|
||||
CoUninitialize();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
Loading…
Reference in a new issue