------------------------------------------------------ -- HuntersHelper_Tests.lua -- testing functions for verifying our tables ------------------------------------------------------ function FHH_RunAllTests() local testNum = 1; local errorCount = 0; while (errorCount == 0 and getglobal("FHH_Test"..testNum) ~= nil) do local testFunc = getglobal("FHH_Test"..testNum) errorCount = testFunc(); testNum = testNum + 1; end end function FHH_Test1() -- 1: make sure all spell-indexed tables have the same spells local errorCount = 0; for spellID in FHH_SpellInfo do if (FHH_RequiredLevel[spellID] == nil) then GFWUtils.Print(GFWUtils.Red("Hunter's Helper Error: ")..GFWUtils.Hilite(spellID).." present in FHH_SpellInfo but not FHH_RequiredLevel."); errorCount = errorCount + 1; end if (FHH_LearnableBy[spellID] == nil) then GFWUtils.Print(GFWUtils.Red("Hunter's Helper Error: ")..GFWUtils.Hilite(spellID).." present in FHH_SpellInfo but not FHH_LearnableBy."); errorCount = errorCount + 1; end end for spellID in FHH_RequiredLevel do if (FHH_SpellInfo[spellID] == nil) then GFWUtils.Print(GFWUtils.Red("Hunter's Helper Error: ")..GFWUtils.Hilite(spellID).." present in FHH_RequiredLevel but not FHH_SpellInfo."); errorCount = errorCount + 1; end if (FHH_LearnableBy[spellID] == nil) then GFWUtils.Print(GFWUtils.Red("Hunter's Helper Error: ")..GFWUtils.Hilite(spellID).." present in FHH_RequiredLevel but not FHH_LearnableBy."); errorCount = errorCount + 1; end end for spellID in FHH_LearnableBy do if FHH_SpellInfo[spellID] == nil then GFWUtils.Print(GFWUtils.Red("Hunter's Helper Error: ")..GFWUtils.Hilite(spellID).." present in FHH_LearnableBy but not FHH_SpellInfo."); errorCount = errorCount + 1; end if FHH_RequiredLevel[spellID] == nil then GFWUtils.Print(GFWUtils.Red("Hunter's Helper Error: ")..GFWUtils.Hilite(spellID).." present in FHH_LearnableBy but not FHH_RequiredLevel."); errorCount = errorCount + 1; end end if (errorCount == 0) then GFWUtils.Print("Test 1 passed; all spell-indexed tables have the same set of indices."); end return errorCount; end function FHH_Test2() -- 2: check spell ranks from FHH_SpellInfo against FHH_RequiredLevel local errorCount = 0; for spellID, ranksTable in FHH_SpellInfo do if (type(ranksTable) == "table" and table.getn(ranksTable) ~= table.getn(FHH_RequiredLevel[spellID])) then GFWUtils.Print(GFWUtils.Red("Hunter's Helper Error: ").."FHH_SpellInfo and FHH_RequiredLevel do not cover the same set of ranks for "..GFWUtils.Hilite(spellID).."."); errorCount = errorCount + 1; end end if (errorCount == 0) then GFWUtils.Print("Test 2 passed; all spell ranks match in FHH_SpellInfo and FHH_RequiredLevel."); end return errorCount; end function FHH_Test3() -- 3: make sure every beast listed in FHH_SpellInfo has info in FHH_BeastLevels local errorCount = 0; for spellID, ranksTable in FHH_SpellInfo do if (type(ranksTable) == "table") then for rankNum, zonesTable in ranksTable do for zoneName, beastsTable in zonesTable do for _, beastName in beastsTable do local beastLevelInfo = FHH_BeastLevels[beastName]; if (beastLevelInfo == nil) then GFWUtils.Print(GFWUtils.Red("Hunter's Helper Error: ")..GFWUtils.Hilite(beastName).." listed in FHH_SpellInfo but not FHH_BeastLevels."); errorCount = errorCount + 1; if (FHH_Config.tempBeastLevels == nil) then FHH_Config.tempBeastLevels = {}; end FHH_Config.tempBeastLevels[beastName] = { min=1, max=1 }; -- use a saved var to build dummy table for easy editing else if (beastLevelInfo.min == nil or tonumber(beastLevelInfo.min) == nil or beastLevelInfo.min < 1 or beastLevelInfo.min > 60) then GFWUtils.Print(GFWUtils.Red("Hunter's Helper Error: ")..GFWUtils.Hilite(beastName).." has illegal minimum level listed in FHH_BeastLevels."); errorCount = errorCount + 1; end if (beastLevelInfo.max ~= nil and (tonumber(beastLevelInfo.max) == nil or beastLevelInfo.max < 1 or beastLevelInfo.max > 60)) then GFWUtils.Print(GFWUtils.Red("Hunter's Helper Error: ")..GFWUtils.Hilite(beastName).." has illegal maximum level listed in FHH_BeastLevels."); errorCount = errorCount + 1; end end end end end end end if (errorCount == 0) then GFWUtils.Print("Test 3 passed; all beasts in FHH_SpellInfo have levels in FHH_BeastLevels."); end return errorCount; end function FHH_Test4() -- 4: make sure all appropriate info in FHH_SpellInfo is mirrored in FHH_BeastInfo local errorCount = 0; for spellID, ranksTable in FHH_SpellInfo do if (type(ranksTable) == "table") then for rankNum, zonesTable in ranksTable do local niceSpellName = FHH_SpellDescription(spellID, rankNum); for zoneName, beastsTable in zonesTable do for _, beastName in beastsTable do if (FHH_BeastInfo[beastName] == nil) then if (FHH_NewInfo == nil) then FHH_NewInfo = {}; end if (FHH_NewInfo.BeastInfo == nil) then FHH_NewInfo.BeastInfo = {}; end if (FHH_NewInfo.BeastInfo[beastName] == nil) then FHH_NewInfo.BeastInfo[beastName] = {}; end FHH_NewInfo.BeastInfo[beastName][spellID] = rankNum; GFWUtils.Print(GFWUtils.Red("Hunter's Helper Error: ")..GFWUtils.Hilite(beastName).." not present in FHH_BeastInfo; added to FHH_NewInfo.BeastInfo with "..GFWUtils.Hilite(niceSpellName).."."); errorCount = errorCount + 1; elseif (FHH_BeastInfo[beastName][spellID] == nil or FHH_BeastInfo[beastName][spellID] ~= rankNum) then if (FHH_NewInfo == nil) then FHH_NewInfo = {}; end if (FHH_NewInfo.BeastInfo == nil) then FHH_NewInfo.BeastInfo = {}; end if (FHH_NewInfo.BeastInfo[beastName] == nil) then FHH_NewInfo.BeastInfo[beastName] = {}; end FHH_NewInfo.BeastInfo[beastName][spellID] = rankNum; GFWUtils.Print(GFWUtils.Red("Hunter's Helper Error: ")..GFWUtils.Hilite(niceSpellName).." not present in FHH_BeastInfo for "..GFWUtils.Hilite(beastName).."; added to FHH_NewInfo.BeastInfo."); errorCount = errorCount + 1; end end end end end end if (errorCount == 0) then GFWUtils.Print("Test 4 passed; all appropriate info from FHH_SpellInfo is mirrored in FHH_BeastInfo."); end return errorCount; end function FHH_Test5() -- 5: vice versa; make sure everything from FHH_BeastInfo is mirrored in FHH_SpellInfo local errorCount = 0; for beastName, spellsTable in FHH_BeastInfo do for spellID, rankNum in spellsTable do local niceSpellName = FHH_SpellDescription(spellID, rankNum); local spellTable = FHH_SpellInfo[spellID]; if (spellTable == nil) then GFWUtils.Print(GFWUtils.Red("Hunter's Helper Error: ")..GFWUtils.Hilite(beastName).." has spell "..GFWUtils.Hilite(spellID).." which is unknown in FHH_SpellInfo."); errorCount = errorCount + 1; else local zonesTable = spellTable[rankNum]; if (zonesTable == nil) then GFWUtils.Print(GFWUtils.Red("Hunter's Helper Error: ")..GFWUtils.Hilite(beastName).." has spell rank "..GFWUtils.Hilite(niceSpellName).." which is unknown in FHH_SpellInfo."); errorCount = errorCount + 1; else local foundBeast = false; for zoneName, beastsTable in zonesTable do for _, aBeast in beastsTable do if (aBeast == beastName) then foundBeast = true; end end end if (not foundBeast) then GFWUtils.Print(GFWUtils.Red("Hunter's Helper Error: ")..GFWUtils.Hilite(beastName).." not found in FHH_SpellInfo for spell "..GFWUtils.Hilite(niceSpellName).."."); errorCount = errorCount + 1; end end end end end if (errorCount == 0) then GFWUtils.Print("Test 5 passed; all appropriate info from FHH_BeastInfo is mirrored in FHH_SpellInfo."); end return errorCount; end function FHH_Test6() -- 6: make sure every beast listed in FHH_BeastInfo is in FHH_BeastLevels and vice versa local errorCount = 0; for beastName in FHH_BeastInfo do if (FHH_BeastLevels[beastName] == nil) then GFWUtils.Print(GFWUtils.Red("Hunter's Helper Error: ")..GFWUtils.Hilite(beastName).." is in FHH_BeastInfo but not FHH_BeastLevels."); errorCount = errorCount + 1; end end for beastName in FHH_BeastLevels do if (FHH_BeastInfo[beastName] == nil) then GFWUtils.Print(GFWUtils.Red("Hunter's Helper Error: ")..GFWUtils.Hilite(beastName).." is in FHH_BeastLevels but not FHH_BeastInfo."); errorCount = errorCount + 1; end end if (errorCount == 0) then GFWUtils.Print("Test 6 passed; beast-indexed tables (FHH_BeastInfo and FHH_BeastLevels) match all indices."); end return errorCount; end function FHH_Test7() -- 7: make sure every beast in FHH_BeastLevels is listed in FHH_SpellInfo local errorCount = 0; for beastName in FHH_BeastLevels do local foundBeast = false; for spellID, ranksTable in FHH_SpellInfo do if (type(ranksTable) == "table") then for rankNum, zonesTable in ranksTable do for zoneName, beastsTable in zonesTable do for _, aBeast in beastsTable do if (aBeast == beastName) then foundBeast = true; end end end end end end if (not foundBeast) then GFWUtils.Print(GFWUtils.Red("Hunter's Helper Error: ")..GFWUtils.Hilite(beastName).." is in FHH_BeastLevels but not FHH_SpellInfo."); errorCount = errorCount + 1; end end if (errorCount == 0) then GFWUtils.Print("Test 7 passed; every beast in FHH_BeastLevels is listed in FHH_SpellInfo."); end return errorCount; end