66 lines
3.2 KiB
C#
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);
|
|
}
|