AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
SpellProcAttributeTest.cpp File Reference

Unit tests for PROC_ATTR_* flags. More...

#include "ProcChanceTestHelper.h"
#include "ProcEventInfoHelper.h"
#include "SpellInfoTestHelper.h"
#include "AuraStub.h"
#include "UnitStub.h"
#include "gtest/gtest.h"

Go to the source code of this file.

Classes

class  SpellProcAttributeTest
 

Functions

 TEST_F (SpellProcAttributeTest, ReqExpOrHonor_AttributeSet)
 
 TEST_F (SpellProcAttributeTest, ReqExpOrHonor_AttributeNotSet)
 
 TEST_F (SpellProcAttributeTest, TriggeredCanProc_AttributeSet)
 
 TEST_F (SpellProcAttributeTest, TriggeredCanProc_AttributeNotSet)
 
 TEST_F (SpellProcAttributeTest, ReqManaCost_AttributeSet)
 
 TEST_F (SpellProcAttributeTest, ReqManaCost_NullSpell_ShouldNotProc)
 
 TEST_F (SpellProcAttributeTest, ReqSpellmod_AttributeSet)
 
 TEST_F (SpellProcAttributeTest, ReqSpellmod_AttributeNotSet)
 
 TEST_F (SpellProcAttributeTest, ReqSpellmod_AutoGen_PctModifierWithCharges)
 
 TEST_F (SpellProcAttributeTest, ReqSpellmod_AutoGen_FlatModifierWithCharges)
 
 TEST_F (SpellProcAttributeTest, ReqSpellmod_AutoGen_NoCharges_NotSet)
 
 TEST_F (SpellProcAttributeTest, ReqSpellmod_AutoGen_NonModifierWithCharges_NotSet)
 
 TEST_F (SpellProcAttributeTest, ReqSpellmod_AutoGen_ModifierOnSecondEffect)
 
 TEST_F (SpellProcAttributeTest, ReqSpellmod_AutoGen_PreservesExistingAttributes)
 
 TEST_F (SpellProcAttributeTest, UseStacksForCharges_AttributeSet)
 
 TEST_F (SpellProcAttributeTest, UseStacksForCharges_DecrementStacks)
 
 TEST_F (SpellProcAttributeTest, UseStacksForCharges_NotSet_DecrementCharges)
 
 TEST_F (SpellProcAttributeTest, ReduceProc60_AttributeSet)
 
 TEST_F (SpellProcAttributeTest, ReduceProc60_Level60_NoReduction)
 
 TEST_F (SpellProcAttributeTest, ReduceProc60_Level70_Reduced)
 
 TEST_F (SpellProcAttributeTest, ReduceProc60_Level80_Reduced)
 
 TEST_F (SpellProcAttributeTest, ReduceProc60_BelowLevel60_NoReduction)
 
 TEST_F (SpellProcAttributeTest, ReduceProc60_NotSet_NoReduction)
 
 TEST_F (SpellProcAttributeTest, CantProcFromItemCast_AttributeSet)
 
 TEST_F (SpellProcAttributeTest, CantProcFromItemCast_AttributeNotSet)
 
 TEST_F (SpellProcAttributeTest, CombinedAttributes_MultipleFlags)
 
 TEST_F (SpellProcAttributeTest, CombinedAttributes_AllFlags)
 
 TEST_F (SpellProcAttributeTest, Scenario_SealOfCommand_TriggeredCanProc)
 
 TEST_F (SpellProcAttributeTest, Scenario_ClearCasting_ReqManaCost)
 
 TEST_F (SpellProcAttributeTest, Scenario_MaelstromWeapon_UseStacks)
 
 TEST_F (SpellProcAttributeTest, Scenario_OldLevelScaling_ReduceProc60)
 
 TEST_F (SpellProcAttributeTest, AttributeValues_Correct)
 
 TEST_F (SpellProcAttributeTest, AttributeFlags_NonOverlapping)
 

Detailed Description

Unit tests for PROC_ATTR_* flags.

Tests all proc attribute flags:

  • PROC_ATTR_REQ_EXP_OR_HONOR (0x01)
  • PROC_ATTR_TRIGGERED_CAN_PROC (0x02)
  • PROC_ATTR_REQ_MANA_COST (0x04)
  • PROC_ATTR_REQ_SPELLMOD (0x08)
  • PROC_ATTR_USE_STACKS_FOR_CHARGES (0x10)
  • PROC_ATTR_REDUCE_PROC_60 (0x80)
  • PROC_ATTR_CANT_PROC_FROM_ITEM_CAST (0x100)

