mirror of
https://github.com/wwiinnddyy/LanMountainDesktop.git
synced 2026-06-20 15:44:25 +08:00
93 lines
3.7 KiB
C#
93 lines
3.7 KiB
C#
using Xunit;
|
|
|
|
namespace LanMountainDesktop.Tests;
|
|
|
|
public sealed class PackagingRuntimePolicyTests
|
|
{
|
|
[Fact]
|
|
public void WindowsPackageScript_PublishesLauncherRootAndFrameworkDependentAppDirectory()
|
|
{
|
|
var script = ReadRepositoryFile("LanMountainDesktop", "scripts", "package.ps1");
|
|
|
|
Assert.Contains("Publish-LauncherPayload", script);
|
|
Assert.Contains("Publish-AirAppRuntimePayload", script);
|
|
Assert.Contains("\"app-$Version\"", script);
|
|
Assert.Contains("Publish-MainAppFrameworkDependentPayload", script);
|
|
Assert.Contains("\"--self-contained\", \"false\"", script);
|
|
Assert.Contains("\"-p:SelfContained=false\"", script);
|
|
Assert.Contains("\"-p:PublishAot=false\"", script);
|
|
}
|
|
|
|
[Fact]
|
|
public void WindowsPayloadGuard_BlocksBundledDotNetRuntimeFiles()
|
|
{
|
|
var script = ReadRepositoryFile("LanMountainDesktop", "scripts", "Optimize-PublishPayload.ps1");
|
|
|
|
Assert.Contains("coreclr.dll", script);
|
|
Assert.Contains("hostfxr.dll", script);
|
|
Assert.Contains("hostpolicy.dll", script);
|
|
Assert.Contains("System.Private.CoreLib.dll", script);
|
|
}
|
|
|
|
[Fact]
|
|
public void WindowsPayloadGuard_RequiresLauncherRuntimeMainAndAirAppHost()
|
|
{
|
|
var script = ReadRepositoryFile("LanMountainDesktop", "scripts", "Optimize-PublishPayload.ps1");
|
|
|
|
Assert.Contains("Assert-WindowsPayloadContainsRequiredHosts", script);
|
|
Assert.Contains("LanMountainDesktop.Launcher.exe", script);
|
|
Assert.Contains("LanMountainDesktop.AirAppRuntime.exe", script);
|
|
Assert.Contains("LanMountainDesktop.exe", script);
|
|
Assert.Contains("LanMountainDesktop.AirAppHost.exe", script);
|
|
}
|
|
|
|
[Fact]
|
|
public void ReleaseWorkflow_VerifiesAirAppHostBeforePublishingInstaller()
|
|
{
|
|
var workflow = ReadRepositoryFile(".github", "workflows", "release.yml");
|
|
|
|
Assert.Contains("Verify Windows app host payload", workflow);
|
|
Assert.Contains("LanMountainDesktop.AirAppRuntime.exe", workflow);
|
|
Assert.Contains("LanMountainDesktop.AirAppHost.exe", workflow);
|
|
}
|
|
|
|
[Fact]
|
|
public void AirAppRuntimeProject_IsFrameworkDependentJit()
|
|
{
|
|
var project = ReadRepositoryFile("LanMountainDesktop.AirAppRuntime", "LanMountainDesktop.AirAppRuntime.csproj");
|
|
|
|
Assert.Contains("<PublishAot>false</PublishAot>", project);
|
|
Assert.Contains("<SelfContained>false</SelfContained>", project);
|
|
Assert.Contains("<PublishTrimmed>false</PublishTrimmed>", project);
|
|
Assert.Contains("<PublishReadyToRun>false</PublishReadyToRun>", project);
|
|
}
|
|
|
|
[Fact]
|
|
public void Installer_DownloadsArchitectureSpecificDesktopRuntime()
|
|
{
|
|
var installer = ReadRepositoryFile("LanMountainDesktop", "installer", "LanMountainDesktop.iss");
|
|
|
|
Assert.Contains("https://aka.ms/dotnet/10.0/windowsdesktop-runtime-win-x64.exe", installer);
|
|
Assert.Contains("https://aka.ms/dotnet/10.0/windowsdesktop-runtime-win-x86.exe", installer);
|
|
Assert.Contains("/install /quiet /norestart", installer);
|
|
Assert.Contains("ExitCode <> 3010", installer);
|
|
Assert.DoesNotContain("IsSelfContainedBuild", installer);
|
|
}
|
|
|
|
private static string ReadRepositoryFile(params string[] pathParts)
|
|
{
|
|
var directory = new DirectoryInfo(AppContext.BaseDirectory);
|
|
while (directory is not null && !File.Exists(Path.Combine(directory.FullName, "LanMountainDesktop.slnx")))
|
|
{
|
|
directory = directory.Parent;
|
|
}
|
|
|
|
if (directory is null)
|
|
{
|
|
throw new DirectoryNotFoundException("Unable to locate repository root.");
|
|
}
|
|
|
|
return File.ReadAllText(Path.Combine([directory.FullName, .. pathParts]));
|
|
}
|
|
}
|