Skip to content

Commit 4f0f2b2

Browse files
committed
Add MultiFileSystem tests
1 parent b3091ee commit 4f0f2b2

File tree

4 files changed

+59
-3
lines changed

4 files changed

+59
-3
lines changed

premake5.lua

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,14 @@ project "Tests"
6868
includedirs { "src", "vendor/catch2/extras" }
6969
dofile "vendor.lua"
7070

71+
-- Define this as dummy game
72+
defines { "TR7" }
73+
7174
filter "configurations:Debug"
7275
defines { "DEBUG", "_DEBUG" }
7376

7477
filter "configurations:Release"
7578
defines { "NDEBUG" }
7679
optimize "On"
7780

78-
-- Define this as dummy game
79-
defines { "TR7" }
80-
8181
end

src/file/MultiFileSystem.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ void MultiFileSystem::Add(cdc::FileSystem* fileSystem)
2323
m_fileSystems.push_back(fileSystem);
2424
}
2525

26+
void MultiFileSystem::Remove(cdc::FileSystem* fileSystem)
27+
{
28+
m_fileSystems.erase(std::remove(m_fileSystems.begin(), m_fileSystems.end(), fileSystem));
29+
}
30+
2631
cdc::FileRequest* MultiFileSystem::RequestRead(cdc::FileReceiver* receiver, const char* fileName, unsigned int startOffset)
2732
{
2833
auto fileSystem = GetBestFileSystem(fileName);

src/file/MultiFileSystem.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,12 @@ class MultiFileSystem : public cdc::FileSystem
1212
cdc::FileSystem* GetBestFileSystem(const char* fileName);
1313
public:
1414
MultiFileSystem();
15+
1516
void Add(cdc::FileSystem* fileSystem);
17+
void Remove(cdc::FileSystem* fileSystem);
18+
19+
// This should not really be exposed, currently only for tests - do not use directly
20+
const auto& GetSystems() const noexcept { return m_fileSystems; };
1621

1722
cdc::FileRequest* RequestRead(cdc::FileReceiver* receiver, const char* fileName, unsigned int startOffset);
1823
cdc::File* OpenFile(const char* fileName);

tests/TestFileSystem.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#include <catch_amalgamated.hpp>
2+
3+
#include "cdc/file/FileSystem.h"
4+
#include "file/MultiFileSystem.h"
5+
6+
class DummyFileSystem : public cdc::FileSystem
7+
{
8+
public:
9+
cdc::FileRequest* RequestRead(cdc::FileReceiver* receiver, const char* fileName, unsigned int startOffset) { return nullptr; }
10+
cdc::File* OpenFile(const char* fileName) { return nullptr; }
11+
bool FileExists(const char* fileName) { return false; }
12+
unsigned int GetFileSize(const char* fileName) { return 0; }
13+
void SetSpecialisationMask(unsigned int specMask) { }
14+
unsigned int GetSpecialisationMask() { return 0; }
15+
Status GetStatus() { return IDLE; }
16+
void Update() { }
17+
void Synchronize() { }
18+
};
19+
20+
TEST_CASE("multifilesystem test")
21+
{
22+
auto multiFileSystem = new MultiFileSystem();
23+
24+
SECTION("can add and remove systems")
25+
{
26+
auto fileSystem1 = new DummyFileSystem();
27+
auto fileSystem2 = new DummyFileSystem();
28+
29+
multiFileSystem->Add(fileSystem1);
30+
multiFileSystem->Add(fileSystem2);
31+
32+
REQUIRE(multiFileSystem->GetSystems().size() == 2);
33+
34+
multiFileSystem->Remove(fileSystem1);
35+
36+
REQUIRE(multiFileSystem->GetSystems().size() == 1);
37+
}
38+
39+
SECTION("can check if file exists")
40+
{
41+
multiFileSystem->Add(new DummyFileSystem());
42+
multiFileSystem->Add(new DummyFileSystem());
43+
44+
REQUIRE(multiFileSystem->FileExists("lara.drm") == false);
45+
}
46+
}

0 commit comments

Comments
 (0)