- Simplified joystick management by consolidating joystick handling into a single class structure. - Enhanced keyboard module with new methods for key and scancode handling. - Removed deprecated JoystickModule and related files to streamline the codebase. - Updated build configurations to ensure compatibility with the latest SDL features. Co-authored-by: Cursor <cursoragent@cursor.com>
73 lines
2.0 KiB
C++
73 lines
2.0 KiB
C++
#include "zeroerr/assert.h"
|
|
#include "zeroerr/unittest.h"
|
|
|
|
#include "joystick/Joystick.h"
|
|
#include "joystick/Pad.h"
|
|
#include "common/Exception.h"
|
|
|
|
namespace {
|
|
|
|
eve::joystick::Joystick* joystick() {
|
|
return eve::joystick::Joystick::create();
|
|
}
|
|
|
|
} // namespace
|
|
|
|
TEST_CASE("joystick.create") {
|
|
auto* joy = joystick();
|
|
REQUIRE(joy != nullptr);
|
|
CHECK(joy->getName() == "Joystick");
|
|
CHECK(joy->getJoystickCount() >= 0);
|
|
}
|
|
|
|
TEST_CASE("joystick.getJoystickOutOfRange") {
|
|
auto* joy = joystick();
|
|
REQUIRE(joy != nullptr);
|
|
CHECK(joy->getJoystick(-1) == nullptr);
|
|
CHECK(joy->getJoystick(joy->getJoystickCount()) == nullptr);
|
|
CHECK(joy->getJoystickFromID(-99999) == nullptr);
|
|
}
|
|
|
|
TEST_CASE("joystick.mappingRoundTrip") {
|
|
auto* joy = joystick();
|
|
REQUIRE(joy != nullptr);
|
|
|
|
// Empty is allowed; invalid non-empty should throw.
|
|
joy->loadGamepadMappings("");
|
|
std::string saved = joy->saveGamepadMappings();
|
|
// May be empty if no gamepads have been seen.
|
|
CHECK(saved.find("invalid") == std::string::npos);
|
|
|
|
bool threw = false;
|
|
try {
|
|
joy->loadGamepadMappings("not-a-valid-mapping-line");
|
|
} catch (const eve::Exception&) {
|
|
threw = true;
|
|
}
|
|
CHECK(threw);
|
|
}
|
|
|
|
TEST_CASE("joystick.connectedPadsQueryable") {
|
|
auto* joy = joystick();
|
|
REQUIRE(joy != nullptr);
|
|
|
|
int n = joy->getJoystickCount();
|
|
for (int i = 0; i < n; i++) {
|
|
auto* pad = joy->getJoystick(i);
|
|
REQUIRE(pad != nullptr);
|
|
CHECK(joy->getIndex(pad) == i);
|
|
CHECK(pad->getID() >= 0);
|
|
// Connected pads expose non-negative counts.
|
|
if (pad->isConnected()) {
|
|
CHECK(pad->getAxisCount() >= 0);
|
|
CHECK(pad->getButtonCount() >= 0);
|
|
CHECK(pad->getHatCount() >= 0);
|
|
CHECK(!pad->getGUID().empty());
|
|
(void)pad->isDown(0);
|
|
(void)pad->isGamepadDown("a");
|
|
(void)pad->getGamepadAxis("leftx");
|
|
(void)pad->getHat(0);
|
|
}
|
|
}
|
|
}
|