Definition in file SpellProcAttributeTest.cpp.

Function Documentation

◆ TEST_F() [1/33]

TEST_F ( SpellProcAttributeTest  ,
AttributeFlags_NonOverlapping   
)
571{
572 // Verify no two flags share the same bit
573 uint32 flags[] = {
581 };
582
583 for (size_t i = 0; i < sizeof(flags)/sizeof(flags[0]); ++i)
584 {
585 for (size_t j = i + 1; j < sizeof(flags)/sizeof(flags[0]); ++j)
586 {
587 EXPECT_EQ(flags[i] & flags[j], 0u)
588 << "Flags at index " << i << " and " << j << " overlap";
589 }
590 }
591}
std::uint32_t uint32
Definition Define.h:107
@ PROC_ATTR_REQ_MANA_COST
Definition SpellMgr.h:278
@ PROC_ATTR_CANT_PROC_FROM_ITEM_CAST
Definition SpellMgr.h:282
@ PROC_ATTR_USE_STACKS_FOR_CHARGES
Definition SpellMgr.h:280
@ PROC_ATTR_REDUCE_PROC_60
Definition SpellMgr.h:281
@ PROC_ATTR_REQ_EXP_OR_HONOR
Definition SpellMgr.h:276
@ PROC_ATTR_TRIGGERED_CAN_PROC
Definition SpellMgr.h:277
@ PROC_ATTR_REQ_SPELLMOD
Definition SpellMgr.h:279

References PROC_ATTR_CANT_PROC_FROM_ITEM_CAST, PROC_ATTR_REDUCE_PROC_60, PROC_ATTR_REQ_EXP_OR_HONOR, PROC_ATTR_REQ_MANA_COST, PROC_ATTR_REQ_SPELLMOD, PROC_ATTR_TRIGGERED_CAN_PROC, and PROC_ATTR_USE_STACKS_FOR_CHARGES.

◆ TEST_F() [2/33]

TEST_F ( SpellProcAttributeTest  ,
AttributeValues_Correct   
)
559{
560 // Verify attribute flag values match expected hex values
561 EXPECT_EQ(PROC_ATTR_REQ_EXP_OR_HONOR, 0x0000001u);
562 EXPECT_EQ(PROC_ATTR_TRIGGERED_CAN_PROC, 0x0000002u);
563 EXPECT_EQ(PROC_ATTR_REQ_MANA_COST, 0x0000004u);
564 EXPECT_EQ(PROC_ATTR_REQ_SPELLMOD, 0x0000008u);
565 EXPECT_EQ(PROC_ATTR_USE_STACKS_FOR_CHARGES, 0x0000010u);
566 EXPECT_EQ(PROC_ATTR_REDUCE_PROC_60, 0x0000080u);
567 EXPECT_EQ(PROC_ATTR_CANT_PROC_FROM_ITEM_CAST, 0x0000100u);
568}

References PROC_ATTR_CANT_PROC_FROM_ITEM_CAST, PROC_ATTR_REDUCE_PROC_60, PROC_ATTR_REQ_EXP_OR_HONOR, PROC_ATTR_REQ_MANA_COST, PROC_ATTR_REQ_SPELLMOD, PROC_ATTR_TRIGGERED_CAN_PROC, and PROC_ATTR_USE_STACKS_FOR_CHARGES.

◆ TEST_F() [3/33]

TEST_F ( SpellProcAttributeTest  ,
CantProcFromItemCast_AttributeNotSet   
)
426{
427 auto procEntry = SpellProcEntryBuilder()
428 .WithChance(100.0f)
430 .Build();
431
432 EXPECT_FALSE(procEntry.AttributesMask & PROC_ATTR_CANT_PROC_FROM_ITEM_CAST);
433}
Builder class for creating SpellProcEntry test instances.
Definition ProcEventInfoHelper.h:141
SpellProcEntry Build() const
Definition ProcEventInfoHelper.h:226
SpellProcEntryBuilder & WithChance(float chance)
Definition ProcEventInfoHelper.h:208
SpellProcEntryBuilder & WithAttributesMask(uint32 attributesMask)
Definition ProcEventInfoHelper.h:190

