Browse Source

Test that auto-loaded assemblies are not persisted

Assisted-by: Claude:claude-opus-4-7:Claude Code

Assisted-by: Claude:claude-opus-4-7:Claude Code
pull/3755/head
Siegfried Pammer 2 months ago
parent
commit
607c250968
  1. 58
      ILSpy.Tests/MainWindow/MainWindowTests.cs

58
ILSpy.Tests/MainWindow/MainWindowTests.cs

@ -18,6 +18,7 @@ @@ -18,6 +18,7 @@
using System.Linq;
using System.Threading.Tasks;
using System.Xml.Linq;
using Avalonia.Headless.NUnit;
@ -25,6 +26,7 @@ using AwesomeAssertions; @@ -25,6 +26,7 @@ using AwesomeAssertions;
using ICSharpCode.ILSpy.Properties;
using ILSpy;
using ILSpy.AppEnv;
using ILSpy.Commands;
using ILSpy.TreeNodes;
@ -185,6 +187,62 @@ public class MainWindowTests @@ -185,6 +187,62 @@ public class MainWindowTests
}
}
[AvaloniaTest]
public async Task Auto_Loaded_Assemblies_Are_Not_Persisted()
{
var window = AppComposition.Current.GetExport<MainWindow>();
window.Show();
var vm = (MainWindowViewModel)window.DataContext!;
await vm.AssemblyTreeModel.WaitForAssembliesAsync(minimumCount: 3);
var newAsmPath = typeof(System.Net.Http.HttpClient).Assembly.Location;
var registry = AppComposition.Current.GetExport<MainMenuCommandRegistry>();
var openCommand = registry.Commands
.Single(c => c.Metadata.Header == nameof(Resources._Open))
.CreateExport().Value;
openCommand.Execute(newAsmPath);
await Waiters.WaitForAsync(() =>
vm.AssemblyTreeModel.AssemblyList!.GetAssemblies().Any(a =>
string.Equals(a.FileName, newAsmPath, System.StringComparison.OrdinalIgnoreCase)));
var loaded = vm.AssemblyTreeModel.AssemblyList!.GetAssemblies()
.First(a => string.Equals(a.FileName, newAsmPath, System.StringComparison.OrdinalIgnoreCase));
await loaded.GetLoadResultAsync();
var typeNode = vm.AssemblyTreeModel.FindNode<TypeTreeNode>(
loaded.ShortName, "System.Net.Http", "System.Net.Http.HttpClient");
typeNode.EnsureLazyChildren();
var methodNode = typeNode.Children.OfType<MethodTreeNode>()
.First(m => m.MethodDefinition.Name == "CancelPendingRequests");
vm.AssemblyTreeModel.SelectedItem = methodNode;
await vm.DockWorkspace.WaitForDecompiledTextAsync();
await Waiters.WaitForAsync(() =>
vm.AssemblyTreeModel.AssemblyList!.GetAssemblies().Any(a => a.IsAutoLoaded));
var settingsService = AppComposition.Current.GetExport<SettingsService>();
var manager = settingsService.AssemblyListManager;
manager.SaveList(vm.AssemblyTreeModel.AssemblyList!);
var settingsPath = ICSharpCode.ILSpyX.Settings.ILSpySettings.SettingsFilePathProvider!();
var doc = XDocument.Load(settingsPath);
var savedFiles = doc.Descendants("Assembly")
.Select(e => e.Value)
.ToHashSet(System.StringComparer.OrdinalIgnoreCase);
var assemblies = vm.AssemblyTreeModel.AssemblyList!.GetAssemblies();
var autoLoaded = assemblies.Where(a => a.IsAutoLoaded).ToList();
autoLoaded.Should().NotBeEmpty();
foreach (var asm in autoLoaded)
savedFiles.Should().NotContain(asm.FileName, "auto-loaded assembly {0} must not be persisted", asm.FileName);
var manualLoaded = assemblies.Where(a => !a.IsAutoLoaded).ToList();
foreach (var asm in manualLoaded)
savedFiles.Should().Contain(asm.FileName, "manually loaded assembly {0} must be persisted", asm.FileName);
}
[AvaloniaTest]
public async Task Opening_Assembly_Adds_It_To_The_Tree()
{

Loading…
Cancel
Save