annotate Modules/UnitTests.lua @ 75:8882af8f932c

Added tag release 2010-07-29 for changeset 71de6e86a1a4
author Asa Ayers <Asa.Ayers@Gmail.com>
date Thu, 29 Jul 2010 22:36:50 -0700
parents 4ae431c98059
children e9f7bc9199ca
rev   line source
Asa@66 1 --@debug@
Asa@66 2 local ItemAuditor = select(2, ...)
Asa@66 3 local Utils= ItemAuditor:GetModule("Utils")
Asa@66 4
Asa@66 5 local function assertTable(tblA, tblB, msg)
Asa@66 6 for key, value in pairs(tblA) do
Asa@66 7 assert(tblA[key] == tblB[key], msg)
Asa@66 8 end
Asa@66 9 for key, value in pairs(tblB) do
Asa@66 10 assert(tblA[key] == tblB[key], msg)
Asa@66 11 end
Asa@66 12 end
Asa@66 13
Asa@66 14 local UnitTests = {};
Asa@66 15 local backups = {}
Asa@66 16
Asa@66 17 local FROSTWEAVE = "\124cffffffff\124Hitem:33470:0:0:0:0:0:0:0:0\124h[Frostweave Cloth]\124h\124r"
Asa@66 18 local RUNECLOTH = "\124cffffffff\124Hitem:14047:0:0:0:0:0:0:0:0\124h[Runecloth]\124h\124r"
Asa@66 19 local BOLT_FW = "\124cffffd000\124Henchant:55899\124h[Tailoring: Bolt of Frostweave]\124h\124r"
Asa@66 20
Asa@66 21 local fakeBags = {
Asa@66 22 [0] = {
Asa@66 23 size = 16,
Asa@66 24 contents = {
Asa@66 25 [0] = nil,
Asa@66 26 [1] = {link = FROSTWEAVE, count=10},
Asa@66 27 }
Asa@66 28 },
Asa@66 29 [1] = {
Asa@66 30 size = 8,
Asa@66 31 contents = {
Asa@66 32 [0] = {link = RUNECLOTH, count=20},
Asa@66 33 }
Asa@66 34 },
Asa@66 35 }
Asa@66 36
Asa@66 37 local fakeMoney = 314159265
Asa@66 38
Asa@66 39 local fakeAlts = {
Asa@66 40 [33470] = 10, -- Frostweave
Asa@66 41 }
Asa@66 42
Asa@66 43
Asa@66 44 UnitTests.Utils = {
Asa@66 45 mocks = {
Asa@66 46 };
Asa@66 47 setUp = function()
Asa@66 48 return {};
Asa@66 49 end;
Asa@66 50 tearDown = function()
Asa@66 51 end;
Asa@66 52
Asa@66 53 testGetItemID = function()
Asa@66 54 local id = Utils.GetItemID(FROSTWEAVE)
Asa@66 55 assert(id == 33470)
Asa@66 56
Asa@66 57 -- This test doesn't work yet.
Asa@66 58 -- local id = Utils:GetItemID('invalid link')
Asa@66 59 -- assert(id == nil)
Asa@66 60 end;
Asa@66 61
Asa@66 62 testGetIDFromLink = function()
Asa@66 63 -- This should be moved to Utils
Asa@66 64 local id = ItemAuditor:GetIDFromLink(FROSTWEAVE)
Asa@66 65 assert(id == 33470)
Asa@66 66 end;
Asa@66 67
Asa@66 68 testGetSafeLink = function()
Asa@66 69 -- This should be moved to Utils
Asa@66 70 local link = ItemAuditor:GetSafeLink(FROSTWEAVE)
Asa@66 71 assert(link == 'item:33470')
Asa@66 72 end;
Asa@66 73 }
Asa@66 74
Asa@66 75 UnitTests.Core = {
Asa@66 76 mocks = {
Asa@66 77 NUM_BAG_SLOTS = 1;
Asa@66 78 GetContainerNumSlots = function(bagID)
Asa@66 79 return (fakeBags[bagID] and fakeBags[bagID].size) or 0
Asa@66 80 end;
Asa@66 81 GetContainerItemLink = function(bagID, slotID)
Asa@66 82 return fakeBags[bagID] and fakeBags[bagID].contents[slotID] and fakeBags[bagID].contents[slotID].link
Asa@66 83 end;
Asa@66 84 GetMoney = function()
Asa@66 85 return fakeMoney
Asa@66 86 end;
Asa@66 87 GetItemCount = function(link)
Asa@66 88 local total = 0
Asa@66 89 local id = tonumber(link) or ItemAuditor:GetIDFromLink(link)
Asa@66 90
Asa@66 91 for bagID, bag in pairs(fakeBags) do
Asa@66 92 for slotID, contents in pairs(bag.contents) do
Asa@66 93 if contents and ItemAuditor:GetIDFromLink(contents.link) == id then
Asa@66 94 total = total + contents.count
Asa@66 95 end
Asa@66 96 end
Asa@66 97 end
Asa@66 98 return total
Asa@66 99 end;
Asa@66 100 };
Asa@66 101 setUp = function()
Asa@66 102 ItemAuditor:Print('Unit Test setUp')
Asa@66 103 backups['ItemAuditor.db'] = ItemAuditor.db
Asa@66 104 ItemAuditor.db = {
Asa@66 105 char = {
Asa@66 106 ah = 1,
Asa@66 107 use_quick_auctions = false,
Asa@66 108 crafting_threshold = 1,
Asa@66 109 auction_threshold = 0.15,
Asa@66 110 output_chat_frame = nil,
Asa@66 111 },
Asa@66 112 profile = {
Asa@66 113 messages = {
Asa@66 114 cost_updates = true,
Asa@66 115 queue_skip = false,
Asa@66 116 },
Asa@66 117 ItemAuditor_enabled = true,
Asa@66 118 -- This is for development, so I have no plans to turn it into an option.
Asa@66 119 show_debug_frame_on_startup = false,
Asa@66 120 },
Asa@66 121 factionrealm = {
Asa@66 122 items = {},
Asa@66 123 item_account = {},
Asa@66 124 },
Asa@66 125 }
Asa@66 126
Asa@66 127 backups['Altoholic.GetItemCount'] = Altoholic.GetItemCount
Asa@66 128 Altoholic.GetItemCount = function(self, id)
Asa@66 129 local total = GetItemCount(id)
Asa@66 130 total = total + (fakeAlts[id] or 0)
Asa@66 131
Asa@66 132 return total
Asa@66 133 end
Asa@66 134
Asa@66 135 ItemAuditor:UpdateCurrentInventory()
Asa@66 136
Asa@66 137 return {};
Asa@66 138 end;
Asa@66 139 tearDown = function()
Asa@66 140 ItemAuditor:Print('Unit Test tearDown')
Asa@66 141 ItemAuditor:UpdateCurrentInventory()
Asa@66 142 ItemAuditor.db = backups['ItemAuditor.db']
Asa@66 143 Altoholic.GetItemCount = backups['Altoholic.GetItemCount']
Asa@66 144 end;
Asa@66 145
Asa@66 146 testMockGetContainerItemLink = function()
Asa@66 147 assert(GetContainerItemLink(0, 1) == FROSTWEAVE)
Asa@66 148 end;
Asa@66 149
Asa@66 150 testGetItemCost = function(ia)
Asa@66 151 local total, individual, count = ItemAuditor:GetItemCost(FROSTWEAVE)
Asa@66 152 assert(total == 0, "total: "..total)
Asa@66 153 assert(individual == 0, "individual: "..individual)
Asa@66 154 assert(count == 20, "count: "..count)
Asa@66 155
Asa@66 156 local total, individual, count = ItemAuditor:GetItemCost(BOLT_FW)
Asa@66 157 assert(total == 0, "total: "..total)
Asa@66 158 assert(individual == 0, "individual: "..individual)
Asa@66 159 assert(count == 0, "count: "..count)
Asa@66 160 end;
Asa@66 161
Asa@66 162 testGetCurrentInventory = function()
Asa@66 163 local inventory = ItemAuditor:GetCurrentInventory()
Asa@66 164 assert(inventory.items['item:33470'] == 10)
Asa@66 165 assert(inventory.items['item:14047'] == 20)
Asa@66 166 assert(inventory.money == fakeMoney)
Asa@66 167 end;
Asa@66 168
Asa@66 169 testUpdateAuditPurchase = function()
Asa@66 170 ItemAuditor:UpdateCurrentInventory()
Asa@66 171 local backupSaveValue = ItemAuditor.SaveValue
Asa@66 172
Asa@66 173 local price = 200000
Asa@66 174
Asa@66 175 ItemAuditor.SaveValue = function(self, link, value, countChange)
Asa@66 176 assertEquals({'item:33470', price, 20}, {link, value, countChange})
Asa@66 177 return backupSaveValue(self, link, value, countChange)
Asa@66 178 end
Asa@66 179
Asa@66 180 ItemAuditor:UpdateAudit()
Asa@66 181
Asa@66 182 assertEquals({0, 0, 20}, {ItemAuditor:GetItemCost(FROSTWEAVE)})
Asa@66 183
Asa@66 184 -- buy 20 for 20g. Because I already had 20 frostweave, this will
Asa@66 185 -- be counted like I spent 40g on 40 frostweave
Asa@66 186 fakeBags[1].contents[5] = {link = FROSTWEAVE, count=20}
Asa@66 187 fakeMoney = fakeMoney - price
Asa@66 188 ItemAuditor:UpdateAudit()
Asa@66 189
Asa@66 190 assertEquals({400000, 10000, 40}, {ItemAuditor:GetItemCost(FROSTWEAVE)})
Asa@66 191
Asa@66 192 ItemAuditor.SaveValue = function(self, link, value, countChange)
Asa@66 193 assertEquals({'item:33470', 0-price, -10}, {link, value, countChange})
Asa@66 194 return backupSaveValue(self, link, value, countChange)
Asa@66 195 end
Asa@66 196
Asa@66 197 -- Sell 10 frostweave for 20g.
Asa@66 198 fakeBags[1].contents[5] = {link = FROSTWEAVE, count=10}
Asa@66 199 fakeMoney = fakeMoney + price
Asa@66 200 ItemAuditor:UpdateAudit()
Asa@66 201
Asa@66 202 assertEquals({200000, 6667, 30}, {ItemAuditor:GetItemCost(FROSTWEAVE)})
Asa@66 203
Asa@66 204 ItemAuditor.SaveValue = backupSaveValue
Asa@66 205 end
Asa@66 206 }
Asa@66 207
Asa@66 208 if WoWUnit then
Asa@66 209 WoWUnit:AddTestSuite("ItemAuditor", UnitTests);
Asa@66 210
Asa@69 211 -- WoWUnitConsole:SlashCommand('ItemAuditor')
Asa@66 212 end
Asa@66 213 --@end-debug@