Mercurial > wow > itemauditor
changeset 66:b7bc0488f13b
Adding unit tests
author | Asa Ayers <Asa.Ayers@Gmail.com> |
---|---|
date | Tue, 27 Jul 2010 18:17:59 -0700 |
parents | 32d53abee666 |
children | b6c30a5156f9 |
files | ItemAuditor.toc Modules/UnitTests.lua |
diffstat | 2 files changed, 217 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/ItemAuditor.toc Tue Jul 27 18:15:38 2010 -0700 +++ b/ItemAuditor.toc Tue Jul 27 18:17:59 2010 -0700 @@ -2,10 +2,10 @@ ## Title: Item Auditor ## Notes: This will keep track of how much you have paid per item in your inventory. Only one of (Auctionator, Auctioneer, AuctionLite, AuctionMaster) is needed to determine which items are profitable to craft. ## Author: Asa Ayers <Asa.Ayers@Gmail.com> -## Version: 0.1 +## Version: @project-version@ ## SavedVariables: ItemAuditorDB ## Dependencies: Altoholic -## OptionalDeps: QuickAuctions, Skillet, LilSparkysWorkshop, Auctionator, Auctioneer, AuctionLite, AuctionMaster, DevTools +## OptionalDeps: QuickAuctions, Skillet, LilSparkysWorkshop, Auctionator, Auctioneer, AuctionLite, AuctionMaster, DevTools, WoWUnit embeds.xml @@ -26,3 +26,5 @@ Modules\QuickAuctions.lua Modules\Api.lua + +Modules\UnitTests.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Modules/UnitTests.lua Tue Jul 27 18:17:59 2010 -0700 @@ -0,0 +1,213 @@ +--@debug@ +local ItemAuditor = select(2, ...) +local Utils= ItemAuditor:GetModule("Utils") + +local function assertTable(tblA, tblB, msg) + for key, value in pairs(tblA) do + assert(tblA[key] == tblB[key], msg) + end + for key, value in pairs(tblB) do + assert(tblA[key] == tblB[key], msg) + end +end + +local UnitTests = {}; +local backups = {} + +local FROSTWEAVE = "\124cffffffff\124Hitem:33470:0:0:0:0:0:0:0:0\124h[Frostweave Cloth]\124h\124r" +local RUNECLOTH = "\124cffffffff\124Hitem:14047:0:0:0:0:0:0:0:0\124h[Runecloth]\124h\124r" +local BOLT_FW = "\124cffffd000\124Henchant:55899\124h[Tailoring: Bolt of Frostweave]\124h\124r" + +local fakeBags = { + [0] = { + size = 16, + contents = { + [0] = nil, + [1] = {link = FROSTWEAVE, count=10}, + } + }, + [1] = { + size = 8, + contents = { + [0] = {link = RUNECLOTH, count=20}, + } + }, +} + +local fakeMoney = 314159265 + +local fakeAlts = { + [33470] = 10, -- Frostweave +} + + +UnitTests.Utils = { + mocks = { + }; + setUp = function() + return {}; + end; + tearDown = function() + end; + + testGetItemID = function() + local id = Utils.GetItemID(FROSTWEAVE) + assert(id == 33470) + + -- This test doesn't work yet. + -- local id = Utils:GetItemID('invalid link') + -- assert(id == nil) + end; + + testGetIDFromLink = function() + -- This should be moved to Utils + local id = ItemAuditor:GetIDFromLink(FROSTWEAVE) + assert(id == 33470) + end; + + testGetSafeLink = function() + -- This should be moved to Utils + local link = ItemAuditor:GetSafeLink(FROSTWEAVE) + assert(link == 'item:33470') + end; +} + +UnitTests.Core = { + mocks = { + NUM_BAG_SLOTS = 1; + GetContainerNumSlots = function(bagID) + return (fakeBags[bagID] and fakeBags[bagID].size) or 0 + end; + GetContainerItemLink = function(bagID, slotID) + return fakeBags[bagID] and fakeBags[bagID].contents[slotID] and fakeBags[bagID].contents[slotID].link + end; + GetMoney = function() + return fakeMoney + end; + GetItemCount = function(link) + local total = 0 + local id = tonumber(link) or ItemAuditor:GetIDFromLink(link) + + for bagID, bag in pairs(fakeBags) do + for slotID, contents in pairs(bag.contents) do + if contents and ItemAuditor:GetIDFromLink(contents.link) == id then + total = total + contents.count + end + end + end + return total + end; + }; + setUp = function() + ItemAuditor:Print('Unit Test setUp') + backups['ItemAuditor.db'] = ItemAuditor.db + ItemAuditor.db = { + char = { + ah = 1, + use_quick_auctions = false, + crafting_threshold = 1, + auction_threshold = 0.15, + output_chat_frame = nil, + }, + profile = { + messages = { + cost_updates = true, + queue_skip = false, + }, + ItemAuditor_enabled = true, + -- This is for development, so I have no plans to turn it into an option. + show_debug_frame_on_startup = false, + }, + factionrealm = { + items = {}, + item_account = {}, + }, + } + + backups['Altoholic.GetItemCount'] = Altoholic.GetItemCount + Altoholic.GetItemCount = function(self, id) + local total = GetItemCount(id) + total = total + (fakeAlts[id] or 0) + + return total + end + + ItemAuditor:UpdateCurrentInventory() + + return {}; + end; + tearDown = function() + ItemAuditor:Print('Unit Test tearDown') + ItemAuditor:UpdateCurrentInventory() + ItemAuditor.db = backups['ItemAuditor.db'] + Altoholic.GetItemCount = backups['Altoholic.GetItemCount'] + end; + + testMockGetContainerItemLink = function() + assert(GetContainerItemLink(0, 1) == FROSTWEAVE) + end; + + testGetItemCost = function(ia) + local total, individual, count = ItemAuditor:GetItemCost(FROSTWEAVE) + assert(total == 0, "total: "..total) + assert(individual == 0, "individual: "..individual) + assert(count == 20, "count: "..count) + + local total, individual, count = ItemAuditor:GetItemCost(BOLT_FW) + assert(total == 0, "total: "..total) + assert(individual == 0, "individual: "..individual) + assert(count == 0, "count: "..count) + end; + + testGetCurrentInventory = function() + local inventory = ItemAuditor:GetCurrentInventory() + assert(inventory.items['item:33470'] == 10) + assert(inventory.items['item:14047'] == 20) + assert(inventory.money == fakeMoney) + end; + + testUpdateAuditPurchase = function() + ItemAuditor:UpdateCurrentInventory() + local backupSaveValue = ItemAuditor.SaveValue + + local price = 200000 + + ItemAuditor.SaveValue = function(self, link, value, countChange) + assertEquals({'item:33470', price, 20}, {link, value, countChange}) + return backupSaveValue(self, link, value, countChange) + end + + ItemAuditor:UpdateAudit() + + assertEquals({0, 0, 20}, {ItemAuditor:GetItemCost(FROSTWEAVE)}) + + -- buy 20 for 20g. Because I already had 20 frostweave, this will + -- be counted like I spent 40g on 40 frostweave + fakeBags[1].contents[5] = {link = FROSTWEAVE, count=20} + fakeMoney = fakeMoney - price + ItemAuditor:UpdateAudit() + + assertEquals({400000, 10000, 40}, {ItemAuditor:GetItemCost(FROSTWEAVE)}) + + ItemAuditor.SaveValue = function(self, link, value, countChange) + assertEquals({'item:33470', 0-price, -10}, {link, value, countChange}) + return backupSaveValue(self, link, value, countChange) + end + + -- Sell 10 frostweave for 20g. + fakeBags[1].contents[5] = {link = FROSTWEAVE, count=10} + fakeMoney = fakeMoney + price + ItemAuditor:UpdateAudit() + + assertEquals({200000, 6667, 30}, {ItemAuditor:GetItemCost(FROSTWEAVE)}) + + ItemAuditor.SaveValue = backupSaveValue + end +} + +if WoWUnit then + WoWUnit:AddTestSuite("ItemAuditor", UnitTests); + + WoWUnitConsole:SlashCommand('ItemAuditor') +end +--@end-debug@ \ No newline at end of file