References SpellProcEntry::AttributesMask, SpellProcEntryBuilder::Build(), PROC_ATTR_CANT_PROC_FROM_ITEM_CAST, SpellProcEntryBuilder::WithAttributesMask(), and SpellProcEntryBuilder::WithChance().

◆ TEST_F() [4/33]

◆ TEST_F() [5/33]

TEST_F ( SpellProcAttributeTest  ,
CombinedAttributes_AllFlags   
)

◆ TEST_F() [6/33]

TEST_F ( SpellProcAttributeTest  ,
CombinedAttributes_MultipleFlags   
)

◆ TEST_F() [7/33]

◆ TEST_F() [8/33]

TEST_F ( SpellProcAttributeTest  ,
ReduceProc60_BelowLevel60_NoReduction   
)
389{
390 auto procEntry = SpellProcEntryBuilder()
391 .WithChance(30.0f)
393 .Build();
394
395 float chance = ProcChanceTestHelper::SimulateCalcProcChance(procEntry, 50);
396 EXPECT_NEAR(chance, 30.0f, 0.01f);
397}
static float SimulateCalcProcChance(SpellProcEntry const &procEntry, uint32 actorLevel=80, uint32 weaponSpeed=2500, float chanceModifier=0.0f, float ppmModifier=0.0f, bool hasDamageInfo=true, bool hasHealInfo=false)
Simulate CalcProcChance() from SpellAuras.cpp.
Definition ProcChanceTestHelper.h:85

References SpellProcEntryBuilder::Build(), PROC_ATTR_REDUCE_PROC_60, ProcChanceTestHelper::SimulateCalcProcChance(), SpellProcEntryBuilder::WithAttributesMask(), and SpellProcEntryBuilder::WithChance().

◆ TEST_F() [9/33]

TEST_F ( SpellProcAttributeTest  ,
ReduceProc60_Level60_NoReduction   
)

◆ TEST_F() [10/33]

TEST_F ( SpellProcAttributeTest  ,
ReduceProc60_Level70_Reduced   
)
361{
362 auto procEntry = SpellProcEntryBuilder()
363 .WithChance(30.0f)
365 .Build();
366
367 // Level 70 = 10 levels above 60
368 // Reduction = 10/30 = 33.33%
369 // 30% * (1 - 0.333) = 20%
370 float chance = ProcChanceTestHelper::SimulateCalcProcChance(procEntry, 70);
371 EXPECT_NEAR(chance, 20.0f, 0.5f);
372}

References SpellProcEntryBuilder::Build(), PROC_ATTR_REDUCE_PROC_60, ProcChanceTestHelper::SimulateCalcProcChance(), SpellProcEntryBuilder::WithAttributesMask(), and SpellProcEntryBuilder::WithChance().

◆ TEST_F() [11/33]

TEST_F ( SpellProcAttributeTest  ,
ReduceProc60_Level80_Reduced   
)
375{
376 auto procEntry = SpellProcEntryBuilder()
377 .WithChance(30.0f)
379 .Build();
380
381 // Level 80 = 20 levels above 60
382 // Reduction = 20/30 = 66.67%
383 // 30% * (1 - 0.667) = 10%
384 float chance = ProcChanceTestHelper::SimulateCalcProcChance(procEntry, 80);
385 EXPECT_NEAR(chance, 10.0f, 0.5f);
386}

References SpellProcEntryBuilder::Build(), PROC_ATTR_REDUCE_PROC_60, ProcChanceTestHelper::SimulateCalcProcChance(), SpellProcEntryBuilder::WithAttributesMask(), and SpellProcEntryBuilder::WithChance().

◆ TEST_F() [12/33]

TEST_F ( SpellProcAttributeTest  ,
ReduceProc60_NotSet_NoReduction   
)
400{
401 auto procEntry = SpellProcEntryBuilder()
402 .WithChance(30.0f)
403 .WithAttributesMask(0) // No REDUCE_PROC_60
404 .Build();
405
406 // Even at level 80, no reduction without attribute
407 float chance = ProcChanceTestHelper::SimulateCalcProcChance(procEntry, 80);
408 EXPECT_NEAR(chance, 30.0f, 0.01f);
409}

References SpellProcEntryBuilder::Build(), ProcChanceTestHelper::SimulateCalcProcChance(), SpellProcEntryBuilder::WithAttributesMask(), and SpellProcEntryBuilder::WithChance().

◆ TEST_F() [13/33]

