Files
Questie-X/Tests/QuestieArrowAssets_spec.lua
T
2026-06-02 12:42:53 -05:00

114 lines
4.7 KiB
Lua

local lfs = require("lfs")
local function read_file(path)
local handle = assert(io.open(path, "rb"))
local content = assert(handle:read("*a"))
handle:close()
return content
end
local function list_arrows()
local names = {}
for entry in lfs.dir("Icons/Arrows") do
if entry ~= "." and entry ~= ".." then
names[#names + 1] = entry
end
end
table.sort(names)
return names
end
local function extract_block(content, key)
local needle = ' ["' .. key .. '"] = {'
local startPos = assert(content:find(needle, 1, true), "missing style block for " .. key)
local tail = content:sub(startPos)
local endPos = assert(tail:find("\n },", 1, true), "missing terminator for style block " .. key)
return tail:sub(1, endPos)
end
local function extract_mode(content, key)
local block = extract_block(content, key)
return assert(block:match('mode%s*=%s*"([^"]+)"'), "missing mode for " .. key)
end
local function extract_texture(content, key)
local block = extract_block(content, key)
return assert(block:match('texture%s*=%s*"([^"]+)"'), "missing texture for " .. key)
end
describe("QuestieArrowAssets manifest", function()
local content = read_file("Modules/Arrow/QuestieArrowAssets.lua")
local arrowLua = read_file("Modules/Arrow/QuestieArrow.lua")
it("keeps the default arrow as a regular image", function()
assert.are.equal("image", extract_mode(content, "arrow1"))
assert.are.equal("Icons\\\\Arrows\\\\Arrow1.tga", extract_texture(content, "arrow1"))
end)
it("keeps the old arrow as a sprite sheet", function()
assert.are.equal("sheet", extract_mode(content, "arrowold"))
end)
it("keeps the other bundled arrows as regular images", function()
assert.are.equal("image", extract_mode(content, "arrow2"))
assert.are.equal("image", extract_mode(content, "arrow3"))
assert.are.equal("image", extract_mode(content, "arrow4"))
assert.are.equal("image", extract_mode(content, "arcanearrow"))
assert.are.equal("image", extract_mode(content, "hordearrow"))
assert.are.equal("image", extract_mode(content, "alliancearrow"))
assert.are.equal("image", extract_mode(content, "minimal1"))
assert.are.equal("image", extract_mode(content, "minimal2"))
assert.are.equal("image", extract_mode(content, "minimal3"))
end)
it("only treats arrowold as a bundled sprite sheet", function()
assert.are.equal("sheet", extract_mode(content, "arrowold"))
assert.are.equal("image", extract_mode(content, "arrow1"))
assert.are.equal("image", extract_mode(content, "arrow2"))
assert.are.equal("image", extract_mode(content, "arrow3"))
assert.are.equal("image", extract_mode(content, "arrow4"))
assert.are.equal("image", extract_mode(content, "arcanearrow"))
assert.are.equal("image", extract_mode(content, "hordearrow"))
assert.are.equal("image", extract_mode(content, "alliancearrow"))
assert.are.equal("image", extract_mode(content, "minimal1"))
assert.are.equal("image", extract_mode(content, "minimal2"))
assert.are.equal("image", extract_mode(content, "minimal3"))
end)
it("keeps the runtime default pointed at arrow1 and the sheet guard locked to arrowold", function()
assert.is_truthy(arrowLua:find('local ARROW_DEFAULT_STYLE = "arrow1"', 1, true))
assert.is_truthy(arrowLua:find('return styleKey == "arrowold"', 1, true))
assert.is_truthy(arrowLua:find('if styleKey == "arrow" then', 1, true))
assert.is_truthy(arrowLua:find('self.arrow:SetTexCoord(0, 1, 0, 1)', 1, true))
assert.is_truthy(arrowLua:find('local runtimeTexture = style.preview', 1, true))
assert.is_truthy(arrowLua:find('sourceTexturePath = QuestieLib.AddonPath .. style.texture', 1, true))
end)
it("keeps the bundled arrow folder clean and named consistently", function()
assert.are.same({
"AllianceArrow.tga",
"AllianceArrow_preview.tga",
"ArcaneArrow.tga",
"ArcaneArrow_preview.tga",
"Arrow1.tga",
"Arrow1_preview.tga",
"Arrow2.tga",
"Arrow2_preview.tga",
"Arrow3.tga",
"Arrow3_preview.tga",
"Arrow4.tga",
"Arrow4_preview.tga",
"HordeArrow.tga",
"HordeArrow_preview.tga",
"Minimal1.tga",
"Minimal1_preview.tga",
"Minimal2.tga",
"Minimal2_preview.tga",
"Minimal3.tga",
"Minimal3_preview.tga",
"arrowold.tga",
"arrowold_preview.tga",
}, list_arrows())
end)
end)