7.1 KiB
7.1 KiB
E2E Test Infrastructure — Diablo II: Lord of Destruction v1.13c Player Skill System (diablo2-web)
1. Purpose & Opaque-Box Ground Truth Philosophy
This document defines the requirement-driven, 4-tier End-to-End (E2E) test infrastructure for the Diablo II: Lord of Destruction v1.13c player skill system in diablo2-web.
Every expected value in tests/e2e-skills-113c/*.test.ts is derived from the authoritative 1.13c ground truth stack in /usr/local/google/home/taodao/d2-data:
- MPQ Archive Overlay Stack (
src/mpq/mount.ts):d2data.mpq(267,642,202bytes) — Base classic tables & sprites.d2char.mpq(269,965,091bytes) — Base 5-class (AM,SO,NE,PA,BA) composite character COF/DCC animations.d2exp.mpq(250,156,780bytes) — Lord of Destruction expansion assets (DZDruid,AIAssassin,NEexpansion COFs),data\global\excel\HitClass.txt, anddata\global\AnimData.d2(570,304bytes,256hash buckets,3,558160-byte records).Patch_D2.mpq(3,912,204bytes) — Highest-priority v1.13c patch override tables (Skills.txt,SkillDesc.txt,Missiles.txt,States.txt,ItemStatCost.txt,CharStats.txt,MonStats.txt,MonStats2.txt,Overlay.txt,PetType.txt,ElemTypes.txt,Events.txt,SkillCalc.txt,MissCalc.txt).
- 1.13c Binary Ground Truth Rules (
D2Common.dll,D2Game.dll,patch.txt):- Whenever 1.10 (D2MOO) differs from 1.13c, the 1.13c MPQ data and 1.13c binary behavior take absolute precedence (e.g., Blessed Hammer
ID 112does not ignore Magic Resistance of Undead/Demons; Corpse ExplosionID 74scales at70%–120%base monster HP; VenomID 278clamps poison duration to10frames;blvlsynergy evaluation strictly uses base allocatedSTAT_SKILLPTSonly, preventing the 1.10 Marrowwalk charge bug; ConvictionID 123and Lower ResistID 91operate at1/5efficiency when target resistance\ge 100\%).
- Whenever 1.10 (D2MOO) differs from 1.13c, the 1.13c MPQ data and 1.13c binary behavior take absolute precedence (e.g., Blessed Hammer
2. Test Suite Execution & Directory Layout
Runner Command
npx vitest run tests/e2e-skills-113c/
Suite Files (tests/e2e-skills-113c/)
| File | Tier | Minimum Required | Implemented Tests | Scope |
|---|---|---|---|---|
tests/e2e-skills-113c/tier1-feature-coverage.test.ts |
Tier 1: Feature Coverage | >= 55 (>= 5 / feature) |
60 | Happy-path & 1.13c parity verification across all 11 features in PROJECT.md § Feature Inventory and all 221 player skills (11 universal + 210 class skills across 7 classes + 17 pet/trap sub-skills). |
tests/e2e-skills-113c/tier2-boundary-corner.test.ts |
Tier 2: Boundary & Corner Cases | >= 55 (>= 5 / feature) |
56 | Boundary slvl (0, 1, 8, 9, 16, 17, 20, 22, 23, 28, 29, 60, 99), division-by-zero, unclosed ( in Fire Wall, undefined par34 in Bone Wall, *12/*16 in royalstrikechainlightning, two-dot sklvl(), Marrowwalk charge synergy rejection, STATE_ATTRACT overwrite immunity, 99% vs 100% vs 130% immunity breaking, Blessed Hammer vs 100% Magic Immune Undead/Demon, Venom 10f clamp, trap 5 -> 6 FIFO eviction, golem/wolf group replacement. |
tests/e2e-skills-113c/tier3-cross-feature-combinations.test.ts |
Tier 3: Cross-Feature Combinations | >= 15 |
16 | Multi-subsystem pairwise interactions: Aura + Mastery + Synergy + Conviction immunity break + -Enemy Res; Assassin 3-charge Tiger/Cobra/Phoenix Strike + Dragon Talon/Dragon Tail finishers; Necromancer Corpse Explosion + Amplify Damage + Lower Resist; Druid Werebear + Maul + Shock Wave + Oak Sage; Sorceress Energy Shield + Telekinesis synergy + Frozen Armor reactive auraeventfunc. |
tests/e2e-skills-113c/tier4-real-world-scenarios.test.ts |
Tier 4: Real-World Scenarios | >= 10 |
12 | End-to-end multi-tick combat & arena simulations for all 7 classes (Amazon, Sorceress, Necromancer, Paladin, Barbarian, Druid, Assassin), Universal skills, Summon/Trap pet AI loops, window.__d2webArena URL harness contract, Gitea Milestone/221-Issue mapping (src/data/gitea-skill-issues.json), and repository/worktree cleanliness invariants. |
| Total | Tiers 1–4 | >= 135 |
144 | Complete opaque-box 1.13c E2E verification. |
3. Feature-to-Test Coverage Matrix (PROJECT.md § Feature Inventory)
| Feature # | Feature Name | Milestone | Tier 1 Tests (tier1-feature-coverage.test.ts) |
Tier 2 Tests (tier2-boundary-corner.test.ts) |
Tier 3 & Tier 4 Coverage |
|---|---|---|---|---|---|
| F1 | Worktree & main Reconciliation + Ground Truth Stack |
M1 | 5 (F1.1–F1.5) |
5 (F1.B1–F1.B5) |
Tier 4 S11 (Worktree & Repo State) |
| F2 | 1.13c MPQ Data Registry (D2DataRegistry) |
M1 | 6 (F2.1–F2.6) |
5 (F2.B1–F2.B5) |
Tier 3 C1–C16, Tier 4 S1–S10 |
| F3 | D2Common calc AST Formula Evaluator |
M1 | 6 (F3.1–F3.6) |
6 (F3.B1–F3.B6) |
Tier 3 C1–C16 |
| F4 | UnitStatList & StateBus (HitShift=8, Curses, Auras) |
M1 | 5 (F4.1–F4.5) |
5 (F4.B1–F4.B5) |
Tier 3 C3, C4, C7, C9, C13 |
| F5 | 1.13c RollToHit & SUnitDmg Combat Pipeline |
M1 | 6 (F5.1–F5.6) |
5 (F5.B1–F5.B5) |
Tier 3 C1, C2, C5, C6, C8, C10 |
| F6 | AnimData.d2 Dispatcher, MissileEngine, AuraScanner, SummonManager |
M1 | 6 (F6.1–F6.6) |
5 (F6.B1–F6.B5) |
Tier 3 C11, C12, C14, C15 |
| F7 | 7-Class DCC/COF/Missile/Overlay Renderer & Deterministic Arena (?arena=1) |
M1 | 5 (F7.1–F7.5) |
5 (F7.B1–F7.B5) |
Tier 4 S1–S7, S9 |
| F8 | Gitea Milestone & 221 Per-Skill Tracking Issues | M2 | 5 (F8.1–F8.5) |
5 (F8.B1–F8.B5) |
Tier 4 S10 |
| F9 | R3 Cohort A: Universal (11), Amazon (30), Sorceress (30), Necromancer (30) Skills (101 skills) |
M3 | 6 (F9.1–F9.6) |
5 (F9.B1–F9.B5) |
Tier 3 C1–C5, Tier 4 S1–S3, S8 |
| F10 | R3 Cohort B: Paladin (30), Barbarian (30), Druid (30), Assassin (30) Skills (120 skills) |
M4 | 5 (F10.1–F10.5) |
5 (F10.B1–F10.B5) |
Tier 3 C6–C16, Tier 4 S4–S7 |
| F11 | Final E2E Test Pass, SkillModule Registry & Cleanliness Audit |
M5 | 5 (F11.1–F11.5) |
5 (F11.B1–F11.B5) |
Tier 4 S10–S12 |
4. Contract Binding & Progressive Verification Architecture
Each E2E test file binds to:
- Live 1.13c MPQ Ground Truth (
/usr/local/google/home/taodao/d2-data):- Directly mounts
d2data.mpq,d2char.mpq,d2exp.mpq, andPatch_D2.mpqviaMountedArchives(src/mpq/mount.ts) and parses the authoritative 1.13c tables (Skills.txt,SkillDesc.txt,Missiles.txt,States.txt,ItemStatCost.txt,CharStats.txt,MonStats.txt,Overlay.txt,PetType.txt,ElemTypes.txt,HitClass.txt,Events.txt,SkillCalc.txt,MissCalc.txt, andAnimData.d2).
- Directly mounts
- Engine & Skill Module Contracts (
PROJECT.md § Interface Contracts):- Dynamically loads
src/game/engine/*(data-registry.ts,calc-ast.ts,stat-list.ts,state-bus.ts,combat-pipeline.ts,anim-dispatcher.ts,missile-engine.ts,aura-scanner.ts,summon-manager.ts,world-arena.ts),src/game/skills/registry.ts, andsrc/data/gitea-skill-issues.jsonwhen available, cross-checking their outputs against the 1.13c MPQ ground-truth oracle.
- Dynamically loads