TEST_F ( SpellProcAttributeTest  ,
ReqExpOrHonor_AttributeNotSet   
)

◆ TEST_F() [14/33]

TEST_F ( SpellProcAttributeTest  ,
ReqExpOrHonor_AttributeSet   
)

◆ TEST_F() [15/33]

TEST_F ( SpellProcAttributeTest  ,
ReqManaCost_AttributeSet   
)

◆ TEST_F() [16/33]

TEST_F ( SpellProcAttributeTest  ,
ReqManaCost_NullSpell_ShouldNotProc   
)
110{
111 // Null spell should never satisfy mana cost requirement
112 EXPECT_FALSE(ProcChanceTestHelper::SpellHasManaCost(nullptr));
113}
static bool SpellHasManaCost(SpellInfo const *spellInfo)
Check if spell has mana cost (for PROC_ATTR_REQ_MANA_COST)
Definition ProcChanceTestHelper.h:176

References ProcChanceTestHelper::SpellHasManaCost().

◆ TEST_F() [17/33]

TEST_F ( SpellProcAttributeTest  ,
ReqSpellmod_AttributeNotSet   
)
130{
131 auto procEntry = SpellProcEntryBuilder()
132 .WithChance(100.0f)
134 .Build();
135
136 EXPECT_FALSE(procEntry.AttributesMask & PROC_ATTR_REQ_SPELLMOD);
137}

References SpellProcEntryBuilder::Build(), PROC_ATTR_REQ_SPELLMOD, SpellProcEntryBuilder::WithAttributesMask(), and SpellProcEntryBuilder::WithChance().

◆ TEST_F() [18/33]

TEST_F ( SpellProcAttributeTest  ,
ReqSpellmod_AttributeSet   
)

◆ TEST_F() [19/33]

TEST_F ( SpellProcAttributeTest  ,
ReqSpellmod_AutoGen_FlatModifierWithCharges   
)
187{
188 // Clearcasting-like: ADD_FLAT_MODIFIER + charges
189 auto spellInfo = SpellInfoBuilder()
190 .WithId(12345)
193 .BuildUnique();
194
196 .WithCharges(2)
197 .WithChance(100.0f)
198 .Build();
199
200 ApplyAutoGeneratedSpellmodFlag(spellInfo.get(), procEntry);
201
202 EXPECT_TRUE(procEntry.AttributesMask & PROC_ATTR_REQ_SPELLMOD);
203}
@ SPELL_EFFECT_APPLY_AURA
Definition SharedDefines.h:772
@ SPELL_AURA_ADD_FLAT_MODIFIER
Definition SpellAuraDefines.h:170
Builder class for creating SpellInfo test instances.
Definition SpellInfoTestHelper.h:160
SpellInfoBuilder & WithId(uint32 id)
Definition SpellInfoTestHelper.h:164
SpellInfoBuilder & WithProcCharges(uint32 procCharges)
Definition SpellInfoTestHelper.h:200
std::unique_ptr< SpellInfo > BuildUnique()
Definition SpellInfoTestHelper.h:256
SpellInfoBuilder & WithEffect(uint8 effIndex, uint32 effect, uint32 auraType=0)
Definition SpellInfoTestHelper.h:218
SpellProcEntryBuilder & WithCharges(uint32 charges)
Definition ProcEventInfoHelper.h:220
Definition SpellMgr.h:286
uint32 AttributesMask
Definition SpellMgr.h:294

References SpellProcEntry::AttributesMask, SpellProcEntryBuilder::Build(), SpellInfoBuilder::BuildUnique(), PROC_ATTR_REQ_SPELLMOD, SPELL_AURA_ADD_FLAT_MODIFIER, SPELL_EFFECT_APPLY_AURA, SpellProcEntryBuilder::WithChance(), SpellProcEntryBuilder::WithCharges(), SpellInfoBuilder::WithEffect(), SpellInfoBuilder::WithId(), and SpellInfoBuilder::WithProcCharges().

◆ TEST_F() [20/33]

TEST_F ( SpellProcAttributeTest  ,
ReqSpellmod_AutoGen_ModifierOnSecondEffect   
)

◆ TEST_F() [21/33]

