From 5190c490196af8a2c606b3781f25a8dcf8848735 Mon Sep 17 00:00:00 2001 From: Adam Heinermann Date: Thu, 16 Oct 2025 11:50:41 -0700 Subject: [PATCH] feat(test): add options for other versions of storm.dll --- CMakeLists.txt | 6 ++++++ CONTRIBUTING.md | 8 ++++++++ test/Region.cpp | 11 +++++------ test/String.cpp | 4 ++++ 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 76729bb..ba89525 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,7 +80,13 @@ if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_BUILD_TYPE STREQUAL "Debug") endif() if(WHOA_TEST_STORMDLL) + # Doesn't build squall, but still builds the tests to run against a real Storm.dll add_definitions(-DWHOA_TEST_STORMDLL) + if(WHOA_STORMDLL_VERSION) + add_definitions(-DWHOA_STORMDLL_VERSION=${WHOA_STORMDLL_VERSION}) + else() + add_definitions(-DWHOA_STORMDLL_VERSION=2016) + endif() add_subdirectory(test/stormdll) else() add_subdirectory(storm) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9b4e5e5..e72e2fd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,3 +21,11 @@ Only runnable on Windows. Allows running tests against the original `storm.dll` 3. `cmake --build .` 4. Copy `storm.dll` from your Starcraft 1.17 installation folder to the same directory as `StormTest.exe`. 5. Run `StormTest.exe` from the command line. + +To use a different version of Storm.dll, use the following arguments in the cmake command: + +| Arguments | Games | +|-----------|-------| +|`-DWHOA_STORMDLL_VERSION=2016`| Starcraft 1.17 | +|`-DWHOA_STORMDLL_VERSION=2009`| Starcraft 1.16.1 | +|`-DWHOA_STORMDLL_VERSION=2003`| Starcraft 1.10 ~ 1.16.0, Diablo II 1.10 ~ 1.13d | diff --git a/test/Region.cpp b/test/Region.cpp index c1d221f..e58a213 100644 --- a/test/Region.cpp +++ b/test/Region.cpp @@ -809,14 +809,13 @@ TEST_CASE("SRgnGetBoundingRecti", "[region]") { CHECK_THAT(result, MatchesRecti({ 0, 0, 0, 0 })); } - SECTION("returns invalid rect when using an invalid region object") { + SECTION("can be called when using an invalid region object") { HSRGN inval = reinterpret_cast(1234); - SRgnGetBoundingRecti(inval, &result); - // Casting huge float values to int is inconsistent between compilers - // It is also inconsistent between compile and runtime with the same compiler - // So don't even bother comparing with a value - CHECK_THAT(result, !MatchesRecti({ 0, 0, 0, 0 })); + // Casting huge float values to int is inconsistent between compilers, + // compiler versions, and even between compile and runtime with the same compiler. + // Since this behaviour is undefined and outcomes differ greatly, don't even bother testing the value. + CHECK_NOTHROW(SRgnGetBoundingRecti(inval, &result)); } SECTION("returns the dimensions of 1 rect (pass-through)") { diff --git a/test/String.cpp b/test/String.cpp index 7d83288..c350681 100644 --- a/test/String.cpp +++ b/test/String.cpp @@ -543,6 +543,7 @@ TEST_CASE("SStrVPrintf", "[string]") { } } +#if !defined(WHOA_STORMDLL_VERSION) || WHOA_STORMDLL_VERSION >= 2009 TEST_CASE("SStrStr", "[string]") { char string[] = "foobar"; @@ -688,6 +689,7 @@ TEST_CASE("SStrStrI const", "[string]") { REQUIRE(substring == nullptr); } } +#endif TEST_CASE("SStrTokenize", "[string]") { SECTION("finds all tokens in comma-delimited string") { @@ -762,6 +764,7 @@ TEST_CASE("SStrTokenize", "[string]") { } } +#if !defined(WHOA_STORMDLL_VERSION) || WHOA_STORMDLL_VERSION >= 2016 TEST_CASE("SStrToDouble", "[string]") { SECTION("converts empty string to double") { auto result = SStrToDouble(""); @@ -920,6 +923,7 @@ TEST_CASE("SStrToFloat", "[string]") { REQUIRE(SStrToFloat("-1.79769e+310") == -HUGE_VALF); } } +#endif TEST_CASE("SStrToInt", "[string]") { SECTION("converts empty string to int") {