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

Unit tests for DisableEffectsMask filtering in proc system. More...

#include "ProcChanceTestHelper.h"
#include "ProcEventInfoHelper.h"
#include "gtest/gtest.h"

Go to the source code of this file.

Classes

class  SpellProcDisableEffectsTest
 

Functions

 TEST_F (SpellProcDisableEffectsTest, DisableEffect0_BlocksOnlyEffect0)
 
 TEST_F (SpellProcDisableEffectsTest, DisableEffect1_BlocksOnlyEffect1)
 
 TEST_F (SpellProcDisableEffectsTest, DisableEffect2_BlocksOnlyEffect2)
 
 TEST_F (SpellProcDisableEffectsTest, DisableEffects0And1_LeavesEffect2)
 
 TEST_F (SpellProcDisableEffectsTest, DisableEffects0And2_LeavesEffect1)
 
 TEST_F (SpellProcDisableEffectsTest, DisableEffects1And2_LeavesEffect0)
 
 TEST_F (SpellProcDisableEffectsTest, DisableAllEffects_BlocksProc)
 
 TEST_F (SpellProcDisableEffectsTest, NotAllDisabled_ProcAllowed)
 
 TEST_F (SpellProcDisableEffectsTest, PartialInitialMask_Effect0Only)
 
 TEST_F (SpellProcDisableEffectsTest, PartialInitialMask_Effects0And1)
 
 TEST_F (SpellProcDisableEffectsTest, ZeroDisableMask_NoEffectDisabled)
 
 TEST_F (SpellProcDisableEffectsTest, HigherBits_IgnoredForEffects)
 
 TEST_F (SpellProcDisableEffectsTest, SpellProcEntry_WithDisableEffectsMask)
 
 TEST_F (SpellProcDisableEffectsTest, SpellProcEntry_AllDisabled)
 
 TEST_F (SpellProcDisableEffectsTest, Scenario_SingleEffectAura)
 
 TEST_F (SpellProcDisableEffectsTest, Scenario_DualEffectAura)
 

Detailed Description

Unit tests for DisableEffectsMask filtering in proc system.

Tests the logic from SpellAuras.cpp:2244-2258:

  • Bitmask filtering for effect indices 0, 1, 2
  • Combined filtering with multiple disabled effects
  • Proc blocking when all effects are disabled

Definition in file SpellProcDisableEffectsTest.cpp.

Function Documentation

◆ TEST_F() [1/16]

TEST_F ( SpellProcDisableEffectsTest  ,
DisableAllEffects_BlocksProc   
)
116{
117 uint32 disableMask = 0x07; // Disable all 3 effects
118
119 uint8 result = ProcChanceTestHelper::ApplyDisableEffectsMask(ALL_EFFECTS_MASK, disableMask);
120
121 EXPECT_EQ(result, 0x00)
122 << "DisableEffectsMask=0x07 should disable all effects";
123
124 EXPECT_TRUE(ProcChanceTestHelper::ShouldBlockDueToDisabledEffects(ALL_EFFECTS_MASK, disableMask))
125 << "Proc should be blocked when all effects are disabled";
126}
std::uint8_t uint8
Definition Define.h:109
std::uint32_t uint32
Definition Define.h:107
static bool ShouldBlockDueToDisabledEffects(uint8 initialMask, uint32 disableEffectsMask)
Check if proc should be blocked due to all effects being disabled.
Definition ProcChanceTestHelper.h:357
static uint8 ApplyDisableEffectsMask(uint8 initialMask, uint32 disableEffectsMask)
Apply DisableEffectsMask to get final proc effect mask.
Definition ProcChanceTestHelper.h:339

References ProcChanceTestHelper::ApplyDisableEffectsMask(), and ProcChanceTestHelper::ShouldBlockDueToDisabledEffects().

◆ TEST_F() [2/16]

TEST_F ( SpellProcDisableEffectsTest  ,
DisableEffect0_BlocksOnlyEffect0   
)
48{
49 uint32 disableMask = 0x01; // Disable effect 0
50
51 uint8 result = ProcChanceTestHelper::ApplyDisableEffectsMask(ALL_EFFECTS_MASK, disableMask);
52
53 EXPECT_EQ(result, 0x06) // 0b110 - effects 1 and 2 remain
54 << "DisableEffectsMask=0x01 should only disable effect 0";
55}

