Skip to content

Commit

Permalink
Merge branch 'pre-release' into release
Browse files Browse the repository at this point in the history
  • Loading branch information
Noggog committed Sep 5, 2022
2 parents 752be77 + fe32900 commit fe9e2f9
Show file tree
Hide file tree
Showing 58 changed files with 2,341 additions and 192 deletions.
2 changes: 1 addition & 1 deletion Mutagen.Bethesda.Autofac/Mutagen.Bethesda.Autofac.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Noggog.Autofac" Version="2.49.0" />
<PackageReference Include="Noggog.Autofac" Version="2.50.1" />
<PackageReference Include="NuGetizer" Version="0.8.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ namespace Mutagen.Bethesda.UnitTests.AutoData;
public class MutagenAutoDataAttribute : AutoDataAttribute
{
public MutagenAutoDataAttribute(
bool ConfigureMembers = false,
GameRelease Release = GameRelease.SkyrimSE,
bool ConfigureMembers = false,
bool UseMockFileSystem = true)
: base(() =>
{
Expand Down
24 changes: 24 additions & 0 deletions Mutagen.Bethesda.Core.UnitTests/AutoData/MutagenModAutoData.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using AutoFixture;
using AutoFixture.Xunit2;
using Mutagen.Bethesda.Testing.AutoData;

namespace Mutagen.Bethesda.UnitTests.AutoData;

public class MutagenModAutoDataAttribute : AutoDataAttribute
{
public MutagenModAutoDataAttribute(
GameRelease Release = GameRelease.SkyrimSE,
bool UseMockFileSystem = true)
: base(() =>
{
var ret = new Fixture();
ret.Customize(new MutagenDefaultCustomization(
useMockFileSystem: UseMockFileSystem,
configureMembers: false,
release: Release));
ret.Customize(new MutagenConcreteModsCustomization(release: Release));
return ret;
})
{
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
<PackageReference Include="FluentAssertions" Version="6.7.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.2.0" />
<PackageReference Include="Microsoft.Reactive.Testing" Version="5.0.0" />
<PackageReference Include="Noggog.CSharpExt" Version="2.49.0" />
<PackageReference Include="Noggog.Testing" Version="2.49.0" />
<PackageReference Include="Noggog.CSharpExt" Version="2.50.1" />
<PackageReference Include="Noggog.Testing" Version="2.50.1" />
<PackageReference Include="GitInfo" Version="2.2.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand Down Expand Up @@ -145,6 +145,11 @@
<DefaultPackFolder>content</DefaultPackFolder>
<BuildAction>Compile</BuildAction>
</Compile>
<Compile Update="AutoData\MutagenModAutoData.cs">
<CodeLanguage>cs</CodeLanguage>
<DefaultPackFolder>content</DefaultPackFolder>
<BuildAction>Compile</BuildAction>
</Compile>
</ItemGroup>

</Project>
8 changes: 4 additions & 4 deletions Mutagen.Bethesda.Core.UnitTests/Placeholders/TestMod.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class TestMod : ITestMod, IDisposable
public bool CanUseLocalization { get; }
public bool UsingLocalization { get; set; }

IGroup IMod.GetTopLevelGroup(Type type)
IGroup? IMod.TryGetTopLevelGroup(Type type)
{
throw new NotImplementedException();
}
Expand Down Expand Up @@ -150,12 +150,12 @@ public IMask<bool> GetEqualsMask(object rhs, EqualsMaskHelper.Include include =
throw new NotImplementedException();
}

IGroupGetter<TMajor> IModGetter.GetTopLevelGroup<TMajor>()
IGroupGetter<TMajor>? IModGetter.TryGetTopLevelGroup<TMajor>()
{
throw new NotImplementedException();
}

public IGroupGetter GetTopLevelGroup(Type type)
public IGroupGetter? TryGetTopLevelGroup(Type type)
{
throw new NotImplementedException();
}
Expand All @@ -175,7 +175,7 @@ public void WriteToBinaryParallel(FilePath path, BinaryWriteParameters? param =
throw new NotImplementedException();
}

public IGroup<TMajor> GetTopLevelGroup<TMajor>() where TMajor : IMajorRecord
public IGroup<TMajor>? TryGetTopLevelGroup<TMajor>() where TMajor : IMajorRecord
{
throw new NotImplementedException();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ namespace Mutagen.Bethesda.UnitTests.Plugins.Order;

public class LiveLoadOrderIntegrationTests
{
[Theory, MutagenAutoData(false)]
[Theory, MutagenAutoData(ConfigureMembers: false)]
public void LiveLoadOrder(
[Frozen]IScheduler scheduler,
[Frozen]MockFileSystemWatcher watcher,
Expand Down Expand Up @@ -137,7 +137,7 @@ public class LiveLoadOrderIntegrationTests
});
}

[Theory, MutagenAutoData(true)]
[Theory, MutagenAutoData(ConfigureMembers: true)]
public void LiveLoadOrder_EnsureReaddRetainsOrder(
[Frozen]IScheduler scheduler,
[Frozen]MockFileSystemWatcher watcher,
Expand Down Expand Up @@ -225,7 +225,7 @@ public class LiveLoadOrderIntegrationTests

// Vortex puts CC mods on the plugins file, as unactivated. Seemingly to drive load order?
// This ensures that is respected
[Theory, MutagenAutoData(false)]
[Theory, MutagenAutoData(ConfigureMembers: false)]
public void LiveLoadOrder_PluginsCCListingReorders(
[Frozen]IScheduler scheduler,
[Frozen]MockFileSystemWatcher watcher,
Expand Down Expand Up @@ -312,7 +312,7 @@ public class LiveLoadOrderIntegrationTests
}));
}

[Theory, MutagenAutoData(false)]
[Theory, MutagenAutoData(ConfigureMembers: false)]
public void LiveLoadOrder_DontReorderPluginsFile(
[Frozen]IScheduler scheduler,
[Frozen]MockFileSystem fs,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public void NoSub(LiveLoadOrderProvider sut)
sut.CccLive.DidNotReceive().Get(out _);
}

[Theory, MutagenAutoData(false)]
[Theory, MutagenAutoData(ConfigureMembers: false)]
public void GetsListingsInitially(
IScheduler scheduler,
LiveLoadOrderProvider sut)
Expand All @@ -52,7 +52,7 @@ public void NoSub(LiveLoadOrderProvider sut)
err.Messages.Select(x => x.Value.Value.Succeeded).Should().AllBeEquivalentTo(true);
}

[Theory, MutagenAutoData(false)]
[Theory, MutagenAutoData(ConfigureMembers: false)]
public void Throttles(
TestScheduler scheduler,
LiveLoadOrderProvider sut)
Expand All @@ -70,7 +70,7 @@ public void NoSub(LiveLoadOrderProvider sut)
var c = sut.PluginLive.Received(1).Changed;
}

[Theory, MutagenAutoData(false)]
[Theory, MutagenAutoData(ConfigureMembers: false)]
public void EitherChangedRequeries(
IScheduler scheduler,
LiveLoadOrderProvider sut)
Expand Down
2 changes: 1 addition & 1 deletion Mutagen.Bethesda.Core.UnitTests/TestPathing.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using System.Runtime.CompilerServices;
using Noggog.Utility;
using Noggog.IO;

namespace Mutagen.Bethesda.UnitTests;

Expand Down
16 changes: 8 additions & 8 deletions Mutagen.Bethesda.Core/Extensions/FormLinkMixIn.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public static class FormLinkMixIn
[Obsolete("Use ToLink instead")]
public static IFormLink<TGetter> AsLink<TSetter, TGetter>(this TSetter rec)
where TGetter : class, IMajorRecordGetter
where TSetter : IMapsToGetter<TGetter>, TGetter
where TSetter : IMapsToGetter<TGetter>, TGetter, IMajorRecordGetter
{
return new FormLink<TGetter>(rec.FormKey);
}
Expand All @@ -28,7 +28,7 @@ public static class FormLinkMixIn
/// </summary>
public static IFormLink<TGetter> ToLink<TSetter, TGetter>(this TSetter rec)
where TGetter : class, IMajorRecordGetter
where TSetter : IMapsToGetter<TGetter>, TGetter
where TSetter : IMapsToGetter<TGetter>, TGetter, IMajorRecordGetter
{
return new FormLink<TGetter>(rec.FormKey);
}
Expand All @@ -41,7 +41,7 @@ public static class FormLinkMixIn
[Obsolete("Use ToLinkGetter instead")]
public static IFormLinkGetter<TGetter> AsLinkGetter<TSetter, TGetter>(this TSetter rec)
where TGetter : class, IMajorRecordGetter
where TSetter : IMapsToGetter<TGetter>, TGetter
where TSetter : IMapsToGetter<TGetter>, TGetter, IMajorRecordGetter
{
return new FormLink<TGetter>(rec.FormKey);
}
Expand All @@ -53,7 +53,7 @@ public static class FormLinkMixIn
/// </summary>
public static IFormLinkGetter<TGetter> ToLinkGetter<TSetter, TGetter>(this TSetter rec)
where TGetter : class, IMajorRecordGetter
where TSetter : IMapsToGetter<TGetter>, TGetter
where TSetter : IMapsToGetter<TGetter>, TGetter, IMajorRecordGetter
{
return new FormLink<TGetter>(rec.FormKey);
}
Expand Down Expand Up @@ -168,7 +168,7 @@ public static IFormLinkGetter<TGetter> ToLinkGetter<TGetter>(this IMajorRecordGe
[Obsolete("Use ToNullableLink instead")]
public static IFormLinkNullable<TGetter> AsNullableLink<TSetter, TGetter>(this TSetter rec)
where TGetter : class, IMajorRecordGetter
where TSetter : IMapsToGetter<TGetter>, TGetter
where TSetter : IMapsToGetter<TGetter>, TGetter, IMajorRecordGetter
{
return new FormLinkNullable<TGetter>(rec.FormKey);
}
Expand All @@ -180,7 +180,7 @@ public static IFormLinkGetter<TGetter> ToLinkGetter<TGetter>(this IMajorRecordGe
/// </summary>
public static IFormLinkNullable<TGetter> ToNullableLink<TSetter, TGetter>(this TSetter rec)
where TGetter : class, IMajorRecordGetter
where TSetter : IMapsToGetter<TGetter>, TGetter
where TSetter : IMapsToGetter<TGetter>, TGetter, IMajorRecordGetter
{
return new FormLinkNullable<TGetter>(rec.FormKey);
}
Expand All @@ -193,7 +193,7 @@ public static IFormLinkGetter<TGetter> ToLinkGetter<TGetter>(this IMajorRecordGe
[Obsolete("Use ToNullableLinkGetter instead")]
public static IFormLinkNullableGetter<TGetter> AsNullableLinkGetter<TSetter, TGetter>(this TSetter rec)
where TGetter : class, IMajorRecordGetter
where TSetter : IMapsToGetter<TGetter>, TGetter
where TSetter : IMapsToGetter<TGetter>, TGetter, IMajorRecordGetter
{
return new FormLinkNullable<TGetter>(rec.FormKey);
}
Expand All @@ -205,7 +205,7 @@ public static IFormLinkGetter<TGetter> ToLinkGetter<TGetter>(this IMajorRecordGe
/// </summary>
public static IFormLinkNullableGetter<TGetter> ToNullableLinkGetter<TSetter, TGetter>(this TSetter rec)
where TGetter : class, IMajorRecordGetter
where TSetter : IMapsToGetter<TGetter>, TGetter
where TSetter : IMapsToGetter<TGetter>, TGetter, IMajorRecordGetter
{
return new FormLinkNullable<TGetter>(rec.FormKey);
}
Expand Down
5 changes: 3 additions & 2 deletions Mutagen.Bethesda.Core/Mutagen.Bethesda.Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@
</PackageReference>
<PackageReference Include="ini-parser-netstandard" Version="2.5.2" />
<PackageReference Include="K4os.Compression.LZ4.Streams" Version="1.2.16" />
<PackageReference Include="Loqui" Version="2.49.0" />
<PackageReference Include="Noggog.CSharpExt" Version="2.49.0" />
<PackageReference Include="Loqui" Version="2.50.1" />
<PackageReference Include="Noggog.CSharpExt" Version="2.50.1" />
<PackageReference Include="NuGetizer" Version="0.8.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand Down Expand Up @@ -222,6 +222,7 @@
<Compile Include="Plugins\Exceptions\MalformedDataException.cs" />
<Compile Include="Plugins\Exceptions\ModHeaderMalformedException.cs" />
<Compile Include="Plugins\Exceptions\ModPathException.cs" />
<Compile Include="Plugins\Extensions\IModExt.cs" />
<Compile Include="Plugins\Extensions\LinkCacheConstructionMixIn.cs" />
<Compile Include="Plugins\Extensions\IFormLinkExt.cs" />
<Compile Include="Plugins\Extensions\ModContextExt.cs" />
Expand Down
11 changes: 8 additions & 3 deletions Mutagen.Bethesda.Core/Plugins/EDIDLink.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,12 +74,17 @@ public override bool Equals(object? obj)
{
if (EDID == Null)
{
item = default!;
item = default;
return false;
}
// ToDo
// Improve to not be a forloop
var group = mod.GetTopLevelGroup<TMajor>();
var group = mod.TryGetTopLevelGroup<TMajor>();
if (group == null)
{
item = default;
return false;
}
foreach (var rec in group)
{
if (EDID.Type.Equals(rec.EditorID))
Expand All @@ -88,7 +93,7 @@ public override bool Equals(object? obj)
return true;
}
}
item = default!;
item = default;
return false;
}

Expand Down
76 changes: 76 additions & 0 deletions Mutagen.Bethesda.Core/Plugins/Extensions/IModExt.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
using Mutagen.Bethesda.Plugins.Records;

namespace Mutagen.Bethesda;

public static class IModExt
{

/// <summary>
/// Returns the top-level Group getter object associated with the given Major Record Type.
/// </summary>
/// <returns>Group getter object associated with the given Major Record Type</returns>
/// <typeparam name="TMajor">The type of Major Record to get the Group for</typeparam>
/// <exception cref="ArgumentException">
/// An unexpected TMajor type will throw an exception.<br />
/// Unexpected types include: <br />
/// - Major Record Types that are not part of this game type. (Querying for Oblivion records on a Skyrim mod) <br />
/// - Nested types, where there is not just one top level group that contains given type (Placed Objects) <br />
/// - A setter type is requested from a getter only object. <br />
/// </exception>
public static IGroupGetter<TMajor> GetTopLevelGroup<TMajor>(this IModGetter mod)
where TMajor : IMajorRecordGetter
{
return mod.TryGetTopLevelGroup<TMajor>() ?? throw new ArgumentException($"Unknown major record type: {typeof(TMajor)}");
}

/// <summary>
/// Returns the top-level Group getter object associated with the given Major Record Type.
/// </summary>
/// <returns>Group getter object associated with the given Major Record Type</returns>
/// <param name="type">The type of Major Record to get the Group for</param>
/// <exception cref="ArgumentException">
/// An unexpected TMajor type will throw an exception.<br />
/// Unexpected types include: <br />
/// - Major Record Types that are not part of this game type. (Querying for Oblivion records on a Skyrim mod) <br />
/// - Nested types, where there is not just one top level group that contains given type (Placed Objects) <br />
/// - A setter type is requested from a getter only object. <br />
/// </exception>
public static IGroupGetter GetTopLevelGroup(this IModGetter mod, Type type)
{
return mod.TryGetTopLevelGroup(type) ?? throw new ArgumentException($"Unknown major record type: {type}");
}

/// <summary>
/// Returns the Group object associated with the given Major Record Type.
/// </summary>
/// <returns>Group object associated with the given Major Record Type</returns>
/// <typeparam name="TMajor">The type of Major Record to get the Group for</typeparam>
/// <exception cref="ArgumentException">
/// An unexpected TMajor type will throw an exception.
/// Unexpected types include:
/// - Major Record Types that are not part of this game type. (Querying for Oblivion records on a Skyrim mod)
/// - A setter type is requested from a getter only object.
/// </exception>
public static IGroup<TMajor> GetTopLevelGroup<TMajor>(this IMod mod)
where TMajor : IMajorRecord
{
return mod.TryGetTopLevelGroup<TMajor>() ?? throw new ArgumentException($"Unknown major record type: {typeof(TMajor)}");
}

/// <summary>
/// Returns the top-level Group getter object associated with the given Major Record Type.
/// </summary>
/// <returns>Group getter object associated with the given Major Record Type</returns>
/// <param name="type">The type of Major Record to get the Group for</param>
/// <exception cref="ArgumentException">
/// An unexpected TMajor type will throw an exception.<br />
/// Unexpected types include: <br />
/// - Major Record Types that are not part of this game type. (Querying for Oblivion records on a Skyrim mod) <br />
/// - Nested types, where there is not just one top level group that contains given type (Placed Objects) <br />
/// - A setter type is requested from a getter only object. <br />
/// </exception>
public static IGroup GetTopLevelGroup(this IMod mod, Type type)
{
return mod.TryGetTopLevelGroup(type) ?? throw new ArgumentException($"Unknown major record type: {type}");
}
}
8 changes: 4 additions & 4 deletions Mutagen.Bethesda.Core/Plugins/Records/AMod.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,11 @@ public AMod(ModKey modKey)
public abstract bool CanUseLocalization { get; }
public abstract bool UsingLocalization { get; set; }
bool IModGetter.UsingLocalization => throw new NotImplementedException();
IGroup<T> IMod.GetTopLevelGroup<T>() => throw new NotImplementedException();
IGroup IMod.GetTopLevelGroup(Type t) => throw new NotImplementedException();
IGroup<T>? IMod.TryGetTopLevelGroup<T>() => throw new NotImplementedException();
IGroup? IMod.TryGetTopLevelGroup(Type t) => throw new NotImplementedException();
public abstract void SyncRecordCount();
IGroupGetter<T> IModGetter.GetTopLevelGroup<T>() => throw new NotImplementedException();
IGroupGetter IModGetter.GetTopLevelGroup(Type type) => throw new NotImplementedException();
IGroupGetter<T>? IModGetter.TryGetTopLevelGroup<T>() => throw new NotImplementedException();
IGroupGetter? IModGetter.TryGetTopLevelGroup(Type type) => throw new NotImplementedException();
void IModGetter.WriteToBinary(FilePath path, BinaryWriteParameters? param, IFileSystem? fileSystem) => throw new NotImplementedException();
void IModGetter.WriteToBinaryParallel(FilePath path, BinaryWriteParameters? param, IFileSystem? fileSystem, ParallelWriteParameters? parallelWriteParameters) => throw new NotImplementedException();
IEnumerable<T> IMajorRecordEnumerable.EnumerateMajorRecords<T>(bool throwIfUnknown) => throw new NotImplementedException();
Expand Down

0 comments on commit fe9e2f9

Please sign in to comment.