Add plugin isolation IPC scaffolding and host phase one docs

This commit is contained in:
lincube
2026-04-22 10:15:07 +08:00
parent 703ed7b48a
commit 2c48b7b846
42 changed files with 1279 additions and 3 deletions

View File

@@ -0,0 +1,48 @@
using System.Text;
using LanMountainDesktop.PluginSdk;
using Xunit;
namespace LanMountainDesktop.Tests;
public sealed class PluginManifestRuntimeTests
{
[Fact]
public void Load_WhenRuntimeIsMissing_DefaultsToInProcess()
{
const string json = """
{
"id": "plugin.runtime.default",
"name": "Runtime Default",
"entranceAssembly": "Plugin.dll"
}
""";
using var stream = new MemoryStream(Encoding.UTF8.GetBytes(json));
var manifest = PluginManifest.Load(stream, "plugin.json");
Assert.NotNull(manifest.Runtime);
Assert.Equal(PluginRuntimeModes.InProcess, manifest.Runtime!.Mode);
Assert.Equal(PluginRuntimeMode.InProcess, manifest.RuntimeMode);
}
[Fact]
public void Load_WhenRuntimeModeIsInvalid_ThrowsHelpfulError()
{
const string json = """
{
"id": "plugin.runtime.invalid",
"name": "Runtime Invalid",
"entranceAssembly": "Plugin.dll",
"runtime": {
"mode": "shared-worker"
}
}
""";
using var stream = new MemoryStream(Encoding.UTF8.GetBytes(json));
var ex = Assert.Throws<InvalidOperationException>(() => PluginManifest.Load(stream, "plugin.json"));
Assert.Contains("runtime.mode", ex.Message);
Assert.Contains("shared-worker", ex.Message);
}
}