Skip to content

Commit

Permalink
Merge pull request #233 from AlamoEngine-Tools/develop
Browse files Browse the repository at this point in the history
Release
  • Loading branch information
AnakinRaW authored Feb 2, 2025
2 parents 55a5def + 311c5c4 commit 888b0aa
Show file tree
Hide file tree
Showing 81 changed files with 458 additions and 454 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Releasing eaw.modinfo
name: Release AET.Modinfo

on:
push:
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# EaW-Modinfo-Implementation

[![Nuget](https://img.shields.io/nuget/v/AlamoEngineTools.Modinfo)](https://www.nuget.org/packages/AlamoEngineTools.Modinfo/)
[![CI/CD Master](https://github.com/AlamoEngine-Tools/EaW-Modinfo-Implementation/actions/workflows/release.yml/badge.svg)](https://github.com/AlamoEngine-Tools/EaW-Modinfo-Implementation/actions/workflows/release.yml)

C# implementation for the [EaW Modinfo Specification](https://github.com/AlamoEngine-Tools/eaw.modinfo)
Expand Down
24 changes: 12 additions & 12 deletions src/EawModinfo.Tests/DependencyListTest.cs
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using EawModinfo.Model;
using EawModinfo.Model.Json;
using EawModinfo.Spec;
using Xunit;
using EawModinfo.Spec.Equality;
using EawModinfo.Model.Json.Schema;
using System.Text.Json.Nodes;
using System.Linq;
using AET.Modinfo.Model;
using AET.Modinfo.Model.Json;
using AET.Modinfo.Model.Json.Schema;
using AET.Modinfo.Spec;
using AET.Modinfo.Spec.Equality;
using Xunit;

namespace EawModinfo.Tests;
namespace AET.Modinfo.Tests;

public class DependencyListTest
{
Expand Down Expand Up @@ -89,10 +89,10 @@ public static IEnumerable<object[]> GetInvalidJsonData()
public void Parse_Invalid(string data, IList<string> expectedErrorKeys)
{
Assert.False(ModInfoJsonSchema.IsValid(JsonNode.Parse(data), EvaluationType.ModDependencyList, out var errors));
Assert.Equivalent(expectedErrorKeys, errors.Select(x => x.Key).Distinct(), true);
Assert.Equivalent(expectedErrorKeys, Enumerable.Select<KeyValuePair<string, string>, string>(errors, x => x.Key).Distinct(), true);
Assert.Throws<ModinfoParseException>(() => TestUtilities.Evaluate(data, EvaluationType.ModDependencyList));
Assert.Throws<ModinfoParseException>(() => DependencyList.Parse(data));
Assert.Throws<ModinfoParseException>(() => DependencyList.Parse(new MemoryStream(Encoding.UTF8.GetBytes(data))));
Assert.Throws<ModinfoParseException>((Func<object?>)(() => DependencyList.Parse(data)));
Assert.Throws<ModinfoParseException>((Func<object?>)(() => DependencyList.Parse(new MemoryStream(Encoding.UTF8.GetBytes(data)))));
}


Expand Down Expand Up @@ -197,7 +197,7 @@ public static IEnumerable<object[]> GetListInstances()
public static void ToJson(DependencyList list, string expected)
{
var json = list.ToJson();
Assert.Equal(expected, json);
Assert.Equal(expected, (string?)json);

var ms = new MemoryStream();
list.ToJson(ms);
Expand Down
8 changes: 4 additions & 4 deletions src/EawModinfo.Tests/DetectedModReferenceTest.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
using System;
using System.IO.Abstractions;
using EawModinfo.Model;
using EawModinfo.Spec;
using EawModinfo.Utilities;
using AET.Modinfo.Model;
using AET.Modinfo.Spec;
using AET.Modinfo.Utilities;
using Testably.Abstractions.Testing;
using Xunit;

namespace EawModinfo.Tests;
namespace AET.Modinfo.Tests;

public class DetectedModReferenceTest
{
Expand Down
1 change: 1 addition & 0 deletions src/EawModinfo.Tests/EawModinfo.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

<PropertyGroup>
<AssemblyName>AET.Modinfo.Tests</AssemblyName>
<RootNamespace>AET.Modinfo.Tests</RootNamespace>
<TargetFrameworks>net8.0</TargetFrameworks>
<TargetFrameworks Condition="!$([MSBuild]::IsOsUnixLike())">$(TargetFrameworks);net48</TargetFrameworks>
<IsPackable>false</IsPackable>
Expand Down
4 changes: 2 additions & 2 deletions src/EawModinfo.Tests/EqualityComparerTest.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using System;
using EawModinfo.Spec.Equality;
using AET.Modinfo.Spec.Equality;
using Xunit;

namespace EawModinfo.Tests;
namespace AET.Modinfo.Tests;

public class EqualityComparerTest
{
Expand Down
6 changes: 3 additions & 3 deletions src/EawModinfo.Tests/EqualityTestHelpers.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
using System;
using System.Collections.Generic;
using EawModinfo.Model;
using EawModinfo.Spec;
using AET.Modinfo.Model;
using AET.Modinfo.Spec;
using Semver;
using Xunit;

namespace EawModinfo.Tests;
namespace AET.Modinfo.Tests;

public class EqualityTestHelpers
{
Expand Down
60 changes: 30 additions & 30 deletions src/EawModinfo.Tests/LanguageInfoTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
using System.Runtime.InteropServices;
using System.Text;
using System.Text.Json.Nodes;
using EawModinfo.Model;
using EawModinfo.Model.Json;
using EawModinfo.Model.Json.Schema;
using EawModinfo.Spec;
using EawModinfo.Spec.Equality;
using AET.Modinfo.Model;
using AET.Modinfo.Model.Json;
using AET.Modinfo.Model.Json.Schema;
using AET.Modinfo.Spec;
using AET.Modinfo.Spec.Equality;
using Xunit;

namespace EawModinfo.Tests;
namespace AET.Modinfo.Tests;

public class LanguageInfoTests
{
Expand Down Expand Up @@ -59,19 +59,19 @@ public void Equal_GetHashCode()
public void Ctor()
{
var info = new LanguageInfo("en", LanguageSupportLevel.FullLocalized);
Assert.Equal("en", info.Code);
Assert.Equal((string?)"en", (string?)info.Code);
Assert.Equal(LanguageSupportLevel.FullLocalized, info.Support);
}

[Fact]
public void Ctor_DefaultSupportCoercesToFullLocalized()
{
var info = new LanguageInfo("de", default);
Assert.Equal("de", info.Code);
Assert.Equal((string?)"de", (string?)info.Code);
Assert.Equal(LanguageSupportLevel.FullLocalized, info.Support);

var info2 = new LanguageInfo(new JsonLanguageInfo("en", default));
Assert.Equal("en", info2.Code);
Assert.Equal((string?)"en", (string?)info2.Code);
Assert.Equal(LanguageSupportLevel.FullLocalized, info2.Support);
}

Expand Down Expand Up @@ -130,12 +130,12 @@ public void Parse(string data, string expectedCode, LanguageSupportLevel expecte
TestUtilities.Evaluate(data, EvaluationType.ModLanguageInfo);
Assert.True(ModInfoJsonSchema.IsValid(JsonNode.Parse(data), EvaluationType.ModLanguageInfo, out _));
var languageInfo = LanguageInfo.Parse(data);
Assert.Equal(expectedCode, languageInfo.Code);
Assert.Equal(expectedCode, (string?)languageInfo.Code);
Assert.Equal(expectedLevel, languageInfo.Support);

var ms = new MemoryStream(Encoding.UTF8.GetBytes(data));
languageInfo = LanguageInfo.Parse(ms);
Assert.Equal(expectedCode, languageInfo.Code);
Assert.Equal(expectedCode, (string?)languageInfo.Code);
Assert.Equal(expectedLevel, languageInfo.Support);
}

Expand Down Expand Up @@ -200,9 +200,9 @@ public void Parse_InvalidDataThrows(string data, IList<string> expectedErrorKeys
{
Assert.Throws<ModinfoParseException>(() => TestUtilities.Evaluate(data, EvaluationType.ModLanguageInfo));
Assert.False(ModInfoJsonSchema.IsValid(JsonNode.Parse(data), EvaluationType.ModLanguageInfo, out var errors));
Assert.Equivalent(expectedErrorKeys, errors.Select(x => x.Key), true);
Assert.Throws<ModinfoParseException>(() => LanguageInfo.Parse(data));
Assert.Throws<ModinfoParseException>(() => LanguageInfo.Parse(new MemoryStream(Encoding.UTF8.GetBytes(data))));
Assert.Equivalent(expectedErrorKeys, Enumerable.Select<KeyValuePair<string, string>, string>(errors, x => x.Key), true);
Assert.Throws<ModinfoParseException>((Func<object?>)(() => LanguageInfo.Parse(data)));
Assert.Throws<ModinfoParseException>((Func<object?>)(() => LanguageInfo.Parse(new MemoryStream(Encoding.UTF8.GetBytes(data)))));
}

[Fact]
Expand All @@ -217,44 +217,44 @@ public void ToJson_Languages_Default()
{
var languageInfo = LanguageInfo.Default;
var json = languageInfo.ToJson();
Assert.Contains(@"""code"": ""en""", json);
Assert.DoesNotContain(@"""support"": 7", json);
Assert.Contains((string)@"""code"": ""en""", (string?)json);
Assert.DoesNotContain((string)@"""support"": 7", (string?)json);

var ms = new MemoryStream();
languageInfo.ToJson(ms);
json = Encoding.UTF8.GetString(ms.ToArray());
Assert.Contains(@"""code"": ""en""", json);
Assert.DoesNotContain(@"""support"": 7", json);
Assert.Contains((string)@"""code"": ""en""", (string?)json);
Assert.DoesNotContain((string)@"""support"": 7", (string?)json);
}

[Fact]
public void ToJson_Languages_CustomDefault()
{
var languageInfo = new LanguageInfo("en", 0);
var json = languageInfo.ToJson();
Assert.Contains(@"""code"": ""en""", json);
Assert.DoesNotContain(@"""support""", json);
Assert.Contains((string)@"""code"": ""en""", (string?)json);
Assert.DoesNotContain((string)@"""support""", (string?)json);

var ms = new MemoryStream();
languageInfo.ToJson(ms);
json = Encoding.UTF8.GetString(ms.ToArray());
Assert.Contains(@"""code"": ""en""", json);
Assert.DoesNotContain(@"""support""", json);
Assert.Contains((string)@"""code"": ""en""", (string?)json);
Assert.DoesNotContain((string)@"""support""", (string?)json);
}

[Fact]
public void ToJson_Languages_Full()
{
var languageInfo = new LanguageInfo("en", LanguageSupportLevel.FullLocalized);
var json = languageInfo.ToJson();
Assert.Contains(@"""code"": ""en""", json);
Assert.DoesNotContain(@"""support"": 7", json);
Assert.Contains((string)@"""code"": ""en""", (string?)json);
Assert.DoesNotContain((string)@"""support"": 7", (string?)json);

var ms = new MemoryStream();
languageInfo.ToJson(ms);
json = Encoding.UTF8.GetString(ms.ToArray());
Assert.Contains(@"""code"": ""en""", json);
Assert.DoesNotContain(@"""support""", json);
Assert.Contains((string)@"""code"": ""en""", (string?)json);
Assert.DoesNotContain((string)@"""support""", (string?)json);
}

[Fact]
Expand All @@ -263,14 +263,14 @@ public void ToJson_Languages_NonEnglish()
var languageInfo = new LanguageInfo("de", LanguageSupportLevel.FullLocalized);
var json = languageInfo.ToJson();

Assert.Contains(@"""code"": ""de""", json);
Assert.DoesNotContain(@"""support"": 7", json);
Assert.Contains((string)@"""code"": ""de""", (string?)json);
Assert.DoesNotContain((string)@"""support"": 7", (string?)json);

var ms = new MemoryStream();
languageInfo.ToJson(ms);
json = Encoding.UTF8.GetString(ms.ToArray());
Assert.Contains(@"""code"": ""de""", json);
Assert.DoesNotContain(@"""support"": 7", json);
Assert.Contains((string)@"""code"": ""de""", (string?)json);
Assert.DoesNotContain((string)@"""support"": 7", (string?)json);
}

[Fact]
Expand Down
6 changes: 3 additions & 3 deletions src/EawModinfo.Tests/MainModinfoFileTest.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
using System;
using EawModinfo.File;
using EawModinfo.Spec;
using AET.Modinfo.File;
using AET.Modinfo.Spec;
using Xunit;

namespace EawModinfo.Tests;
namespace AET.Modinfo.Tests;

public class MainModinfoFileTest : ModinfoFileTestsBase
{
Expand Down
52 changes: 26 additions & 26 deletions src/EawModinfo.Tests/MergeTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using EawModinfo.Model;
using EawModinfo.Model.Json;
using EawModinfo.Spec;
using EawModinfo.Spec.Steam;
using EawModinfo.Utilities;
using AET.Modinfo.Model;
using AET.Modinfo.Model.Json;
using AET.Modinfo.Spec;
using AET.Modinfo.Spec.Steam;
using AET.Modinfo.Utilities;
using Semver;
using Xunit;

namespace EawModinfo.Tests;
namespace AET.Modinfo.Tests;

public class MergeTests
{
Expand All @@ -35,25 +35,25 @@ public void MergeInto_VariantDefinesNameOnly()

var newData = variantData.MergeInto(mainData);

Assert.Equal(variantData.Name, newData.Name);
Assert.Equal(mainData.Icon, newData.Icon);
Assert.Equal(mainData.Summary, newData.Summary);
Assert.Equal((string?)variantData.Name, (string?)newData.Name);
Assert.Equal((string?)mainData.Icon, (string?)newData.Icon);
Assert.Equal((string?)mainData.Summary, (string?)newData.Summary);
Assert.Equal(2, newData.Languages.Count); // As stated by the specification in III.3.2, languages was not explicitly set.
Assert.True(newData.LanguagesExplicitlySet);
Assert.Equal(LanguageInfo.Default, newData.Languages.First());
Assert.Equal(LanguageInfo.Default, Enumerable.First(newData.Languages));
Assert.Equal(2, newData.Dependencies.Count);
Assert.Equal("bla", newData.Dependencies[0].Identifier);
Assert.Equal((string?)"bla", (string?)newData.Dependencies[0].Identifier);
Assert.NotNull(newData.SteamData);
Assert.Equal(mainData.SteamData!.Id, newData.SteamData?.Id);
Assert.Equal(mainData.SteamData!.Title, newData.SteamData?.Title);
Assert.Equal((string?)mainData.SteamData!.Id, (string?)newData.SteamData?.Id);
Assert.Equal((string?)mainData.SteamData!.Title, (string?)newData.SteamData?.Title);
Assert.Single(newData.Custom);
Assert.Equal(new SemVersion(1, 2, 2), newData.Version);
Assert.Equal(mainData.Version, newData.Version);


var invalid = new InvalidModinfo();
Assert.Throws<ModinfoException>(() => invalid.MergeInto(newData));
Assert.Throws<ModinfoException>(() => newData.MergeInto(invalid));
Assert.Throws<ModinfoException>((Func<object?>)(() => invalid.MergeInto(newData)));
Assert.Throws<ModinfoException>((Func<object?>)(() => newData.MergeInto(invalid)));
}

[Fact]
Expand Down Expand Up @@ -87,23 +87,23 @@ public void MergeInto_VariantDefinesAll()

var newData = variantData.MergeInto(mainData);

Assert.Equal(variantData.Name, newData.Name);
Assert.Equal(variantData.Icon, newData.Icon);
Assert.Equal(variantData.Summary, newData.Summary);
Assert.Equal((string?)variantData.Name, (string?)newData.Name);
Assert.Equal((string?)variantData.Icon, (string?)newData.Icon);
Assert.Equal((string?)variantData.Summary, (string?)newData.Summary);
Assert.Equal(2, newData.Languages.Count);
Assert.True(newData.LanguagesExplicitlySet);
Assert.Equal(2, newData.Dependencies.Count);
Assert.Equal("bar", newData.Dependencies[0].Identifier);
Assert.Equal((string?)"bar", (string?)newData.Dependencies[0].Identifier);
Assert.NotNull(newData.SteamData);
Assert.Equal(variantData.SteamData!.Id, newData.SteamData?.Id);
Assert.Equal(variantData.SteamData!.Title, newData.SteamData?.Title);
Assert.Equal((string?)variantData.SteamData!.Id, (string?)newData.SteamData?.Id);
Assert.Equal((string?)variantData.SteamData!.Title, (string?)newData.SteamData?.Title);
Assert.Equal(new SemVersion(9, 9, 9), newData.Version);
Assert.Equal(variantData.Version, newData.Version);


var invalid = new InvalidModinfo();
Assert.Throws<ModinfoException>(() => invalid.MergeInto(newData));
Assert.Throws<ModinfoException>(() => newData.MergeInto(invalid));
Assert.Throws<ModinfoException>((Func<object?>)(() => invalid.MergeInto(newData)));
Assert.Throws<ModinfoException>((Func<object?>)(() => newData.MergeInto(invalid)));
}

[Fact]
Expand Down Expand Up @@ -131,9 +131,9 @@ public void MergeInto_CustomMerge()

Assert.Equal(3, newData.Custom.Count);

Assert.Equal("value1", newData.Custom["key1"]);
Assert.Equal(2, newData.Custom["key2"]); // Value should be 2 as specified in III.3.2
Assert.Equal("value3", newData.Custom["key3"]);
Assert.Equal<object>("value1", newData.Custom["key1"]);
Assert.Equal<object>(2, newData.Custom["key2"]); // Value should be 2 as specified in III.3.2
Assert.Equal<object>("value3", newData.Custom["key3"]);
}

[Fact]
Expand Down
6 changes: 3 additions & 3 deletions src/EawModinfo.Tests/ModIdentityEqualityTest.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
using EawModinfo.Model;
using EawModinfo.Spec;
using AET.Modinfo.Model;
using AET.Modinfo.Spec;
using Semver;
using Xunit;

namespace EawModinfo.Tests;
namespace AET.Modinfo.Tests;

public class ModIdentityEqualityTest : ModIdentityEqualityTestsBase<ModIdentity>
{
Expand Down
Loading

0 comments on commit 888b0aa

Please sign in to comment.