TEST_F ( SpellProcAttributeTest  ,
ReqSpellmod_AutoGen_NoCharges_NotSet   
)
206{
207 // Modifier aura without charges should NOT get the flag
208 auto spellInfo = SpellInfoBuilder()
209 .WithId(12345)
212 .BuildUnique();
213
215 .WithCharges(0)
216 .WithChance(100.0f)
217 .Build();
218
219 ApplyAutoGeneratedSpellmodFlag(spellInfo.get(), procEntry);
220
221 EXPECT_FALSE(procEntry.AttributesMask & PROC_ATTR_REQ_SPELLMOD);
222}
@ SPELL_AURA_ADD_PCT_MODIFIER
Definition SpellAuraDefines.h:171

References SpellProcEntry::AttributesMask, SpellProcEntryBuilder::Build(), SpellInfoBuilder::BuildUnique(), PROC_ATTR_REQ_SPELLMOD, SPELL_AURA_ADD_PCT_MODIFIER, SPELL_EFFECT_APPLY_AURA, SpellProcEntryBuilder::WithChance(), SpellProcEntryBuilder::WithCharges(), SpellInfoBuilder::WithEffect(), SpellInfoBuilder::WithId(), and SpellInfoBuilder::WithProcCharges().

◆ TEST_F() [22/33]

TEST_F ( SpellProcAttributeTest  ,
ReqSpellmod_AutoGen_NonModifierWithCharges_NotSet   
)

◆ TEST_F() [23/33]

TEST_F ( SpellProcAttributeTest  ,
ReqSpellmod_AutoGen_PctModifierWithCharges   
)
166{
167 // Rapid Killing (35099): ADD_PCT_MODIFIER + 1 charge
168 auto spellInfo = SpellInfoBuilder()
169 .WithId(35099)
173 .BuildUnique();
174
177 .WithCharges(1)
178 .WithChance(100.0f)
179 .Build();
180
181 ApplyAutoGeneratedSpellmodFlag(spellInfo.get(), procEntry);
182
183 EXPECT_TRUE(procEntry.AttributesMask & PROC_ATTR_REQ_SPELLMOD);
184}
@ PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS
Definition SpellMgr.h:122
@ PROC_FLAG_DONE_RANGED_AUTO_ATTACK
Definition SpellMgr.h:119
SpellInfoBuilder & WithProcFlags(uint32 procFlags)
Definition SpellInfoTestHelper.h:188
SpellProcEntryBuilder & WithProcFlags(uint32 procFlags)
Definition ProcEventInfoHelper.h:166

References SpellProcEntry::AttributesMask, SpellProcEntryBuilder::Build(), SpellInfoBuilder::BuildUnique(), PROC_ATTR_REQ_SPELLMOD, PROC_FLAG_DONE_RANGED_AUTO_ATTACK, PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS, SPELL_AURA_ADD_PCT_MODIFIER, SPELL_EFFECT_APPLY_AURA, SpellProcEntryBuilder::WithChance(), SpellProcEntryBuilder::WithCharges(), SpellInfoBuilder::WithEffect(), SpellInfoBuilder::WithId(), SpellInfoBuilder::WithProcCharges(), SpellProcEntryBuilder::WithProcFlags(), and SpellInfoBuilder::WithProcFlags().

◆ TEST_F() [24/33]

◆ TEST_F() [25/33]

TEST_F ( SpellProcAttributeTest  ,
Scenario_ClearCasting_ReqManaCost   
)
498{
499 // Clearcasting (Mage/Priest) requires spell to have mana cost
500 auto procEntry = SpellProcEntryBuilder()
502 .WithChance(100.0f)
504 .Build();
505
506 EXPECT_TRUE(procEntry.AttributesMask & PROC_ATTR_REQ_MANA_COST);
507
508 // Null spell check - free/costless spells won't trigger
509 EXPECT_FALSE(ProcChanceTestHelper::SpellHasManaCost(nullptr));
510}
@ PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG
Definition SpellMgr.h:134

References SpellProcEntry::AttributesMask, SpellProcEntryBuilder::Build(), PROC_ATTR_REQ_MANA_COST, PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG, ProcChanceTestHelper::SpellHasManaCost(), SpellProcEntryBuilder::WithAttributesMask(), SpellProcEntryBuilder::WithChance(), and SpellProcEntryBuilder::WithProcFlags().

◆ TEST_F() [26/33]