References ProcChanceTestHelper::ApplyDisableEffectsMask().

◆ TEST_F() [3/16]

TEST_F ( SpellProcDisableEffectsTest  ,
DisableEffect1_BlocksOnlyEffect1   
)
58{
59 uint32 disableMask = 0x02; // Disable effect 1
60
61 uint8 result = ProcChanceTestHelper::ApplyDisableEffectsMask(ALL_EFFECTS_MASK, disableMask);
62
63 EXPECT_EQ(result, 0x05) // 0b101 - effects 0 and 2 remain
64 << "DisableEffectsMask=0x02 should only disable effect 1";
65}

References ProcChanceTestHelper::ApplyDisableEffectsMask().

◆ TEST_F() [4/16]

TEST_F ( SpellProcDisableEffectsTest  ,
DisableEffect2_BlocksOnlyEffect2   
)
68{
69 uint32 disableMask = 0x04; // Disable effect 2
70
71 uint8 result = ProcChanceTestHelper::ApplyDisableEffectsMask(ALL_EFFECTS_MASK, disableMask);
72
73 EXPECT_EQ(result, 0x03) // 0b011 - effects 0 and 1 remain
74 << "DisableEffectsMask=0x04 should only disable effect 2";
75}

References ProcChanceTestHelper::ApplyDisableEffectsMask().

◆ TEST_F() [5/16]

TEST_F ( SpellProcDisableEffectsTest  ,
DisableEffects0And1_LeavesEffect2   
)
82{
83 uint32 disableMask = 0x03; // Disable effects 0 and 1
84
85 uint8 result = ProcChanceTestHelper::ApplyDisableEffectsMask(ALL_EFFECTS_MASK, disableMask);
86
87 EXPECT_EQ(result, 0x04) // 0b100 - only effect 2 remains
88 << "DisableEffectsMask=0x03 should leave only effect 2";
89}

References ProcChanceTestHelper::ApplyDisableEffectsMask().

◆ TEST_F() [6/16]

TEST_F ( SpellProcDisableEffectsTest  ,
DisableEffects0And2_LeavesEffect1   
)
92{
93 uint32 disableMask = 0x05; // Disable effects 0 and 2
94
95 uint8 result = ProcChanceTestHelper::ApplyDisableEffectsMask(ALL_EFFECTS_MASK, disableMask);
96
97 EXPECT_EQ(result, 0x02) // 0b010 - only effect 1 remains
98 << "DisableEffectsMask=0x05 should leave only effect 1";
99}

References ProcChanceTestHelper::ApplyDisableEffectsMask().

◆ TEST_F() [7/16]

TEST_F ( SpellProcDisableEffectsTest  ,
DisableEffects1And2_LeavesEffect0   
)
102{
103 uint32 disableMask = 0x06; // Disable effects 1 and 2
104
105 uint8 result = ProcChanceTestHelper::ApplyDisableEffectsMask(ALL_EFFECTS_MASK, disableMask);
106
107 EXPECT_EQ(result, 0x01) // 0b001 - only effect 0 remains
108 << "DisableEffectsMask=0x06 should leave only effect 0";
109}

References ProcChanceTestHelper::ApplyDisableEffectsMask().

◆ TEST_F() [8/16]

TEST_F ( SpellProcDisableEffectsTest  ,
HigherBits_IgnoredForEffects   
)
195{
196 // Bits beyond 0x07 should be ignored (only 3 effects exist)
197 uint32 disableMask = 0xFF; // All bits set
198
199 uint8 result = ProcChanceTestHelper::ApplyDisableEffectsMask(ALL_EFFECTS_MASK, disableMask);
200
201 EXPECT_EQ(result, 0x00)
202 << "Only lower 3 bits should affect the result";
203
204 // Only lower bits matter
205 uint32 highBitsOnly = 0xF8; // High bits only
206 result = ProcChanceTestHelper::ApplyDisableEffectsMask(ALL_EFFECTS_MASK, highBitsOnly);
207
208 EXPECT_EQ(result, ALL_EFFECTS_MASK)
209 << "High bits (0xF8) should not affect lower 3 effects";
210}

