Add more tests.

This commit is contained in:
Mikaël Capelle
2022-04-29 21:11:59 +02:00
parent 907bbf3117
commit 051c0589b5
5 changed files with 97 additions and 3 deletions
+7
View File
@@ -1,5 +1,12 @@
# build
edit
CMakeLists.txt.user
/msbuild.log
/*std*.log
/*build
# python
tests/**/__pycache__
# IDE
.vscode
+14 -3
View File
@@ -2,14 +2,25 @@ cmake_minimum_required(VERSION 3.16)
set(PYLIB_DIR ${CMAKE_CURRENT_BINARY_DIR}/pylibs)
add_custom_target(pytest
${CMAKE_COMMAND} -E env PYTHONPATH=${PYLIB_DIR}
if (TARGET uibase)
set(UIBASE_PATH $<TARGET_FILE:uibase>)
else()
set(UIBASE_PATH "${MO2_INSTALL_PATH}/bin/uibase.dll")
endif()
add_custom_target(pytest EXCLUDE_FROM_ALL
${CMAKE_COMMAND} -E env
PYTHONPATH="${PYLIB_DIR}\\;$<TARGET_FILE_DIR:mobase>"
"UIBASE_PATH=${UIBASE_PATH}" "QT_ROOT=${QT_ROOT}"
${CMAKE_CURRENT_BINARY_DIR}/pylibs/bin/pytest.exe ${CMAKE_CURRENT_SOURCE_DIR}/../tests -s
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
WORKING_DIRECTORY ${MO2_INSTALL_PATH}
)
mo2_python_pip_install(pytest
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/pylibs
PACKAGES pytest PyQt6==6.3.0)
add_dependencies(pytest mobase)
file(GLOB test_files "test_*.cpp")
foreach (test_file ${test_files})
+7
View File
@@ -0,0 +1,7 @@
import os
from pathlib import Path
def pytest_configure():
os.add_dll_directory(Path(os.getenv("QT_ROOT")).joinpath("bin"))
os.add_dll_directory(Path(os.getenv("UIBASE_PATH")).parent)
+34
View File
@@ -0,0 +1,34 @@
#include "pybind11_qt/pybind11_qt.h"
#include <pybind11/functional.h>
#include <pybind11/pybind11.h>
#include "guessedvalue.h"
using namespace MOBase;
PYBIND11_MODULE(guessed_string, m)
{
m.def("get_value", [](GuessedValue<QString> const& value) {
return value.operator const QString&();
});
m.def("get_variants", [](GuessedValue<QString> const& value) {
return value.variants();
});
m.def("set_from_callback",
[](GuessedValue<QString>& value,
std::function<void(GuessedValue<QString>&)> const& fn) {
fn(value);
});
// note: the function needs to take the guessed string by pointer if constructed
// from C++, this is to be taken into account when calling Python function (cf.
// installers)
m.def("get_from_callback",
[](std::function<void(GuessedValue<QString>*)> const& fn) {
GuessedValue<QString> value;
fn(&value);
return (QString)value;
});
}
+35
View File
@@ -0,0 +1,35 @@
import mobase
import pytest
m = pytest.importorskip("mobase_tests.guessed_string")
def test_guessed_string():
# empty string
gs = mobase.GuessedString()
assert len(gs.variants()) == 0
assert not gs.variants()
assert str(gs) == ""
# automatic conversion from string
assert m.get_value("test") == "test"
assert m.get_variants("test") == {"test"}
# update
gs = mobase.GuessedString("fallback", mobase.GuessQuality.FALLBACK)
assert str(gs) == "fallback"
gs.update("good", mobase.GuessQuality.GOOD)
assert str(gs) == "good"
assert gs.variants() == {"fallback", "good"}
# back-and-forth
gs = mobase.GuessedString()
assert str(gs) == ""
m.set_from_callback(gs, lambda gs: gs.update("test"))
assert str(gs) == "test"
assert m.get_from_callback(lambda gs: gs.update("test")) == "test"