feat: 初始化NewLife Studio项目,完成基础框架与数据管理模块
何炳宏 authored at 2026-05-26 12:09:09
2.30 KiB
NewLife.Studio
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);
    }
}