Skip to content

Latest commit

 

History

History
103 lines (77 loc) · 8.69 KB

File metadata and controls

103 lines (77 loc) · 8.69 KB

CombatMode Manual Testing

Use this checklist for feature work and regressions.

Setup

  • Use Retail client with addon enabled and fresh /reload.
  • Confirm CombatModeDB loads and settings panel opens (/cm).
  • Changelog viewer: open sidebar → Changelog; confirm markdown renders (headings, bullets, links). After a version bump, confirm auto-popup once per version (lastSeenChangelogVersion in saved vars). If CHANGELOG.md was edited, confirm scripts/sync-changelog-to-lua.ps1 was run so in-game text matches.
  • If testing bindings, verify keybinds are set as expected.
  • For API-sensitive changes, verify WoW API/event signatures via MCP tools first (or manual fallback in RELEASE.md).

Core and mouselook

  • Toggle CombatMode on/off and verify mouselook enters/exits correctly.
  • Verify no stuck mouselook after opening/closing common UI panels.
  • Test transitions in and out of combat; no protected-action errors.
  • Sheath Weapons with Mouse Look: rapid Mouse Look toggles (e.g. single-pull) should not flash sheath/unsheath; unsheath on lock remains immediate; temporary unlocks (hold, ground spells, OPie) keep weapons drawn.
  • Force Lock (Advanced): snippet return true re-locks after a tap unlock. Force Unlock custom condition return true does not unlock while Force Lock is true. Opening a bag or ground-targeting a spell still unlocks. Clearing the snippet restores the previous unlock (a prior tap-unlock stays unlocked).
  • Lock Once (Advanced, under Force Lock): with the snippet staying return true, the first check locks; a manual Mouse Look unlock stays unlocked until the snippet is cleared or edited to return false and then true again. With Lock Once off, the same snippet re-locks on the next check after a manual unlock.
  • Unlock Once (Advanced, under Force Unlock): with the snippet staying return true, the first check unlocks; pressing Mouse Look to lock stays locked until the snippet is cleared or edited to return false and then true again. With Unlock Once off, the same snippet unlocks again on the next check.

Reticle and targeting CVars

  • Enable/disable reticle-related settings and confirm visual/state updates.
  • Confirm targeted CVars change only when feature requires it.
  • Disable feature and ensure CVars/state restore path behaves correctly.
  • Open Reticle Targeting CVar editor from Reticle options: filter/sort, double-click edit, reset overrides; reload and confirm reticleTargetingCVarOverrides persistence; verify excluded CVars do not appear and external SetCVar updates refresh the list where hooked.

