mirror of
https://github.com/ModOrganizer2/modorganizer-plugin_python.git
synced 2026-07-27 14:03:33 -07:00
Add more tests.
This commit is contained in:
@@ -1,5 +1,12 @@
|
||||
# build
|
||||
edit
|
||||
CMakeLists.txt.user
|
||||
/msbuild.log
|
||||
/*std*.log
|
||||
/*build
|
||||
|
||||
# python
|
||||
tests/**/__pycache__
|
||||
|
||||
# IDE
|
||||
.vscode
|
||||
|
||||
+14
-3
@@ -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})
|
||||
|
||||
@@ -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)
|
||||
@@ -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;
|
||||
});
|
||||
}
|
||||
@@ -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"
|
||||
Reference in New Issue
Block a user