7.5 KiB
7.5 KiB
E2E Test Infrastructure: Diablo II 1.13c Item Drop Engine Parity (Issues #412–#428)
1. Test Architecture & Hierarchy
The Diablo II Web Port Item Drop Engine test suite is built on a 4-tier opaque-box test architecture designed to enforce strict Blizzard v1.13c ground truth parity across all 17 inventoried features (Issues #412–#428).
▲
/ \
/ \
/ \
/ Tier 4\ Real-World Workload Scenarios (12 tests)
/─────────\ Full gameplay loops, boss runs, inventory caps
/ Tier 3 \ Cross-Feature Interactions (16 tests)
/─────────────\ Pairwise subsystems, MF + NoDrop + Boss TCs
/ Tier 2 \ Boundary & Corner Cases (85 tests, >=5/feature)
/─────────────────\ Zero/extreme inputs, clamping, edge coords
/ Tier 1 \ Feature Coverage (85 tests, >=5/feature)
/─────────────────────\ Primary behavior across all 17 features
Tier Descriptions & Scope
| Tier | Suite File | Target Scope | Min Tests Required | Actual Tests |
|---|---|---|---|---|
| Tier 1 | tests/e2e-drop-parity/tier1-feature-coverage.test.ts |
Complete feature coverage for all 17 features (#412–#428) | >= 85 (>=5/feat) | 85 |
| Tier 2 | tests/e2e-drop-parity/tier2-boundary-corner.test.ts |
Boundary, negative, edge and out-of-bounds cases | >= 85 (>=5/feat) | 85 |
| Tier 3 | tests/e2e-drop-parity/tier3-cross-feature-combinations.test.ts |
Multi-subsystem pairwise interaction matrices | >= 15 | 16 |
| Tier 4 | tests/e2e-drop-parity/tier4-real-world-scenarios.test.ts |
End-to-end multi-tick combat, drop dispersion, and farm runs | >= 10 | 12 |
| Total | Comprehensive Drop Parity Test Suite | >= 195 | 198 |
2. Authoritative Ground Truth Oracles
Every test in this suite derives its expected values directly from authoritative Blizzard v1.13c artifacts:
-
MPQ Data Tables (
/usr/local/google/home/taodao/d2-data):Patch_D2.mpq:data\global\excel\difficultylevels.txt: Exact base upgrade divisors (UberCodeOddsNormal,UberCodeOddsNightmare,UberCodeOddsHell).Patch_D2.mpq:data\global\excel\monstats.txt: 734 monster kinds,boss = 1flag, and multi-difficultyTreasureClass1..4.Patch_D2.mpq:data\global\excel\superuniques.txt: 66 unique bosses and difficulty-specific TCs.Patch_D2.mpq:data\global\excel\TreasureClassEx.txt: Complete TC hierarchy,picks, negative picks (picks < 0), Countess item/rune tables, quest first-kill boss TCs.Patch_D2.mpq:data\global\excel\ItemRatio.txt: Quality ratios, divisors, and base chances for Magic, Rare, Set, Unique.Patch_D2.mpq:data\global\excel\weapons.txt,armor.txt,misc.txt: Base itemdropsoundanddropsfxframedefinitions.Patch_D2.mpq:data\global\excel\Levels.txt: 138 level zones, area levels, and monster density configurations.
-
D2MOO Decompiled C++ Assembly (
D2Game.dll,D2Common.dll):D2Game/src/ITEMS/Items.cpp:2142-2166: Exact/players NNoDrop exponential dampening formula:\text{eff} = p + \left\lfloor\frac{g - p}{2}\right\rfloor, \quad \text{ratio} = \left(\frac{\text{NoDrop}}{\text{NoDrop} + \text{TotalProb}}\right)^\text{eff}, \quad \text{NewNoDrop} = \left\lfloor \frac{\text{TotalProb} \times \text{ratio}}{1 - \text{ratio}} \right\rfloorD2Game/src/ITEMS/Items.cpp:2346-2433: Magic Find diminishing returns equations:\text{Unique} = \left\lfloor\frac{250 \times \text{MF}}{\text{MF} + 250}\right\rfloor, \quad \text{Set} = \left\lfloor\frac{500 \times \text{MF}}{\text{MF} + 500}\right\rfloor, \quad \text{Rare} = \left\lfloor\frac{600 \times \text{MF}}{\text{MF} + 600}\right\rfloor, \quad \text{Magic} = \text{MF}D2Common/src/Units/Units.cpp:3103: Inventory gold limit:\text{GoldLimit} = 10,000 \times \text{Level}D2Game/src/MONSTER/MonsterUnique.cpp:269, 294: Elite monster level modifiers:\text{Champion} = \text{Level} + 2, \quad \text{Unique} / \text{Minion} = \text{Level} + 3D2Game/src/ITEMS/ItemMode.cpp:6084: Countess 6-item drop ceiling and quadrant spiral discrete collision scan.
3. Test Runner & Execution Commands
The test runner is Vitest v2.1.9 running on Node.js v22.
Running Individual Tiers
# Tier 1: Feature Coverage (85 tests)
npx vitest run tests/e2e-drop-parity/tier1-feature-coverage.test.ts
# Tier 2: Boundary & Corner Cases (85 tests)
npx vitest run tests/e2e-drop-parity/tier2-boundary-corner.test.ts
# Tier 3: Cross-Feature Interactions (16 tests)
npx vitest run tests/e2e-drop-parity/tier3-cross-feature-combinations.test.ts
# Tier 4: Real-World Workload Scenarios (12 tests)
npx vitest run tests/e2e-drop-parity/tier4-real-world-scenarios.test.ts
Running Entire E2E Drop Parity Suite
npx vitest run tests/e2e-drop-parity/
Full Workspace Verification
# Typecheck
npm run typecheck
# Comprehensive verification
npx vitest run tests/e2e-drop-parity/ tests/monster-treasure-class.test.ts tests/ground-items-scatter-bounce.test.ts
4. Feature Coverage Matrix (Issues #412–#428)
| # | Feature | Issue | Tier 1 (Coverage) | Tier 2 (Boundary) | Tier 3 (Pairwise) | Tier 4 (Workload) |
|---|---|---|---|---|---|---|
| 1 | DifficultyLevels.txt & Upgrade Divisors | #412 | 5 tests | 5 tests | P2, P9, P13 | S11 |
| 2 | Remove Silent Fallbacks | #413 | 5 tests | 5 tests | P3, P8, P16 | S1 |
| 3 | Delete rollDrop Dead Code | #414 | 5 tests | 5 tests | P16 | S12 |
| 4 | Act Boss MonsterRank & monsterType = 4 | #415 | 5 tests | 5 tests | P1, P8 | S2, S4, S5, S11 |
| 5 | Elite mlvl Calculation (+2, +3, Demote) | #416 | 5 tests | 5 tests | P2, P9, P13 | S1 |
| 6 | Magic Find Wiring & Diminishing Returns | #417 | 5 tests | 5 tests | P1, P8 | S4 |
| 7 | /players N NoDrop Scaling | #418 | 5 tests | 5 tests | P1, P12 | S3 |
| 8 | Physical Gold Piles (3 Tiers, Cap) | #419 | 5 tests | 5 tests | P3, P11, P14 | S7 |
| 9 | Death Animation Drop Gating (DT->DD) | #420 | 5 tests | 5 tests | P4, P11 | S1, S5 |
| 10 | Drop SFX (dropsound, dropsfxframe) | #421 | 5 tests | 5 tests | P4, P10 | S2 |
| 11 | Quadrant Spiral Drop Coords | #422 | 5 tests | 5 tests | P4, P10, P11 | S4, S10 |
| 12 | DC6 Flippy Coverage & No Color Box | #423 | 5 tests | 5 tests | P5 | S12 |
| 13 | Ground Label Gray Override (Eth/Sock) | #424 | 5 tests | 5 tests | P5 | S2 |
| 14 | Pickup Radius & 2-Pass Auto-Belt | #425 | 5 tests | 5 tests | P6, P15 | S1, S8 |
| 15 | Multiplayer Lockstep Drop Sync | #427 | 5 tests | 5 tests | P7, P14 | S9 |
| 16 | Quest Drops (Countess, Boss, Hellforge) | #426 | 5 tests | 5 tests | P7, P8, P10, P12 | S2, S3, S6 |
| 17 | Full-Spectrum Drop Verification | #428 | 5 tests | 5 tests | P9, P15, P16 | S10, S12 |
5. Coverage Thresholds & Quality Gates
- Pass Rate Gate: 100% pass rate across all 198 tests. Zero tests skipped, zero flaky tests.
- Determinism Gate: All drop rolling simulations MUST be seeded with deterministic
D2Rngseeds to ensure repeatable runs. - Anti-Silent Failure Invariant: Missing data tables, invalid monster kinds, or unmapped TCs must raise explicit errors; fallbacks to synthetic constants or default TCs are strictly prohibited.
- Performance Gate: The entire 4-tier suite (198 tests) must execute in under 15 seconds.