Click casting

  • Validate base click-cast actions on valid units.
  • Start Attack / Pet Attack (click-cast overrides, not Blizzard's raw binds): left-click aims at a new enemy and starts you or your pet swinging; existing Start Attack / Pet Attack slot values pick this up.
  • Action Button 1 (or any bar slot) with Auto Attack / Auto Shot / Shoot / Pet Attack still gets reticle /tar and can swap hostiles. A new unit keeps the swing on (/startattack / /cast ! / /petattack, not /click which would toggle it off).
  • Validate modifier variants (Shift/Ctrl/Alt) map to expected spells/macros.
  • Verify behavior remains stable in combat (no insecure action taint/errors).
  • Binding refresh must not loop when Single-Button Assistant rewrites its action slot.
  • Rebinding Mouse Look / Ally Cycle / Target Lock clears leftover Interact Alt+key chords without a reload.
  • Paged / bonus / secondary bar macros (Reticle Targeting on): put a custom macro on main-bar page 1 — keybind still fires (native path). Page the main bar, or enter stealth/form so a bonus bar shows the same 1–12 keys with a macro — keybind fires and mouse click still fires. A spell on that paged/bonus bar still gets reticle /tar + /click. Exit a vehicle: keys must not stick on override slots 121+. Forever and Mainline: same cases.

Interact key

  • Bind Interact to an Alt+mouse chord; bind another action that also uses Alt on a related key. Confirm Interact does not become Alt+Alt+key.
  • Switching Interact Unit (Crosshair vs Soft Targeted) keeps ALT+key on the other command as intended.

Target Lock (4.1.3)

  • Set Target Lock (focus) via keybind; confirm lock sound (if Target Lock Sound Cues on).
  • Clear lock; confirm unlock sound.
  • Mouse wheel cycle (on by default): with Mouse Look on and a lock set, wheel cycles nearby enemies and moves the lock; without a lock (or Mouse Look off), wheel zooms the camera.
  • Cycle to another enemy; confirm cycle sound cue.
  • Nameplate marker: while locked, center reticle becomes a static Dot; hit marker (Active texture for your Appearance) appears on the locked unit’s nameplate health bar; unlock restores the reactive reticle and clears the marker instantly.
  • In a dungeon/instance, lock / cycle / unlock with no Lua errors (focus identity may be secret under taint).

Crosshair cast feedback & Combat Assist

  • Cast feedback grow / explode / break (and Assist swipe / cancel break) work in open world.
  • Situational Appearance → Invisible (Advanced): while the situational condition is true, the center crosshair hides; it returns when the condition is false. Target Lock still shows its center Dot.
  • Repeat the same in a dungeon/instance with no Lua errors from cast GUID compares.
  • Rapid Single-Button Assistant presses do not spam Assist cast-success press/pulse animations.
  • Assist cast-success does not double-fire from assisted-action + UNIT_SPELLCAST_SUCCEEDED.

Cursor unlock and cursor pulse

  • Trigger configured unlock conditions (UI panels/custom Lua if applicable).
  • Confirm mouselook unlocks when expected and relocks when expected.
  • Confirm pulse appears after unlock and does not persist unexpectedly.

Ally Cycle

  • Options → Ally Cycle tab: bind Up/Down, toggle Skip Self / Keep Ally After Harm / Ally HUD / side / scale / Distance; no Lua errors on open. Forever Beta: tab is watermarked and cycling is inert.
  • Ally Cycle in party/raid: Up/Down cycles members in combat; HUD shows only with a party/raid hard target (self only when Skip Self is off); Interact on a friendly NPC must not flash the HUD; unbound keys = inert.
  • Helpful click-cast (Reticle Targeting; no Ally Cycle binds required — Forever / unbound too): Enemies Only on — keeps a friendly hard target (hostile under the reticle does not steal); Enemies Only off — /tars helpable mouseover / @softinteract / @anyfriend, not a hostile. Ally Cycle keys bound (including solo): harmful still /tars @anyenemy; Keep Ally After Harm restores in group.
  • Ally HUD: class-colored name ("You" on self), UI-Frame role icon, raid marker, cycle index n/total; Previous travels an up arrow, Next a down arrow. Dead chrome is grey/desaturated; low HP pulses a red bar glow (no role-icon glow).
  • Keep Ally After Harm: with a cycled ally selected, a harmful click-cast retargets the enemy then restores the ally; skipped while Auto Target Lock is on.

Profiling (Function Profiler)

Built-in Core/Dev/FunctionProfiler.lua provides per-function CPU + memory profiling via C_AddOnProfiler.MeasureCall.

  • Open the options panel (/cm), toggle Debug Mode ON → profiling starts automatically, data resets.
  • Play your scenario.
  • Toggle Debug Mode OFF → full sorted profile report + CPU stats prints to chat.
  • The profiler wraps hot-path functions with CM.Profile(key, func, ...). When profiling is off the wrapper is a transparent pass-through with no overhead, so wrappers stay in production code.
  • CM.StartProfiling() and CM.StopAndReportProfiling() public APIs are available for automated testing.

Config and persistence

  • Change options in each category and verify immediate apply/refresh behavior.
  • Reload UI and confirm saved values persist in correct scope.
  • Test reset/default paths and ensure no stale state remains.
  • Uninstall (sidebar): restores prior CVars, resets left/right click camera binds, disables addon, reloads.

Quick regression pass

  • Slash commands: /cm, /combatmode.
  • Keybinds still function after reload and after disabling/re-enabling addon.
  • No Lua errors in normal use paths for edited features (especially instances for focus/cast GUID paths).
  • If keybind writes were changed, verify in-combat changes defer and apply automatically after leaving combat.
  • For contributor lint/format checks, use helper by default: pwsh ./scripts/lint-changed.ps1.
  • Equivalent direct gate: pre-commit run --files <changed files>.
  • When bumping a version: update CombatMode/CombatMode.toc ## Version, CombatMode/CHANGELOG.md, then pwsh ./scripts/sync-changelog-to-lua.ps1 (agents ask first — see AGENTS.md / change checklist).
  • Reserve full-repo gate for release prep: pre-commit run --all-files.