using Avalonia.Controls;
using NewLife.Studio.Core;
using Xunit;
namespace NewLife.Studio.Core.Tests;
public class ModuleInfoTests
{
private class TestModule : IStudioModule
{
public string Id => "test-module";
public string DisplayName => "Test Module";
public string Icon => "test-icon";
public int Order => 10;
public Task OnActivateAsync(CancellationToken ct = default) => Task.CompletedTask;
public Task OnDeactivateAsync(CancellationToken ct = default) => Task.CompletedTask;
public Control GetView() => new TextBlock();
}
[Fact]
public void All_Properties_Are_Required_And_Init_Only()
{
var module = new TestModule();
var info = new ModuleInfo
{
Id = "mod-001",
DisplayName = "My Module",
Icon = "icon-star",
Order = 5,
Module = module
};
Assert.Equal("mod-001", info.Id);
Assert.Equal("My Module", info.DisplayName);
Assert.Equal("icon-star", info.Icon);
Assert.Equal(5, info.Order);
Assert.Same(module, info.Module);
}
[Fact]
public void Order_Default_Is_Zero_When_Not_Specified()
{
var module = new TestModule();
var info = new ModuleInfo
{
Id = "mod-default",
DisplayName = "Default Order",
Icon = "icon-default",
Module = module
};
Assert.Equal(0, info.Order);
}
[Fact]
public void ModuleInfo_Is_Immutable_After_Construction()
{
var module = new TestModule();
var info = new ModuleInfo
{
Id = "mod-immutable",
DisplayName = "Immutable Module",
Icon = "icon-lock",
Order = 99,
Module = module
};
var originalId = info.Id;
var originalName = info.DisplayName;
var originalIcon = info.Icon;
var originalOrder = info.Order;
var originalModule = info.Module;
// Properties should return same values after repeated access
Assert.Equal(originalId, info.Id);
Assert.Equal(originalName, info.DisplayName);
Assert.Equal(originalIcon, info.Icon);
Assert.Equal(originalOrder, info.Order);
Assert.Same(originalModule, info.Module);
}
}
|