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