diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 121e0cc9..221c2a26 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -30,7 +30,15 @@ target_link_libraries(test-csfml-system PRIVATE csfml-system Catch2::Catch2WithM set_target_warnings(test-csfml-system) catch_discover_tests(test-csfml-system) +add_executable(test-csfml-window + Window/Joystick.test.cpp +) +target_link_libraries(test-csfml-window PRIVATE csfml-window Catch2::Catch2WithMain) +set_target_warnings(test-csfml-window) +catch_discover_tests(test-csfml-window) + # Copy DLLs into the same directory if(SFML_OS_WINDOWS AND NOT CSFML_LINK_SFML_STATICALLY) add_custom_command(TARGET test-csfml-system PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy $ $ COMMAND_EXPAND_LISTS) + add_custom_command(TARGET test-csfml-window PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy $ $ COMMAND_EXPAND_LISTS) endif() diff --git a/test/Window/Joystick.test.cpp b/test/Window/Joystick.test.cpp new file mode 100644 index 00000000..9598e4a6 --- /dev/null +++ b/test/Window/Joystick.test.cpp @@ -0,0 +1,68 @@ +#include + +#include +#include + +TEST_CASE("[Window] sfJoystick") +{ + SECTION("Constants") + { + STATIC_CHECK(sfJoystickCount == 8); + STATIC_CHECK(sfJoystickButtonCount == 32); + STATIC_CHECK(sfJoystickAxisCount == 8); + } + + // By avoiding calling sfJoystick_update() we can guarantee that + // no joysticks will be detected. This is how we can ensure these + // tests are portable and reliable. + + const auto joystick = GENERATE(range(0u, static_cast(sfJoystickCount - 1))); + + SECTION("sfJoystick_isConnected()") + { + CHECK(!sfJoystick_isConnected(joystick)); + } + + SECTION("sfJoystick_getButtonCount()") + { + CHECK(sfJoystick_getButtonCount(joystick) == 0); + } + + SECTION("sfJoystick_hasAxis()") + { + CHECK(!sfJoystick_hasAxis(joystick, sfJoystickX)); + CHECK(!sfJoystick_hasAxis(joystick, sfJoystickY)); + CHECK(!sfJoystick_hasAxis(joystick, sfJoystickZ)); + CHECK(!sfJoystick_hasAxis(joystick, sfJoystickR)); + CHECK(!sfJoystick_hasAxis(joystick, sfJoystickU)); + CHECK(!sfJoystick_hasAxis(joystick, sfJoystickV)); + CHECK(!sfJoystick_hasAxis(joystick, sfJoystickPovX)); + CHECK(!sfJoystick_hasAxis(joystick, sfJoystickPovY)); + } + + SECTION("sfJoystick_isButtonPressed()") + { + const auto button = GENERATE(range(0u, static_cast(sfJoystickButtonCount - 1))); + CHECK(!sfJoystick_isButtonPressed(joystick, button)); + } + + SECTION("sfJoystick_getAxisPosition") + { + CHECK(sfJoystick_getAxisPosition(joystick, sfJoystickX) == 0); + CHECK(sfJoystick_getAxisPosition(joystick, sfJoystickY) == 0); + CHECK(sfJoystick_getAxisPosition(joystick, sfJoystickZ) == 0); + CHECK(sfJoystick_getAxisPosition(joystick, sfJoystickR) == 0); + CHECK(sfJoystick_getAxisPosition(joystick, sfJoystickU) == 0); + CHECK(sfJoystick_getAxisPosition(joystick, sfJoystickV) == 0); + CHECK(sfJoystick_getAxisPosition(joystick, sfJoystickPovX) == 0); + CHECK(sfJoystick_getAxisPosition(joystick, sfJoystickPovY) == 0); + } + + SECTION("getIdentification()") + { + const auto identification = sfJoystick_getIdentification(joystick); + CHECK(identification.name == std::string("No Joystick")); + CHECK(identification.vendorId == 0); + CHECK(identification.productId == 0); + } +}