Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,13 @@ jobs:
run: sudo apt install -y lcov
if: matrix.build.os == 'ubuntu-latest'

- name: Download Fixtures
run: curl -o test/fixture/squall-fixture.tgz https://whoa.reliquaryhq.com/squall-fixture.tgz

- name: Unpack Fixtures
run: tar -xvzf squall-fixture.tgz
working-directory: test/fixture

- name: Prepare
run: mkdir build

Expand All @@ -60,4 +67,5 @@ jobs:
run: cmake --build build --config ${{ matrix.build.build_type }}

- name: Test
run: ./build/test/${{ matrix.build.test_path }}
run: ../../build/test/${{ matrix.build.test_path }}
working-directory: test/fixture
10 changes: 9 additions & 1 deletion .github/workflows/push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,13 @@ jobs:
with:
submodules: true

- name: Download Fixtures
run: curl -o test/fixture/squall-fixture.tgz https://whoa.reliquaryhq.com/squall-fixture.tgz

- name: Unpack Fixtures
run: tar -xvzf squall-fixture.tgz
working-directory: test/fixture

- name: Prepare
run: mkdir build

Expand All @@ -59,4 +66,5 @@ jobs:
run: cmake --build build --config ${{ matrix.build.build_type }}

- name: Test
run: ./build/test/${{ matrix.build.test_path }}
run: ../../build/test/${{ matrix.build.test_path }}
working-directory: test/fixture
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,6 @@ CMakeSettings.json
/build_*
/cmake-build-*
/dist
/test/fixture
!/test/fixture/README.md
/out
54 changes: 27 additions & 27 deletions test/File.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@ TEST_CASE("SFileCloseArchive", "[file]") {
HSARCHIVE archive = nullptr;

SECTION("closes an archive") {
SFileOpenArchive("wowtest1.mpq", 0, 0, &archive);
SFileOpenArchive("file/wowtest1.mpq", 0, 0, &archive);
REQUIRE(archive != nullptr);

HSFILE file;
CHECK(SFileOpenFileEx(nullptr, "test.txt", 0, &file));
CHECK(SFileOpenFileEx(nullptr, "file/test.txt", 0, &file));
CHECK(SFileCloseFile(file));

CHECK(SFileCloseArchive(archive) == 1);

CHECK_FALSE(SFileOpenFileEx(nullptr, "test.txt", 0, &file));
CHECK_FALSE(SFileOpenFileEx(nullptr, "file/test.txt", 0, &file));
}

// TODO determine how to test this
Expand Down Expand Up @@ -44,7 +44,7 @@ TEST_CASE("SFileGetFileSize", "[file]") {
HSFILE file;

SECTION("retrieves MPQ file size") {
SFileOpenArchive("wowtest1.mpq", 0, 0, &archive);
SFileOpenArchive("file/wowtest1.mpq", 0, 0, &archive);

REQUIRE(SFileOpenFileEx(archive, "test2.txt", 0, &file));
CHECK(SFileGetFileSize(file) == 13);
Expand All @@ -59,11 +59,11 @@ TEST_CASE("SFileGetFileSize", "[file]") {
}

SECTION("retrieves filesystem file size") {
REQUIRE(SFileOpenFileEx(nullptr, "empty_diskonly.txt", SFILE_OPENFLAG_CHECKDISK, &file));
REQUIRE(SFileOpenFileEx(nullptr, "file/empty_diskonly.txt", SFILE_OPENFLAG_CHECKDISK, &file));
CHECK(SFileGetFileSize(file) == 0);

uint32_t filesizehigh = 1234;
REQUIRE(SFileOpenFileEx(nullptr, "test_diskonly.txt", SFILE_OPENFLAG_CHECKDISK, &file));
REQUIRE(SFileOpenFileEx(nullptr, "file/test_diskonly.txt", SFILE_OPENFLAG_CHECKDISK, &file));
CHECK(SFileGetFileSize(file, &filesizehigh) == 6);
CHECK(filesizehigh == 0);
}
Expand All @@ -74,7 +74,7 @@ TEST_CASE("SFileOpenArchive", "[file]") {
SErrSetLastError(ERROR_SUCCESS);

SECTION("opens a MPQ archive") {
CHECK(SFileOpenArchive("wowtest1.mpq", 0, 0, &mpq) == 1);
CHECK(SFileOpenArchive("file/wowtest1.mpq", 0, 0, &mpq) == 1);
CHECK(mpq != nullptr);
}

Expand All @@ -83,39 +83,39 @@ TEST_CASE("SFileOpenArchive", "[file]") {

SECTION("fails if archive file is nonexistent") {
mpq = reinterpret_cast<HSARCHIVE>(1234);
CHECK_FALSE(SFileOpenArchive("nice_try.mpq", 0, 0, &mpq));
CHECK_FALSE(SFileOpenArchive("file/nice_try.mpq", 0, 0, &mpq));

CHECK(mpq == nullptr);
CHECK(SErrGetLastError() == ERROR_SUCCESS);
}

SECTION("fails if archive file is too small") {
mpq = reinterpret_cast<HSARCHIVE>(1234);
CHECK_FALSE(SFileOpenArchive("bad_toosmall.mpq", 0, 0, &mpq));
CHECK_FALSE(SFileOpenArchive("file/bad_toosmall.mpq", 0, 0, &mpq));
CHECK(mpq == nullptr);

CHECK(SErrGetLastError() == STORM_ERROR_NOT_ARCHIVE);
}

SECTION("fails if using a directory") {
mpq = reinterpret_cast<HSARCHIVE>(1234);
CHECK_FALSE(SFileOpenArchive("directorytest", 0, 0, &mpq));
CHECK_FALSE(SFileOpenArchive("file/directorytest", 0, 0, &mpq));
CHECK(mpq == nullptr);

CHECK(SErrGetLastError() == ERROR_SUCCESS);
}

SECTION("fails if archive header magic doesn't match") {
mpq = reinterpret_cast<HSARCHIVE>(1234);
CHECK_FALSE(SFileOpenArchive("bad_nomagic.mpq", 0, 0, &mpq));
CHECK_FALSE(SFileOpenArchive("file/bad_nomagic.mpq", 0, 0, &mpq));
CHECK(mpq == nullptr);

CHECK(SErrGetLastError() == STORM_ERROR_NOT_ARCHIVE);
}

SECTION("fails if archive header size doesn't match") {
mpq = reinterpret_cast<HSARCHIVE>(1234);
CHECK_FALSE(SFileOpenArchive("bad_headertoosmall.mpq", 0, 0, &mpq));
CHECK_FALSE(SFileOpenArchive("file/bad_headertoosmall.mpq", 0, 0, &mpq));
CHECK(mpq == nullptr);

CHECK(SErrGetLastError() == STORM_ERROR_NOT_ARCHIVE);
Expand Down Expand Up @@ -148,7 +148,7 @@ TEST_CASE("SFileOpenFileEx", "[file]") {
SECTION("fails when trying to open a directory") {
SErrSetLastError(ERROR_SUCCESS);
HSFILE file = reinterpret_cast<HSFILE>(1234);
CHECK_FALSE(SFileOpenFileEx(nullptr, "directorytest", SFILE_OPENFLAG_CHECKDISK, &file));
CHECK_FALSE(SFileOpenFileEx(nullptr, "file/directorytest", SFILE_OPENFLAG_CHECKDISK, &file));
CHECK(file == nullptr);
CHECK(SErrGetLastError() == ERROR_FILE_NOT_FOUND);
}
Expand All @@ -158,9 +158,9 @@ TEST_CASE("SFileOpenFileEx", "[file]") {
HSFILE file;

SECTION("opens the highest priority file from all MPQs") {
SFileOpenArchive("wowtest1.mpq", 100, 0, &mpq1);
SFileOpenArchive("wowtest2.mpq", 500, 0, &mpq2);
SFileOpenArchive("wowtest3.mpq", 400, 0, &mpq3);
SFileOpenArchive("file/wowtest1.mpq", 100, 0, &mpq1);
SFileOpenArchive("file/wowtest2.mpq", 500, 0, &mpq2);
SFileOpenArchive("file/wowtest3.mpq", 400, 0, &mpq3);

CHECK(SFileOpenFileEx(nullptr, "test.txt", 0, &file) == 1);

Expand All @@ -171,9 +171,9 @@ TEST_CASE("SFileOpenFileEx", "[file]") {
}

SECTION("opens the most recently opened file from same priority MPQs") {
SFileOpenArchive("wowtest1.mpq", 100, 0, &mpq1);
SFileOpenArchive("wowtest2.mpq", 500, 0, &mpq2);
SFileOpenArchive("wowtest3.mpq", 500, 0, &mpq3);
SFileOpenArchive("file/wowtest1.mpq", 100, 0, &mpq1);
SFileOpenArchive("file/wowtest2.mpq", 500, 0, &mpq2);
SFileOpenArchive("file/wowtest3.mpq", 500, 0, &mpq3);

CHECK(SFileOpenFileEx(nullptr, "test.txt", 0, &file) == 1);

Expand All @@ -187,9 +187,9 @@ TEST_CASE("SFileOpenFileEx", "[file]") {
// SECTION("opens the file for the currently selected locale") {}

SECTION("fails if file not found in target MPQ") {
SFileOpenArchive("wowtest1.mpq", 100, 0, &mpq1);
SFileOpenArchive("wowtest2.mpq", 500, 0, &mpq2);
SFileOpenArchive("wowtest3.mpq", 400, 0, &mpq3);
SFileOpenArchive("file/wowtest1.mpq", 100, 0, &mpq1);
SFileOpenArchive("file/wowtest2.mpq", 500, 0, &mpq2);
SFileOpenArchive("file/wowtest3.mpq", 400, 0, &mpq3);

CHECK(SFileOpenFileEx(nullptr, "test2.txt", 0, &file) == 1);
SFileCloseFile(file);
Expand All @@ -200,22 +200,22 @@ TEST_CASE("SFileOpenFileEx", "[file]") {
}

SECTION("fails if file not found in any MPQ") {
SFileOpenArchive("wowtest1.mpq", 100, 0, &mpq1);
SFileOpenArchive("wowtest2.mpq", 500, 0, &mpq2);
SFileOpenArchive("wowtest3.mpq", 400, 0, &mpq3);
SFileOpenArchive("file/wowtest1.mpq", 100, 0, &mpq1);
SFileOpenArchive("file/wowtest2.mpq", 500, 0, &mpq2);
SFileOpenArchive("file/wowtest3.mpq", 400, 0, &mpq3);

SErrSetLastError(ERROR_SUCCESS);
CHECK_FALSE(SFileOpenFileEx(nullptr, "yep not here", 0, &file));
CHECK(SErrGetLastError() == ERROR_FILE_NOT_FOUND);
}

SECTION("can open attributes file") {
SFileOpenArchive("wowtest1.mpq", 100, 0, &mpq1);
SFileOpenArchive("file/wowtest1.mpq", 100, 0, &mpq1);
CHECK(SFileOpenFileEx(nullptr, "(attributes)", 0, &file) == 1);
}

SECTION("can open listfile") {
SFileOpenArchive("wowtest1.mpq", 100, 0, &mpq1);
SFileOpenArchive("file/wowtest1.mpq", 100, 0, &mpq1);
CHECK(SFileOpenFileEx(nullptr, "(listfile)", 0, &file) == 1);
}
}
Expand Down
6 changes: 3 additions & 3 deletions test/FileTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,20 @@ HSARCHIVE OpenNullArchive() {

HSARCHIVE OpenTestArchive() {
HSARCHIVE archive = nullptr;
SFileOpenArchive("wowtest1.mpq", 0, 0, &archive);
SFileOpenArchive("file/wowtest1.mpq", 0, 0, &archive);
REQUIRE(archive != nullptr);
return archive;
}

HSFILE ReadTestFileFromDisk() {
HSFILE file = nullptr;
SFileOpenFileEx(nullptr, "test_diskonly.txt", SFILE_OPENFLAG_CHECKDISK, &file);
SFileOpenFileEx(nullptr, "file/test_diskonly.txt", SFILE_OPENFLAG_CHECKDISK, &file);
return file;
}

HSFILE ReadTestFileFromMpq() {
HSARCHIVE archive = nullptr;
SFileOpenArchive("wowtest1.mpq", 0, 0, &archive);
SFileOpenArchive("file/wowtest1.mpq", 0, 0, &archive);

HSFILE file = nullptr;
SFileOpenFileEx(archive, "test.txt", 0, &file);
Expand Down
16 changes: 16 additions & 0 deletions test/fixture/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Test Fixtures

All test fixtures for `squall` are contained in a remotely-hosted tarball.

To populate a local fixture directory, run the following commands from the root
of `squall`:

```bash
cd test/fixture
curl -o squall-fixture.tgz https://whoa.reliquaryhq.com/squall-fixture.tgz
tar -xvzf squall-fixture.tgz
rm squall-fixture.tgz
```

If any tests fail to execute, there's a good chance you need to snag a more
recent tarball and extract it locally.
Binary file removed test/fixture/bad_headertoosmall.mpq
Binary file not shown.
Binary file removed test/fixture/bad_nomagic.mpq
Binary file not shown.
Binary file removed test/fixture/bad_toosmall.mpq
Binary file not shown.
Binary file removed test/fixture/bad_wrongsizes.mpq
Binary file not shown.
Binary file removed test/fixture/broken4.mpq
Binary file not shown.
Empty file.
Empty file removed test/fixture/empty_diskonly.txt
Empty file.
1 change: 0 additions & 1 deletion test/fixture/test.txt

This file was deleted.

1 change: 0 additions & 1 deletion test/fixture/test_diskonly.txt

This file was deleted.

Binary file removed test/fixture/wowtest1.mpq
Binary file not shown.
Binary file removed test/fixture/wowtest2.mpq
Binary file not shown.
Binary file removed test/fixture/wowtest3.mpq
Binary file not shown.