XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

LogiBoardToolBox

【WinUI】罗技鼠标板载驱动程序

公开
关注 0 Fork 0 Star 0
UTF-8
using LogiBoardToolBox.Core.Onboard;
using LogiBoardToolBox.Core.Storage;
using XFEExtension.NetCore.XUnit.Assertions;
using XFEExtension.NetCore.XUnit.Attributes;

namespace LogiBoardToolBox.Test;

[TestFixture]
public class ProductRenameTests
{
    [Test]
    public void LegacyDataIsCopiedWithoutDeletingTheOldLibraryOrOverwritingNewSettings()
    {
        using var scratch = new ScratchDirectory();
        var old = Path.Combine(scratch.Path, RuntimeDataPaths.LegacyProductName, "Onboard");
        Directory.CreateDirectory(Path.Combine(old, "Backups"));
        File.WriteAllText(Path.Combine(old, "macros.json"), "recorded delays 59/198/25/10");
        File.WriteAllText(Path.Combine(old, "Backups", "mouse.json"), "old backup");
        var current = RuntimeDataPaths.GetProductDirectory(scratch.Path);
        Assert.Equal(RuntimeDataPaths.ProductName, Path.GetFileName(current));
        Assert.Equal("recorded delays 59/198/25/10", File.ReadAllText(Path.Combine(current, "Onboard", "macros.json")));
        Assert.Equal("old backup", File.ReadAllText(Path.Combine(current, "Onboard", "Backups", "mouse.json")));
        Assert.Equal(true, File.Exists(Path.Combine(old, "macros.json")));
        File.WriteAllText(Path.Combine(current, "Onboard", "macros.json"), "new settings");
        Assert.Equal(current, RuntimeDataPaths.GetProductDirectory(scratch.Path));
        Assert.Equal("new settings", File.ReadAllText(Path.Combine(current, "Onboard", "macros.json")));
    }

    [Test]
    public void FrameworkCreatedProductRootDoesNotPreventOnboardDataMigration()
    {
        using var scratch = new ScratchDirectory();
        var old = Path.Combine(scratch.Path, RuntimeDataPaths.LegacyProductName, "Onboard");
        var currentRoot = Path.Combine(scratch.Path, RuntimeDataPaths.ProductName);
        var framework = Path.Combine(currentRoot, "CrossVersion");
        Directory.CreateDirectory(old);
        Directory.CreateDirectory(framework);
        File.WriteAllText(Path.Combine(old, "macros.json"), "recorded macro library");
        File.WriteAllText(Path.Combine(framework, "settings.json"), "current framework settings");

        Assert.Equal(currentRoot, RuntimeDataPaths.GetProductDirectory(scratch.Path));
        Assert.Equal("recorded macro library", File.ReadAllText(Path.Combine(currentRoot, "Onboard", "macros.json")));
        Assert.Equal("current framework settings", File.ReadAllText(Path.Combine(framework, "settings.json")));
        Assert.Equal("recorded macro library", File.ReadAllText(Path.Combine(old, "macros.json")));
    }

    [Test]
    public async Task LegacyBackupHeadersRemainLoadableAndRestorableAfterTheProductRename()
    {
        using var scratch = new ScratchDirectory();
        var original = Fixture.Create(); original.Format = MemorySnapshot.LegacyFormat;
        var file = Path.Combine(scratch.Path, "legacy.json");
        await OnboardMemory.SaveBackupAsync(original, file);
        var loaded = await OnboardMemory.LoadBackupAsync(file);
        Assert.Equal(MemorySnapshot.LegacyFormat, loaded.Format);
        var plan = MemoryWritePlan.Restore(Fixture.Create(), loaded);
        Assert.Equal(0, plan.Changes.Count);
        Assert.Equal(MemorySnapshot.CurrentFormat, new MemorySnapshot().Format);
        Assert.Equal(false, MemorySnapshot.IsKnownFormat("Unrecognized.Onboard.v1"));
    }
}