@@ -167,6 +167,70 @@ describe("TestAttacks", function()
167167 assert .are .equals (1.1 , build .calcsTab .mainOutput .MainHand .AverageHit )
168168 end )
169169
170+ it (" matches in-game tooltip DPS for low-level spear skills" , function ()
171+ build .spec :SelectClass (build .spec .tree .classNameMap .Huntress )
172+ build .characterLevel = 11
173+ build .characterLevelAutoMode = false
174+ build .controls .characterLevel :SetText (11 )
175+ build .configTab .input .customMods = [[
176+ 10% increased Attack Damage
177+ +10000 to Accuracy Rating
178+ nearby enemies have 100% less armour
179+ nearby enemies have 100% less evasion
180+ ]]
181+ build .configTab :BuildModList ()
182+ build .itemsTab :CreateDisplayItemFromRaw ([[
183+ Apocalypse Edge
184+ Ironhead Spear
185+ Item Level: 7
186+ Quality: 0
187+ LevelReq: 5
188+ Implicits: 1
189+ Grants Skill: Spear Throw
190+ Adds 2 to 4 Physical Damage
191+ ]] )
192+ build .itemsTab :AddDisplayItem ()
193+
194+ local skills = {
195+ { gemId = " Metadata/Items/Gems/SkillGemPlayerDefaultSpear" , level = 4 , dps = 32.8 },
196+ { gemId = " Metadata/Items/Gems/SkillGemWhirlingSlash" , level = 1 , dps = 11.8 },
197+ { gemId = " Metadata/Items/Gems/SkillGemPlayerDefaultSpearThrow" , level = 4 , dps = 28.8 },
198+ { gemId = " Metadata/Items/Gems/SkillGemTwister" , level = 2 , dps = 17.5 },
199+ }
200+ for _ , skill in ipairs (skills ) do
201+ local group = {
202+ enabled = true ,
203+ gemList = { {
204+ gemId = skill .gemId ,
205+ level = skill .level ,
206+ quality = 0 ,
207+ enabled = true ,
208+ count = 1 ,
209+ enableGlobal1 = true ,
210+ enableGlobal2 = true ,
211+ } },
212+ }
213+ table.insert (build .skillsTab .socketGroupList , group )
214+ build .skillsTab :ProcessSocketGroup (group )
215+ skill .groupIndex = # build .skillsTab .socketGroupList
216+ end
217+
218+ for _ , skill in ipairs (skills ) do
219+ local group = build .skillsTab .socketGroupList [skill .groupIndex ]
220+ build .mainSocketGroup = skill .groupIndex
221+ build .calcsTab .input .skill_number = skill .groupIndex
222+ group .mainActiveSkill = 1
223+ group .mainActiveSkillCalcs = 1
224+ build .buildFlag = true
225+ build .modFlag = true
226+ runCallback (" OnFrame" )
227+ build .calcsTab :BuildOutput ()
228+ runCallback (" OnFrame" )
229+
230+ assert .are .equals (skill .dps , round (build .calcsTab .mainOutput .TotalDPS , 1 ))
231+ end
232+ end )
233+
170234 it (" correctly calculates Garukhan's Resolve bifurcated critical hit damage" , function ()
171235 local function setup (socketGroup )
172236 newBuild ()
@@ -210,7 +274,6 @@ describe("TestAttacks", function()
210274 assert .is_true (math.abs (10001 - garukhanOutput .AverageHit ) < 0.01 )
211275 end )
212276
213-
214277 it (" correctly adds damage with oracle forced outcome" , function ()
215278 -- Setup: Add weapon with no crit chance, and strip enemy defenses
216279 build .itemsTab :CreateDisplayItemFromRaw ([[
0 commit comments