36 lines
1.5 KiB
C#
36 lines
1.5 KiB
C#
using AcDream.App.Tests.Architecture;
|
|
using AcDream.App.Physics;
|
|
using AcDream.Runtime.Gameplay;
|
|
|
|
namespace AcDream.App.Tests.Physics;
|
|
|
|
/// <summary>
|
|
/// C3c-F1 (2026-08-02): compiled architecture checks for the App-side halves
|
|
/// of the movement-owner application seams whose production graphs have no
|
|
/// focused harness (the inbound network-update controller's dependency
|
|
/// set is composition-only). The Runtime lifecycle matrices carry the
|
|
/// behavioral coverage; these checks keep the App wiring routed through the
|
|
/// owner's typed entries instead of the throwing direct mutations that
|
|
/// crashed the connected lifecycle gate twice
|
|
/// (logs/connected-world-gate-20260802-122749 — SetCharacterSkills;
|
|
/// logs/connected-world-gate-20260802-125907 — ApplyPhysicsState).
|
|
/// </summary>
|
|
public sealed class C3cF1ProductionWiringTests
|
|
{
|
|
[Fact]
|
|
public void LocalPlayerInboundSetState_RoutesThroughTheTypedOwnerEntry()
|
|
{
|
|
IReadOnlyList<CompiledCall> calls = CompiledCallGraph.ReadDeclared(
|
|
typeof(LiveEntityNetworkUpdateController));
|
|
|
|
Assert.Single(
|
|
calls,
|
|
call =>
|
|
call.Target.DeclaringType == typeof(PlayerMovementController)
|
|
&& call.Target.Name == "ApplyServerPhysicsState");
|
|
Assert.DoesNotContain(
|
|
calls,
|
|
call => call.Target.DeclaringType == typeof(PlayerMovementController)
|
|
&& call.Target.Name == nameof(PlayerMovementController.ApplyPhysicsState));
|
|
}
|
|
}
|