test: replace streaming source freezes
This commit is contained in:
parent
5a33369074
commit
0ad2ee1cdf
6 changed files with 436 additions and 285 deletions
|
|
@ -1,7 +1,9 @@
|
|||
using System.Collections.Immutable;
|
||||
using System.Numerics;
|
||||
using System.Reflection;
|
||||
using AcDream.App.Rendering;
|
||||
using AcDream.App.Streaming;
|
||||
using AcDream.App.Tests.Architecture;
|
||||
using AcDream.Core.Net;
|
||||
using AcDream.Core.Net.Messages;
|
||||
using AcDream.Core.Physics;
|
||||
|
|
@ -1047,34 +1049,63 @@ public sealed class LandblockPhysicsPublisherTests
|
|||
[Fact]
|
||||
public void GameWindow_HasNoLandblockPhysicsPublicationBodies()
|
||||
{
|
||||
string source = File.ReadAllText(Path.Combine(
|
||||
FindRepoRoot(),
|
||||
"src",
|
||||
"AcDream.App",
|
||||
"Rendering",
|
||||
"GameWindow.cs"));
|
||||
IReadOnlyList<CompiledCall> windowCalls =
|
||||
CompiledCallGraph.ReadDeclared(typeof(GameWindow));
|
||||
AssertNoCall(windowCalls, typeof(PhysicsDataCache), nameof(PhysicsDataCache.CacheCellStruct));
|
||||
AssertNoCall(windowCalls, typeof(PhysicsDataCache), nameof(PhysicsDataCache.CacheBuilding));
|
||||
AssertNoCall(
|
||||
windowCalls,
|
||||
typeof(ShadowShapeBuilder),
|
||||
nameof(ShadowShapeBuilder.FromLandblockBspParts));
|
||||
AssertNoCall(
|
||||
windowCalls,
|
||||
typeof(ShadowObjectRegistry),
|
||||
nameof(ShadowObjectRegistry.RefloodLandblock));
|
||||
AssertNoCall(
|
||||
windowCalls,
|
||||
typeof(PhysicsEngine),
|
||||
"DemoteLandblockToTerrain");
|
||||
AssertNoCall(windowCalls, typeof(PhysicsEngine), "RemoveLandblock");
|
||||
|
||||
Assert.DoesNotContain("_physicsDataCache.CacheCellStruct", source, StringComparison.Ordinal);
|
||||
Assert.DoesNotContain("_physicsDataCache.CacheBuilding", source, StringComparison.Ordinal);
|
||||
Assert.DoesNotContain("ShadowShapeBuilder.FromLandblockBspParts", source, StringComparison.Ordinal);
|
||||
Assert.DoesNotContain("ShadowObjects.RefloodLandblock", source, StringComparison.Ordinal);
|
||||
Assert.DoesNotContain("_physicsEngine.DemoteLandblockToTerrain", source, StringComparison.Ordinal);
|
||||
Assert.DoesNotContain("_physicsEngine.RemoveLandblock", source, StringComparison.Ordinal);
|
||||
|
||||
string publisherSource = File.ReadAllText(Path.Combine(
|
||||
FindRepoRoot(),
|
||||
"src",
|
||||
"AcDream.App",
|
||||
"Streaming",
|
||||
"LandblockPhysicsPublisher.cs"));
|
||||
Assert.DoesNotContain("_physicsDataCache.RemoveCellsForLandblock", publisherSource, StringComparison.Ordinal);
|
||||
Assert.DoesNotContain("_physicsDataCache.RemoveBuildingsForLandblock", publisherSource, StringComparison.Ordinal);
|
||||
Assert.DoesNotContain("_physicsEngine.ShadowObjects.Reflood", publisherSource, StringComparison.Ordinal);
|
||||
Assert.Contains("CommitCollisionGeneration(", publisherSource, StringComparison.Ordinal);
|
||||
Assert.DoesNotContain(
|
||||
"RestartCollisionRetainedOwnerCapture(",
|
||||
publisherSource,
|
||||
StringComparison.Ordinal);
|
||||
IReadOnlyList<CompiledCall> publisherCalls =
|
||||
CompiledCallGraph.ReadDeclared(typeof(LandblockPhysicsPublisher));
|
||||
MethodInfo advance = typeof(LandblockPhysicsPublisher).GetMethod(
|
||||
"AdvanceBeginOne",
|
||||
BindingFlags.Instance | BindingFlags.NonPublic)!;
|
||||
IReadOnlyList<CompiledCall> advanceCalls = CompiledCallGraph.Read(advance);
|
||||
int stagedCache = CompiledCallGraph.IndexOf(
|
||||
advanceCalls,
|
||||
typeof(LandblockPhysicsPublication),
|
||||
"get_StagingCache");
|
||||
int removeCells = CompiledCallGraph.IndexOf(
|
||||
advanceCalls,
|
||||
typeof(PhysicsDataCache),
|
||||
nameof(PhysicsDataCache.RemoveCellsForLandblock));
|
||||
int removeBuildings = CompiledCallGraph.IndexOf(
|
||||
advanceCalls,
|
||||
typeof(PhysicsDataCache),
|
||||
nameof(PhysicsDataCache.RemoveBuildingsForLandblock));
|
||||
int secondStagedCache = CompiledCallGraph.IndexOf(
|
||||
advanceCalls,
|
||||
typeof(LandblockPhysicsPublication),
|
||||
"get_StagingCache",
|
||||
removeCells + 1);
|
||||
Assert.True(stagedCache >= 0);
|
||||
Assert.True(stagedCache < removeCells);
|
||||
Assert.True(removeCells < secondStagedCache);
|
||||
Assert.True(secondStagedCache < removeBuildings);
|
||||
AssertNoCall(
|
||||
publisherCalls,
|
||||
typeof(ShadowObjectRegistry),
|
||||
nameof(ShadowObjectRegistry.RefloodLandblock));
|
||||
Assert.Contains(
|
||||
publisherCalls,
|
||||
call => call.Target.DeclaringType == typeof(RuntimePhysicsState)
|
||||
&& call.Target.Name == "CommitCollisionGeneration");
|
||||
AssertNoCall(
|
||||
publisherCalls,
|
||||
typeof(RuntimePhysicsState),
|
||||
"RestartCollisionRetainedOwnerCapture");
|
||||
}
|
||||
|
||||
private static void Publish(
|
||||
|
|
@ -1500,15 +1531,14 @@ public sealed class LandblockPhysicsPublisherTests
|
|||
Height = new byte[81],
|
||||
};
|
||||
|
||||
private static string FindRepoRoot()
|
||||
private static void AssertNoCall(
|
||||
IReadOnlyList<CompiledCall> calls,
|
||||
Type declaringType,
|
||||
string methodName)
|
||||
{
|
||||
string? directory = AppContext.BaseDirectory;
|
||||
while (directory is not null)
|
||||
{
|
||||
if (File.Exists(Path.Combine(directory, "AcDream.slnx")))
|
||||
return directory;
|
||||
directory = Directory.GetParent(directory)?.FullName;
|
||||
}
|
||||
throw new DirectoryNotFoundException("Could not locate repository root.");
|
||||
Assert.DoesNotContain(
|
||||
calls,
|
||||
call => call.Target.DeclaringType == declaringType
|
||||
&& call.Target.Name == methodName);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue