diff --git a/core/libs/prx/libSceConvertKeycode/CMakeLists.txt b/core/libs/prx/libSceConvertKeycode/CMakeLists.txt new file mode 100644 index 000000000..d4f82eb5f --- /dev/null +++ b/core/libs/prx/libSceConvertKeycode/CMakeLists.txt @@ -0,0 +1,15 @@ +add_library(libSceConvertKeycode SHARED EXCLUDE_FROM_ALL Export.cpp) +target_include_directories(libSceConvertKeycode PRIVATE ${LIBS_INCLUDE_DIR}) +configure_windows_unwind(libSceConvertKeycode) + +if(BUILD_TESTING) + add_test_executable(guest_convert_keycode_tests ${LIBS_INCLUDE_DIR}/tests/GuestConvertKeycode.cpp) + target_include_directories(guest_convert_keycode_tests PRIVATE ${LIBS_INCLUDE_DIR}) + target_link_libraries(guest_convert_keycode_tests PRIVATE libSceConvertKeycode libc) + configure_windows_unwind(guest_convert_keycode_tests) + add_test(NAME guest_convert_keycode COMMAND guest_convert_keycode_tests) + if(WIN32) + set_tests_properties(guest_convert_keycode PROPERTIES ENVIRONMENT_MODIFICATION + "PATH=path_list_prepend:$") + endif() +endif() diff --git a/core/libs/tests/GuestConvertKeycode.cpp b/core/libs/tests/GuestConvertKeycode.cpp new file mode 100644 index 000000000..c25a9f31b --- /dev/null +++ b/core/libs/tests/GuestConvertKeycode.cpp @@ -0,0 +1,30 @@ +#include "SceTypes.hpp" +#include "prx/libc/include/general/VabiMacros.hpp" +#include +#include + +extern "C" { +int APS5_VABI sceConvertKeycodeGetImeKeyboardType(std::int32_t, std::uint32_t*); +} + +static void Require(bool value) { if (!value) std::abort(); } + +int main() { + constexpr int invalidAddress = static_cast(0x80BC0031u); + constexpr int invalidUserId = static_cast(0x80BC0010u); + + Require(sceConvertKeycodeGetImeKeyboardType(0, nullptr) == invalidAddress); + Require(sceConvertKeycodeGetImeKeyboardType(-1, nullptr) == invalidAddress); + + std::uint32_t type = 0xFFFFFFFFu; + Require(sceConvertKeycodeGetImeKeyboardType(-1, &type) == invalidUserId); + Require(type == 0xFFFFFFFFu); + + Require(sceConvertKeycodeGetImeKeyboardType(0, &type) == 0); + Require(type == 0); + + type = 0xFFFFFFFFu; + Require(sceConvertKeycodeGetImeKeyboardType(1, &type) == 0); + Require(type == 0); + return 0; +}