References ProcChanceTestHelper::ApplyDisableEffectsMask().

◆ TEST_F() [9/16]

TEST_F ( SpellProcDisableEffectsTest  ,
NotAllDisabled_ProcAllowed   
)
129{
130 // Only effect 0 disabled
131 EXPECT_FALSE(ProcChanceTestHelper::ShouldBlockDueToDisabledEffects(ALL_EFFECTS_MASK, 0x01))
132 << "Proc should be allowed when some effects remain";
133
134 // Only effects 0 and 1 disabled
135 EXPECT_FALSE(ProcChanceTestHelper::ShouldBlockDueToDisabledEffects(ALL_EFFECTS_MASK, 0x03))
136 << "Proc should be allowed when effect 2 remains";
137
138 // No effects disabled
139 EXPECT_FALSE(ProcChanceTestHelper::ShouldBlockDueToDisabledEffects(ALL_EFFECTS_MASK, 0x00))
140 << "Proc should be allowed when no effects are disabled";
141}

References ProcChanceTestHelper::ShouldBlockDueToDisabledEffects().

◆ TEST_F() [10/16]

TEST_F ( SpellProcDisableEffectsTest  ,
PartialInitialMask_Effect0Only   
)
148{
149 uint8 initialMask = 0x01; // Only effect 0 enabled
150
151 // Disabling effect 0 should result in 0
152 EXPECT_EQ(ProcChanceTestHelper::ApplyDisableEffectsMask(initialMask, 0x01), 0x00);
153 EXPECT_TRUE(ProcChanceTestHelper::ShouldBlockDueToDisabledEffects(initialMask, 0x01));
154
155 // Disabling effect 1 should have no impact
156 EXPECT_EQ(ProcChanceTestHelper::ApplyDisableEffectsMask(initialMask, 0x02), 0x01);
157 EXPECT_FALSE(ProcChanceTestHelper::ShouldBlockDueToDisabledEffects(initialMask, 0x02));
158}

References ProcChanceTestHelper::ApplyDisableEffectsMask(), and ProcChanceTestHelper::ShouldBlockDueToDisabledEffects().

◆ TEST_F() [11/16]

TEST_F ( SpellProcDisableEffectsTest  ,
PartialInitialMask_Effects0And1   
)
161{
162 uint8 initialMask = 0x03; // Effects 0 and 1 enabled
163
164 // Disabling both should result in 0
165 EXPECT_EQ(ProcChanceTestHelper::ApplyDisableEffectsMask(initialMask, 0x03), 0x00);
166 EXPECT_TRUE(ProcChanceTestHelper::ShouldBlockDueToDisabledEffects(initialMask, 0x03));
167
168 // Disabling only effect 0 should leave effect 1
169 EXPECT_EQ(ProcChanceTestHelper::ApplyDisableEffectsMask(initialMask, 0x01), 0x02);
170 EXPECT_FALSE(ProcChanceTestHelper::ShouldBlockDueToDisabledEffects(initialMask, 0x01));
171}

References ProcChanceTestHelper::ApplyDisableEffectsMask(), and ProcChanceTestHelper::ShouldBlockDueToDisabledEffects().

◆ TEST_F() [12/16]

TEST_F ( SpellProcDisableEffectsTest  ,
Scenario_DualEffectAura   
)
265{
266 // Aura with effects 0 and 1 (healing + damage proc for example)
267 uint8 dualEffectMask = 0x03;
268
269 // Disabling one effect leaves the other
270 EXPECT_FALSE(ProcChanceTestHelper::ShouldBlockDueToDisabledEffects(dualEffectMask, 0x01));
271 EXPECT_FALSE(ProcChanceTestHelper::ShouldBlockDueToDisabledEffects(dualEffectMask, 0x02));
272
273 // Disabling both blocks the proc
274 EXPECT_TRUE(ProcChanceTestHelper::ShouldBlockDueToDisabledEffects(dualEffectMask, 0x03));
275}

References ProcChanceTestHelper::ShouldBlockDueToDisabledEffects().

◆ TEST_F() [13/16]

