diff --git a/src/spritecache.cpp b/src/spritecache.cpp
index 43d8a95894..2cb32eb6c8 100644
--- a/src/spritecache.cpp
+++ b/src/spritecache.cpp
@@ -102,7 +102,6 @@ static uint _allocated_sprite_cache_size = 0;
static int _compact_cache_counter;
static void CompactSpriteCache();
-static void *AllocSprite(size_t mem_req);
/**
* Skip the given amount of sprite graphics data.
@@ -831,7 +830,7 @@ static void DeleteEntryFromSpriteCache()
DeleteEntryFromSpriteCache(best);
}
-static void *AllocSprite(size_t mem_req)
+void *AllocSprite(size_t mem_req)
{
mem_req += sizeof(MemBlock);
diff --git a/src/spritecache_internal.h b/src/spritecache_internal.h
index 4268c1217d..6664f980b2 100644
--- a/src/spritecache_internal.h
+++ b/src/spritecache_internal.h
@@ -36,6 +36,7 @@ static inline bool IsMapgenSpriteID(SpriteID sprite)
return IsInsideMM(sprite, SPR_MAPGEN_BEGIN, SPR_MAPGEN_END);
}
+void *AllocSprite(size_t mem_req);
SpriteCache *AllocateSpriteCache(uint index);
#endif /* SPRITECACHE_INTERNAL_H */
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
index ad7701b26b..18390c1eb8 100644
--- a/src/tests/CMakeLists.txt
+++ b/src/tests/CMakeLists.txt
@@ -2,6 +2,8 @@ add_test_files(
landscape_partial_pixel_z.cpp
math_func.cpp
mock_fontcache.h
+ mock_spritecache.cpp
+ mock_spritecache.h
string_func.cpp
strings_func.cpp
test_main.cpp
diff --git a/src/tests/mock_spritecache.cpp b/src/tests/mock_spritecache.cpp
new file mode 100644
index 0000000000..5a5910cfdd
--- /dev/null
+++ b/src/tests/mock_spritecache.cpp
@@ -0,0 +1,49 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
+ */
+
+/** @file mock_spritecache.cpp Mock sprite cache implementation. */
+
+#include "../stdafx.h"
+
+#include "../blitter/factory.hpp"
+#include "../core/math_func.hpp"
+#include "../spritecache.h"
+#include "../spritecache_internal.h"
+#include "../table/sprites.h"
+
+static bool MockLoadNextSprite(int load_index)
+{
+ static Sprite *sprite = (Sprite *)AllocSprite(sizeof(*sprite));
+
+ bool is_mapgen = IsMapgenSpriteID(load_index);
+
+ SpriteCache *sc = AllocateSpriteCache(load_index);
+ sc->file = nullptr;
+ sc->file_pos = 0;
+ sc->ptr = sprite;
+ sc->lru = 0;
+ sc->id = 0;
+ sc->type = is_mapgen ? SpriteType::MapGen : SpriteType::Normal;
+ sc->warned = false;
+ sc->control_flags = 0;
+
+ /* Fill with empty sprites up until the default sprite count. */
+ return (uint)load_index < SPR_OPENTTD_BASE + OPENTTD_SPRITE_COUNT;
+}
+
+void MockGfxLoadSprites()
+{
+ /* Force blitter 'null'. This is necessary for GfxInitSpriteMem() to function. */
+ BlitterFactory::SelectBlitter("null");
+
+ GfxInitSpriteMem();
+
+ int load_index = 0;
+ while (MockLoadNextSprite(load_index)) {
+ load_index++;
+ }
+}
diff --git a/src/tests/mock_spritecache.h b/src/tests/mock_spritecache.h
new file mode 100644
index 0000000000..6d715cf699
--- /dev/null
+++ b/src/tests/mock_spritecache.h
@@ -0,0 +1,15 @@
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see .
+ */
+
+/** @file mock_spritecache.h Mock sprite cache definition. */
+
+#ifndef MOCK_SPRITECACHE_H
+#define MOCK_SPRITECACHE_H
+
+void MockGfxLoadSprites();
+
+#endif /* MOCK_SPRITECACHE_H */