TEST_F ( SpellProcAttributeTest  ,
Scenario_MaelstromWeapon_UseStacks   
)
513{
514 // Maelstrom Weapon (Shaman) uses stacks
515 auto aura = AuraStubBuilder()
516 .WithId(53817)
518 .Build();
519
520 auto procEntry = SpellProcEntryBuilder()
521 .WithChance(100.0f)
523 .Build();
524
525 // Each proc consumes one stack
527 EXPECT_EQ(aura->GetStackAmount(), 4);
528
530 EXPECT_EQ(aura->GetStackAmount(), 3);
531}
Builder for creating AuraStub instances with fluent API.
Definition AuraStub.h:290
AuraStubBuilder & WithStackAmount(uint8_t amount)
Definition AuraStub.h:320
std::unique_ptr< AuraStub > Build()
Definition AuraStub.h:353
AuraStubBuilder & WithId(uint32_t id)
Definition AuraStub.h:294
static bool SimulateConsumeProcCharges(AuraStub *aura, SpellProcEntry const &procEntry)
Simulate charge consumption from ConsumeProcCharges()
Definition ProcChanceTestHelper.h:121

References AuraStubBuilder::Build(), SpellProcEntryBuilder::Build(), PROC_ATTR_USE_STACKS_FOR_CHARGES, ProcChanceTestHelper::SimulateConsumeProcCharges(), SpellProcEntryBuilder::WithAttributesMask(), SpellProcEntryBuilder::WithChance(), AuraStubBuilder::WithId(), and AuraStubBuilder::WithStackAmount().

◆ TEST_F() [27/33]

TEST_F ( SpellProcAttributeTest  ,
Scenario_OldLevelScaling_ReduceProc60   
)
534{
535 // Some old vanilla/TBC procs have reduced chance at higher levels
536 auto procEntry = SpellProcEntryBuilder()
537 .WithChance(50.0f)
539 .Build();
540
541 // Level 60: Full chance
542 float chanceAt60 = ProcChanceTestHelper::SimulateCalcProcChance(procEntry, 60);
543 EXPECT_NEAR(chanceAt60, 50.0f, 0.01f);
544
545 // Level 75: 50% reduction (15/30)
546 float chanceAt75 = ProcChanceTestHelper::SimulateCalcProcChance(procEntry, 75);
547 EXPECT_NEAR(chanceAt75, 25.0f, 0.5f);
548
549 // Level 90: 100% reduction (30/30), capped at 0
550 float chanceAt90 = ProcChanceTestHelper::SimulateCalcProcChance(procEntry, 90);
551 EXPECT_NEAR(chanceAt90, 0.0f, 0.1f);
552}

References SpellProcEntryBuilder::Build(), PROC_ATTR_REDUCE_PROC_60, ProcChanceTestHelper::SimulateCalcProcChance(), SpellProcEntryBuilder::WithAttributesMask(), and SpellProcEntryBuilder::WithChance().

◆ TEST_F() [28/33]

TEST_F ( SpellProcAttributeTest  ,
Scenario_SealOfCommand_TriggeredCanProc   
)

◆ TEST_F() [29/33]

TEST_F ( SpellProcAttributeTest  ,
TriggeredCanProc_AttributeNotSet   
)

◆ TEST_F() [30/33]

TEST_F ( SpellProcAttributeTest  ,
TriggeredCanProc_AttributeSet   
)

◆ TEST_F() [31/33]

◆ TEST_F() [32/33]

◆ TEST_F() [33/33]

TEST_F ( SpellProcAttributeTest  ,
UseStacksForCharges_NotSet_DecrementCharges   
)
316{
317 auto aura = AuraStubBuilder()
318 .WithId(12345)
319 .WithCharges(5)
321 .Build();
322
323 auto procEntry = SpellProcEntryBuilder()
324 .WithChance(100.0f)
325 .WithAttributesMask(0) // No USE_STACKS_FOR_CHARGES
326 .Build();
327
329
330 // Charges should decrement, stacks unchanged
331 EXPECT_EQ(aura->GetCharges(), 4);
332 EXPECT_EQ(aura->GetStackAmount(), 5);
333}
AuraStubBuilder & WithCharges(uint8_t charges)
Definition AuraStub.h:306

References AuraStubBuilder::Build(), SpellProcEntryBuilder::Build(), ProcChanceTestHelper::SimulateConsumeProcCharges(), SpellProcEntryBuilder::WithAttributesMask(), SpellProcEntryBuilder::WithChance(), AuraStubBuilder::WithCharges(), AuraStubBuilder::WithId(), and AuraStubBuilder::WithStackAmount().