Browse Source

Walk the step tree with the helper the repo already has

Three copies of the same pre-order walk across two test files become
TreeTraversal.PreOrder, and the stepper fixture builds its decompiler through
the file-name constructor instead of assembling the type system by hand.

Assisted-by: Claude:claude-opus-5[1m]:Claude Code
pull/4029/head
Siegfried Pammer 3 weeks ago
parent
commit
90d563b796
  1. 27
      ICSharpCode.Decompiler.Tests/DebugStepRecordingTests.cs
  2. 6
      ICSharpCode.Decompiler.Tests/Helpers/StepperTesting.cs
  3. 13
      ILSpy.Tests/Views/DebugStepsTests.cs

27
ICSharpCode.Decompiler.Tests/DebugStepRecordingTests.cs

@ -23,6 +23,7 @@ using System.Linq; @@ -23,6 +23,7 @@ using System.Linq;
using ICSharpCode.Decompiler.CSharp;
using ICSharpCode.Decompiler.DebugSteps;
using ICSharpCode.Decompiler.IL;
using ICSharpCode.Decompiler.Util;
using ICSharpCode.Decompiler.IL.Transforms;
using ICSharpCode.Decompiler.Metadata;
using ICSharpCode.Decompiler.Tests.Helpers;
@ -56,7 +57,7 @@ namespace ICSharpCode.Decompiler.Tests @@ -56,7 +57,7 @@ namespace ICSharpCode.Decompiler.Tests
decompiler.DecompileTypeAsString(SampleType);
Assert.That(Descriptions(decompiler.Stepper.Steps), Has.Some.Contains(RecordedStep));
Assert.That(TreeTraversal.PreOrder(decompiler.Stepper.Steps, n => n.Children).Select(n => n.Description), Has.Some.Contains(RecordedStep));
}
/// <summary>
@ -72,7 +73,7 @@ namespace ICSharpCode.Decompiler.Tests @@ -72,7 +73,7 @@ namespace ICSharpCode.Decompiler.Tests
decompiler.DecompileTypeAsString(SampleType);
Assert.That(Descriptions(decompiler.Stepper.Steps), Has.None.Contains(RecordedStep));
Assert.That(TreeTraversal.PreOrder(decompiler.Stepper.Steps, n => n.Children).Select(n => n.Description), Has.None.Contains(RecordedStep));
}
/// <summary>
@ -301,7 +302,7 @@ namespace ICSharpCode.Decompiler.Tests @@ -301,7 +302,7 @@ namespace ICSharpCode.Decompiler.Tests
var decompiler = CreateRecordingDecompiler();
decompiler.ILTransforms.Add(detachedStep);
decompiler.DecompileTypeAsString(SampleType);
int haltAt = AllNodes(decompiler.Stepper.Steps).Single(n => n.Description.Contains(DetachedStep)).BeginStep;
int haltAt = TreeTraversal.PreOrder(decompiler.Stepper.Steps, n => n.Children).Single(n => n.Description.Contains(DetachedStep)).BeginStep;
var replay = CreateRecordingDecompiler();
var replayStep = new DetachedFunctionILTransform("CleanUpFileName");
@ -321,26 +322,6 @@ namespace ICSharpCode.Decompiler.Tests @@ -321,26 +322,6 @@ namespace ICSharpCode.Decompiler.Tests
return decompiler.Stepper.Steps.Single(n => n.Description.EndsWith("." + methodName, StringComparison.Ordinal));
}
static IEnumerable<Stepper.Node> AllNodes(IEnumerable<Stepper.Node> nodes)
{
foreach (var node in nodes)
{
yield return node;
foreach (var child in AllNodes(node.Children))
yield return child;
}
}
static IEnumerable<string> Descriptions(IEnumerable<Stepper.Node> nodes)
{
foreach (var node in nodes)
{
yield return node.Description;
foreach (var description in Descriptions(node.Children))
yield return description;
}
}
static CSharpDecompiler CreateRecordingDecompiler()
{
var decompiler = StepperTesting.CreateDecompiler();

6
ICSharpCode.Decompiler.Tests/Helpers/StepperTesting.cs

@ -37,10 +37,8 @@ namespace ICSharpCode.Decompiler.Tests.Helpers @@ -37,10 +37,8 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
public static CSharpDecompiler CreateDecompiler()
{
var module = new PEFile("ICSharpCode.Decompiler.dll");
var settings = new DecompilerSettings();
var typeSystem = new DecompilerTypeSystem(module, new UniversalAssemblyResolver(null, false, null), settings);
return new CSharpDecompiler(typeSystem, settings);
return new CSharpDecompiler("ICSharpCode.Decompiler.dll",
new UniversalAssemblyResolver(null, false, null), new DecompilerSettings());
}
/// <summary>

13
ILSpy.Tests/Views/DebugStepsTests.cs

@ -223,21 +223,10 @@ public class DebugStepsTests @@ -223,21 +223,10 @@ public class DebugStepsTests
var ilTransformNames = CSharpDecompiler.GetILTransforms()
.Select(transform => transform.GetType().Name)
.ToHashSet();
AllDescriptions(csharp.Stepper.Steps).Should().NotContain(
ICSharpCode.Decompiler.Util.TreeTraversal.PreOrder(csharp.Stepper.Steps, n => n.Children).Select(n => n.Description).Should().NotContain(
description => ilTransformNames.Contains(StripStepNumber(description)),
"a closed pane leaves the IL transforms unrecorded");
csharp.Stepper.Steps.Should().BeEmpty("a closed pane leaves the whole pipeline unrecorded");
static System.Collections.Generic.IEnumerable<string> AllDescriptions(
System.Collections.Generic.IEnumerable<Stepper.Node> nodes)
{
foreach (var node in nodes)
{
yield return node.Description;
foreach (var description in AllDescriptions(node.Children))
yield return description;
}
}
}
[AvaloniaTest]

Loading…
Cancel
Save