squall/test/Core.cpp
2026-02-20 16:34:22 -06:00

55 lines
1.6 KiB
C++

#include "test/Test.hpp"
#include "EventTest.hpp"
#include "storm/Core.hpp"
#include "storm/Region.hpp"
TEST_CASE("StormDestroy", "[core]") {
SECTION("always returns 1") {
CHECK(StormDestroy() == 1);
}
SECTION("SEvt") {
EventHandlerTest test;
SECTION("destroys all event handlers") {
SEvtRegisterHandler(1, 1, 1, 0, &TestEventHandler1);
CHECK(SEvtDispatch(1, 1, 1, nullptr) == 1);
CHECK(test.NumCalls() == 1);
CHECK(SEvtDispatch(1, 1, 1, nullptr) == 1);
CHECK(test.NumCalls() == 2);
CHECK(StormDestroy() == 1);
// Can't increment calls since the handler was destroyed
CHECK(SEvtDispatch(1, 1, 1, nullptr) == 0);
CHECK(test.NumCalls() == 2);
}
SECTION("doesn't destroy break data") {
// not ideal but it's official behaviour
SEvtBreakHandlerChain(nullptr);
CHECK(StormDestroy() == 1);
SEvtRegisterHandler(0, 0, 0, 0, &TestEventHandler1);
CHECK(SEvtDispatch(0, 0, 0, nullptr) == 0);
CHECK(SEvtDispatch(0, 0, 0, nullptr) == 1);
}
}
SECTION("SRgn") {
SECTION("destroys region handles") {
HSRGN rgn = nullptr;
SRgnCreate(&rgn);
REQUIRE(rgn != nullptr); // valid handle
CHECK(StormDestroy() == 1);
// fails to duplicate because handle is invalid
HSRGN newrgn;
SRgnDuplicate(rgn, &newrgn);
CHECK(newrgn == nullptr);
}
}
}