TEST_F ( SpellProcDisableEffectsTest  ,
Scenario_SingleEffectAura   
)
251{
252 // Many procs only have a single effect that matters
253 uint8 singleEffectMask = 0x01; // Only effect 0
254
255 // Disabling effect 0 blocks the proc
256 EXPECT_TRUE(ProcChanceTestHelper::ShouldBlockDueToDisabledEffects(singleEffectMask, 0x01));
257
258 // Disabling other effects has no impact
259 EXPECT_FALSE(ProcChanceTestHelper::ShouldBlockDueToDisabledEffects(singleEffectMask, 0x02));
260 EXPECT_FALSE(ProcChanceTestHelper::ShouldBlockDueToDisabledEffects(singleEffectMask, 0x04));
261 EXPECT_FALSE(ProcChanceTestHelper::ShouldBlockDueToDisabledEffects(singleEffectMask, 0x06));
262}

References ProcChanceTestHelper::ShouldBlockDueToDisabledEffects().

◆ TEST_F() [14/16]

TEST_F ( SpellProcDisableEffectsTest  ,
SpellProcEntry_AllDisabled   
)
235{
236 auto procEntry = SpellProcEntryBuilder()
238 .WithDisableEffectsMask(0x07) // Disable all effects
239 .WithChance(100.0f)
240 .Build();
241
242 EXPECT_TRUE(ProcChanceTestHelper::ShouldBlockDueToDisabledEffects(ALL_EFFECTS_MASK, procEntry.DisableEffectsMask))
243 << "Proc should be blocked when all effects disabled in SpellProcEntry";
244}
@ PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG
Definition SpellMgr.h:134
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 & WithProcFlags(uint32 procFlags)
Definition ProcEventInfoHelper.h:166
SpellProcEntryBuilder & WithDisableEffectsMask(uint32 disableEffectsMask)
Definition ProcEventInfoHelper.h:196

References SpellProcEntryBuilder::Build(), PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG, ProcChanceTestHelper::ShouldBlockDueToDisabledEffects(), SpellProcEntryBuilder::WithChance(), SpellProcEntryBuilder::WithDisableEffectsMask(), and SpellProcEntryBuilder::WithProcFlags().

◆ TEST_F() [15/16]

TEST_F ( SpellProcDisableEffectsTest  ,
SpellProcEntry_WithDisableEffectsMask   
)
217{
218 auto procEntry = SpellProcEntryBuilder()
220 .WithDisableEffectsMask(0x05) // Disable effects 0 and 2
221 .WithChance(100.0f)
222 .Build();
223
224 // Verify the mask was set correctly
225 EXPECT_EQ(procEntry.DisableEffectsMask, 0x05u);
226
227 // Apply to initial mask
228 uint8 result = ProcChanceTestHelper::ApplyDisableEffectsMask(ALL_EFFECTS_MASK, procEntry.DisableEffectsMask);
229
230 EXPECT_EQ(result, 0x02) // Only effect 1 remains
231 << "SpellProcEntry DisableEffectsMask should filter correctly";
232}

References ProcChanceTestHelper::ApplyDisableEffectsMask(), SpellProcEntryBuilder::Build(), PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG, SpellProcEntryBuilder::WithChance(), SpellProcEntryBuilder::WithDisableEffectsMask(), and SpellProcEntryBuilder::WithProcFlags().

◆ TEST_F() [16/16]

TEST_F ( SpellProcDisableEffectsTest  ,
ZeroDisableMask_NoEffectDisabled   
)
178{
179 uint32 disableMask = 0x00; // Nothing disabled
180
181 uint8 result = ProcChanceTestHelper::ApplyDisableEffectsMask(ALL_EFFECTS_MASK, disableMask);
182
183 EXPECT_EQ(result, ALL_EFFECTS_MASK)
184 << "Zero DisableEffectsMask should leave all effects enabled";
185
186 EXPECT_FALSE(ProcChanceTestHelper::ShouldBlockDueToDisabledEffects(ALL_EFFECTS_MASK, disableMask))
187 << "Proc should be allowed when nothing is disabled";
188}

References ProcChanceTestHelper::ApplyDisableEffectsMask(), and ProcChanceTestHelper::ShouldBlockDueToDisabledEffects().