Files
FlexLove/testing/__tests__/image_cache_test.lua
2025-12-12 20:46:16 -05:00

176 lines
4.8 KiB
Lua

package.path = package.path .. ";./?.lua;./modules/?.lua"
local originalSearchers = package.searchers or package.loaders
table.insert(originalSearchers, 2, function(modname)
if modname:match("^FlexLove%.modules%.") then
local moduleName = modname:gsub("^FlexLove%.modules%.", "")
return function()
return require("modules." .. moduleName)
end
end
end)
local luaunit = require("testing.luaunit")
require("testing.loveStub")
local ImageCache = require("modules.ImageCache")
TestImageCache = {}
function TestImageCache:setUp()
-- Clear cache before each test
ImageCache.clear()
end
function TestImageCache:tearDown()
ImageCache.clear()
end
-- Unhappy path tests
function TestImageCache:testLoadWithNilPath()
local img, err = ImageCache.load(nil)
luaunit.assertNil(img)
luaunit.assertNotNil(err)
luaunit.assertStrContains(err, "Invalid image path")
end
function TestImageCache:testLoadWithEmptyString()
local img, err = ImageCache.load("")
luaunit.assertNil(img)
luaunit.assertNotNil(err)
luaunit.assertStrContains(err, "Invalid image path")
end
function TestImageCache:testLoadWithInvalidType()
local img, err = ImageCache.load(123)
luaunit.assertNil(img)
luaunit.assertNotNil(err)
luaunit.assertStrContains(err, "Invalid image path")
end
function TestImageCache:testLoadWithInvalidPath()
local img, err = ImageCache.load("nonexistent/path/to/image.png")
luaunit.assertNil(img)
luaunit.assertNotNil(err)
luaunit.assertStrContains(err, "Failed to load image")
end
function TestImageCache:testLoadWithInvalidExtension()
local img, err = ImageCache.load("test.txt")
luaunit.assertNil(img)
luaunit.assertNotNil(err)
luaunit.assertStrContains(err, "Failed to load image")
end
function TestImageCache:testGetWithNilPath()
local img = ImageCache.get(nil)
luaunit.assertNil(img)
end
function TestImageCache:testGetWithEmptyString()
local img = ImageCache.get("")
luaunit.assertNil(img)
end
function TestImageCache:testGetWithInvalidType()
local img = ImageCache.get({})
luaunit.assertNil(img)
end
function TestImageCache:testGetWithNonCachedPath()
local img = ImageCache.get("some/random/path.png")
luaunit.assertNil(img)
end
function TestImageCache:testGetImageDataWithNilPath()
local imgData = ImageCache.getImageData(nil)
luaunit.assertNil(imgData)
end
function TestImageCache:testGetImageDataWithEmptyString()
local imgData = ImageCache.getImageData("")
luaunit.assertNil(imgData)
end
function TestImageCache:testGetImageDataWithInvalidType()
local imgData = ImageCache.getImageData(123)
luaunit.assertNil(imgData)
end
function TestImageCache:testGetImageDataWithNonCachedPath()
local imgData = ImageCache.getImageData("some/path.png")
luaunit.assertNil(imgData)
end
function TestImageCache:testRemoveWithNilPath()
local removed = ImageCache.remove(nil)
luaunit.assertFalse(removed)
end
function TestImageCache:testRemoveWithEmptyString()
local removed = ImageCache.remove("")
luaunit.assertFalse(removed)
end
function TestImageCache:testRemoveWithInvalidType()
local removed = ImageCache.remove(123)
luaunit.assertFalse(removed)
end
function TestImageCache:testRemoveWithNonCachedPath()
local removed = ImageCache.remove("uncached/image.png")
luaunit.assertFalse(removed)
end
function TestImageCache:testClearEmptyCache()
-- Should not error on empty cache
ImageCache.clear()
local stats = ImageCache.getStats()
luaunit.assertEquals(stats.count, 0)
luaunit.assertEquals(stats.memoryEstimate, 0)
end
function TestImageCache:testGetStatsOnEmptyCache()
ImageCache.clear()
local stats = ImageCache.getStats()
luaunit.assertNotNil(stats)
luaunit.assertEquals(stats.count, 0)
luaunit.assertEquals(stats.memoryEstimate, 0)
end
function TestImageCache:testPathNormalization()
-- Test that paths with different slashes are normalized
local path1 = "themes/space.png"
local path2 = "themes\\space.png" -- Windows style
-- Both should normalize to the same path
-- (If first load fails, both should fail the same way)
local img1, err1 = ImageCache.load(path1)
local img2, err2 = ImageCache.load(path2)
-- Both should have same result (either both nil or both same image)
if img1 == nil then
luaunit.assertNil(img2)
else
luaunit.assertEquals(img1, img2)
end
end
function TestImageCache:testLoadWithImageDataFlag()
-- Test loading with imageData flag on invalid path
local img, err = ImageCache.load("invalid/path.png", true)
luaunit.assertNil(img)
luaunit.assertNotNil(err)
end
function TestImageCache:testMultipleClearCalls()
-- Clear multiple times should not error
ImageCache.clear()
ImageCache.clear()
ImageCache.clear()
local stats = ImageCache.getStats()
luaunit.assertEquals(stats.count, 0)
end
if not _G.RUNNING_ALL_TESTS then
os.exit(luaunit.LuaUnit.run())
end