Files
TiedUp-/src/test/java/com/tiedup/remake/rig/render/TiedUpRenderEngineTest.java
notevil 987efde86b Phase 2.6 : TiedUpRenderEngine dispatch (RenderLivingEvent hook)
Câble le dispatch renderer RIG via deux subscribers auto-registered (split
MOD bus pour AddLayers, FORGE bus pour RenderLivingEvent.Pre) — pas besoin
de wiring explicite dans TiedUpMod.

onAddLayers (MOD bus) : construit la map entityRendererProvider avec
EntityType.PLAYER → TiedUpPlayerRenderer (Phase 2) ; poste
PatchedRenderersEvent.Add pour extensions tierces.

onRenderLiving (FORGE bus, priority HIGH) : filtre strict instanceof
Player || AbstractTiedUpNpc (protège MCA villagers cf. V3-REW-10) ;
vérifie patch.overrideRender() ; dispatche vers PatchedEntityRenderer et
cancel l'event. Try/catch robuste : log WARN une seule fois par UUID sur
exception, fallback vanilla (event non-canceled).

3 tests unitaires (pure-logic, sans MC runtime) : null-safety du filtre
et idempotence du reset. Le dispatch complet sera validé Phase 2.8
runClient smoke test.

Le biped armature étant identity (Phase 2.4 stub), le hook rendra le
player effondré à l'origine dès qu'il s'active — attendu, warn déjà en
place depuis Phase 2.5.
2026-04-22 23:28:45 +02:00

62 lines
2.0 KiB
Java

/*
* © 2026 TiedUp! Remake Contributors, distributed under GPLv3.
*/
package com.tiedup.remake.rig.render;
import static org.junit.jupiter.api.Assertions.assertFalse;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/**
* Tests du dispatch engine RIG — scope limité au code pur qui ne dépend pas
* d'une instance {@code EntityType} / {@code Entity} Minecraft (tests pure-logic,
* voir {@code build.gradle}).
*
* <p>Les cas couverts ici vérouillent les protections défensives (null-safety
* du filtre d'entité, propreté du reset de registry entre appels {@code AddLayers}).
* Le dispatch complet (instancier un renderer, traiter un event {@code RenderLivingEvent.Pre})
* ne peut pas être testé sans MC runtime — ce sera validé Phase 2.7+ via
* runClient smoke test.</p>
*/
class TiedUpRenderEngineTest {
@BeforeEach
void setUp() {
TiedUpRenderEngine.resetForTest();
}
@AfterEach
void tearDown() {
TiedUpRenderEngine.resetForTest();
}
@Test
void isEligibleForDispatchRejectsNull() {
assertFalse(TiedUpRenderEngine.isEligibleForDispatch(null),
"null entity must NOT be eligible — NPE guard upstream of instanceof chain");
}
@Test
void providerMapStartsEmpty() {
// hasProviderFor doit dériver l'état courant — sans AddLayers fired, la
// map est vide donc tous les EntityType (non testables ici sans MC
// runtime) retournent false. On valide au minimum le contrat null-safe.
assertFalse(TiedUpRenderEngine.hasProviderFor(null),
"null entity type must not crash, must return false");
}
@Test
void resetForTestClearsState() {
TiedUpRenderEngine.resetForTest();
// Après reset, la map est vide — les helpers d'inspection retournent
// false. Une invocation supplémentaire de reset doit rester idempotente
// (pas de NPE sur structures pré-reset).
TiedUpRenderEngine.resetForTest();
assertFalse(TiedUpRenderEngine.hasProviderFor(null),
"state reset must be idempotent and leave the engine in a clean slate");
}
}