Files
cneicy 88ba3cdc48
Validate ShrinkSDK Workspace / unity (push) Failing after 3m18s
feat: add Godot C# compatibility and shared codegen weaving
2026-09-05 02:37:43 +08:00

66 lines
3.2 KiB
C#

#nullable enable
using System;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using ShrinkSDK.Godot.Editor;
using ShrinkSDK.Installer;
var root = Path.Combine(Path.GetTempPath(), "ShrinkSDK.InstallerFixture", Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(root);
try
{
var project = Path.Combine(root, "Fixture.csproj");
File.WriteAllText(project, """
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup><TargetFramework>net8.0</TargetFramework><FixtureValue>keep</FixtureValue></PropertyGroup>
<ItemGroup>
<PackageReference Include="Existing.Package" Version="1.2.3" />
<PackageReference Include="Child.Version.Package"><Version>3.4.5</Version></PackageReference>
</ItemGroup>
</Project>
""");
var config = Path.Combine(root, "NuGet.Config");
File.WriteAllText(config, """
<configuration><packageSources><add key="Existing" value="https://example.invalid/v3/index.json" /></packageSources></configuration>
""");
ShrinkProjectPackageEditor.SetPackageReference(project, "ShrinkSDK.EventBus", "2.1.0");
ShrinkProjectPackageEditor.SetPackageReference(project, "ShrinkSDK.EventBus", "2.1.0");
var installed = XDocument.Load(project);
Require(installed.Descendants("PackageReference").Count(element =>
(string?)element.Attribute("Include") == "ShrinkSDK.EventBus") == 1, "package reference was duplicated");
Require(installed.ToString().Contains("Existing.Package") && installed.ToString().Contains("FixtureValue"),
"unrelated project content was changed");
var installedVersions = ShrinkProjectPackageEditor.ReadPackageReferences(project);
Require(installedVersions["ShrinkSDK.EventBus"] == "2.1.0", "installed version was not read correctly");
Require(installedVersions["Child.Version.Package"] == "3.4.5", "child Version element was not read correctly");
Require(ShrinkPackageVersion.Classify("2.2.0", "2.1.0") == ShrinkPackageVersionRelation.Newer,
"newer installed version was classified as outdated");
Require(ShrinkPackageVersion.Classify("2.1.0-preview.10", "2.1.0-preview.2") ==
ShrinkPackageVersionRelation.Newer, "prerelease versions were not ordered semantically");
ShrinkProjectPackageEditor.SetPackageReference(project, "ShrinkSDK.EventBus", null);
Require(!XDocument.Load(project).Descendants("PackageReference").Any(element =>
(string?)element.Attribute("Include") == "ShrinkSDK.EventBus"), "package reference was not removed");
ShrinkProjectPackageEditor.EnsureShrinkFeed(config);
ShrinkProjectPackageEditor.EnsureShrinkFeed(config);
var sources = XDocument.Load(config).Descendants("add").ToArray();
Require(sources.Count(element => (string?)element.Attribute("key") == "ShrinkSDK") == 1,
"ShrinkSDK feed was duplicated");
Require(sources.Any(element => (string?)element.Attribute("key") == "Existing"),
"existing NuGet source was removed");
Console.WriteLine("PASS Godot Installer atomic package/feed install-update-remove merge");
}
finally
{
Directory.Delete(root, true);
}
static void Require(bool condition, string message)
{
if (!condition) throw new InvalidOperationException(message);
}