Skip to content

Commit

Permalink
Write a bunch of code to make tests pass
Browse files Browse the repository at this point in the history
  • Loading branch information
henbagle committed Dec 10, 2023
1 parent 734363a commit 4ead59f
Show file tree
Hide file tree
Showing 13 changed files with 129 additions and 57 deletions.
36 changes: 36 additions & 0 deletions ME3Tweaks.Wwiser.Tests/ActionTests/PlayTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using ME3Tweaks.Wwiser.Model.Action;
using ME3Tweaks.Wwiser.Model.RTPC;
using Action = ME3Tweaks.Wwiser.Model.Hierarchy.Action;

namespace ME3Tweaks.Wwiser.Tests.ActionTests;

public class PlayTests
{
[Test]
public void Play_V134_Parses()
{
var data = TestData.GetTestDataBytes(@"Action",@"Play_v134.bin");
var (_, result) = TestHelpers.Deserialize<Action>(data, 134);

Assert.Multiple(() =>
{
Assert.That(result.Type.Value, Is.EqualTo(ActionTypeValue.Play));
Assert.That(result.IsBus, Is.EqualTo(false));
Assert.That(result.ActionParams, Is.InstanceOf<Play>());
var play = result.ActionParams as Play;
Assert.That(play!.Params.CurveInterpolation, Is.EqualTo(CurveInterpolation.Linear));
});
}

[TestCase("Play_V134.bin", 134)]
[TestCase("Play_V56.bin", 56)]
public void Play_Reserializes(string file, int version)
{
var data = TestData.GetTestDataBytes(@"Action",file);
var (_, result) = TestHelpers.Deserialize<Action>(data, version);

var reserialized = TestHelpers.Serialize(result, version);
Assert.That(reserialized, Is.EqualTo(data));
}
}
Binary file not shown.
Binary file added ME3Tweaks.Wwiser.Tests/TestData/Action/Play_V56.bin
Binary file not shown.
18 changes: 4 additions & 14 deletions ME3Tweaks.Wwiser/Model/Action/ActionParamsFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,28 +6,18 @@ namespace ME3Tweaks.Wwiser.Model.Action;

public class ActionParamsFactory : ISubtypeFactory
{
private static readonly Dictionary<Type, ActionTypeValue> TypeToEnum = new()
{
{ typeof(Play), ActionTypeValue.Play},
};

public bool TryGetKey(Type valueType, [UnscopedRef] out object key)
{
if (TypeToEnum.TryGetValue(valueType, out var value))
{
key = value;
return true;
}

// fallback
key = ActionTypeValue.Play;
return false;
throw new NotImplementedException();
}

public bool TryGetType(object key, [UnscopedRef] out Type type)
{
type = (ActionTypeValue)key switch
{
ActionTypeValue.Stop => typeof(Active),
ActionTypeValue.Pause => typeof(Active),
ActionTypeValue.Resume => typeof(Active),
ActionTypeValue.Play => typeof(Play),
_ => typeof(Play)
};
Expand Down
23 changes: 23 additions & 0 deletions ME3Tweaks.Wwiser/Model/Action/ActionSpecificParamsFactory.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using System.Diagnostics.CodeAnalysis;
using BinarySerialization;
using ME3Tweaks.Wwiser.Model.Hierarchy;

namespace ME3Tweaks.Wwiser.Model.Action;

public class ActionSpecificParamsFactory : ISubtypeFactory
{
public bool TryGetKey(Type valueType, [UnscopedRef] out object key)
{
throw new NotImplementedException();
}

public bool TryGetType(object key, [UnscopedRef] out Type type)
{
type = (ActionTypeValue)key switch
{
ActionTypeValue.Play => typeof(Specific.Action),
_ => typeof(Play)
};
return true;
}
}
14 changes: 14 additions & 0 deletions ME3Tweaks.Wwiser/Model/Action/Active.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using BinarySerialization;
using ME3Tweaks.Wwiser.Attributes;

namespace ME3Tweaks.Wwiser.Model.Action;

public class Active : IActionParams
{
[FieldOrder(1)]
[SerializeWhenVersion(56, ComparisonOperator.LessThanOrEqual)]
public uint SubSectionSize { get; set; }

[FieldOrder(2)]
public required ActiveParams Params { get; set; }
}
36 changes: 36 additions & 0 deletions ME3Tweaks.Wwiser/Model/Action/ActiveParams.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using BinarySerialization;
using ME3Tweaks.Wwiser.Attributes;
using ME3Tweaks.Wwiser.Model.Action.Specific;
using ME3Tweaks.Wwiser.Model.RTPC;

namespace ME3Tweaks.Wwiser.Model.Action;

public class ActiveParams
{
[FieldOrder(0)]
[SerializeWhenVersion(56, ComparisonOperator.LessThanOrEqual)]
public int Time { get; set; }

[FieldOrder(1)]
[SerializeWhenVersion(56, ComparisonOperator.LessThanOrEqual)]
public int TimeMin { get; set; }

[FieldOrder(2)]
[SerializeWhenVersion(56, ComparisonOperator.LessThanOrEqual)]
public int TimeMax { get; set; }

[FieldOrder(3)]
[SerializeAs(SerializedType.UInt1)]
public CurveInterpolation CurveInterpolation { get; set; }

[FieldOrder(4)]
[SerializeWhenVersion(56, ComparisonOperator.LessThanOrEqual)]
[SubtypeFactory($"{nameof(Hierarchy.Action.Type)}.{nameof(Hierarchy.Action.Type.Value)}",
typeof(ActionSpecificParamsFactory), BindingMode = BindingMode.OneWay,
AncestorType = typeof(Hierarchy.Action), RelativeSourceMode = RelativeSourceMode.FindAncestor)]
public required ISpecificParams SpecificParams { get; set; }

[FieldOrder(5)]
[SerializeWhenVersion(56, ComparisonOperator.LessThanOrEqual)]
public ExceptParams ExceptParams { get; set; } = new();
}
4 changes: 2 additions & 2 deletions ME3Tweaks.Wwiser/Model/Action/ExceptParams.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ namespace ME3Tweaks.Wwiser.Model.Action;

public class ExceptParams
{
[FieldOrder(0)]
public VarCount ExceptionCount { get; set; }
[FieldOrder(0)]
public VarCount ExceptionCount { get; set; } = new();

[FieldOrder(1)]
[FieldCount($"{nameof(ExceptionCount)}.{nameof(ExceptionCount.Value)}")]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
namespace ME3Tweaks.Wwiser.Model.Action;

public class ActionParams
{

}
public interface IActionParams;
29 changes: 3 additions & 26 deletions ME3Tweaks.Wwiser/Model/Action/Play.cs
Original file line number Diff line number Diff line change
@@ -1,40 +1,17 @@
using BinarySerialization;
using ME3Tweaks.Wwiser.Attributes;
using ME3Tweaks.Wwiser.Model.Action.Specific;
using ME3Tweaks.Wwiser.Model.RTPC;

namespace ME3Tweaks.Wwiser.Model.Action;

public class Play : ActionParams
public class Play : Active
{
[FieldOrder(0)]
[SerializeWhenVersion(56, ComparisonOperator.LessThanOrEqual)]
public int Time { get; set; }

[FieldOrder(1)]
[SerializeWhenVersion(56, ComparisonOperator.LessThanOrEqual)]
public int TimeMin { get; set; }

[FieldOrder(2)]
[SerializeWhenVersion(56, ComparisonOperator.LessThanOrEqual)]
public int TimeMax { get; set; }

[FieldOrder(3)]
[SerializeAs(SerializedType.UInt1)]
public CurveInterpolation CurveInterpolation { get; set; }

[FieldOrder(4)]
[SerializeWhenVersion(56, ComparisonOperator.LessThanOrEqual)]
public SpecificParams SpecificParams { get; set; }

[FieldOrder(5)]
[SerializeWhenVersion(56, ComparisonOperator.LessThanOrEqual)]
public ExceptParams ExceptParams { get; set; }

[FieldOrder(6)]
[SerializeWhenVersion(26, ComparisonOperator.GreaterThan)]
public uint BankId { get; set; }

[FieldOrder(7)]
[FieldOrder(2)]
[SerializeWhenVersion(144, ComparisonOperator.GreaterThanOrEqual)]
public uint BankType { get; set; }
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
using BinarySerialization;
using ME3Tweaks.Wwiser.Attributes;

namespace ME3Tweaks.Wwiser.Model.Action;
namespace ME3Tweaks.Wwiser.Model.Action.Specific;

public class SpecificParams
public class Action : ISpecificParams
{
[FieldOrder(0)]
[FieldLength(0x10)]
Expand Down
3 changes: 3 additions & 0 deletions ME3Tweaks.Wwiser/Model/Action/Specific/ISpecificParams.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
namespace ME3Tweaks.Wwiser.Model.Action.Specific;

public interface ISpecificParams;
14 changes: 5 additions & 9 deletions ME3Tweaks.Wwiser/Model/Hierarchy/Action.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,20 +26,16 @@ public class Action : HircItem
public int DelayMax { get; set; }

[FieldOrder(5)]
[SerializeWhenVersion(56, ComparisonOperator.LessThanOrEqual)]
public uint SubSectionSize { get; set; } // TODO: this needs to go away

[FieldOrder(6)]
[SerializeWhenVersion(65, ComparisonOperator.GreaterThan)]
[SerializeAs(SerializedType.UInt1)]
public bool IsBus { get; set; }

[FieldOrder(7)]
[FieldOrder(6)]
[SerializeWhenVersion(56, ComparisonOperator.GreaterThan)]
public InitialParamsV62 PropBundle { get; set; } = new();

[FieldOrder(8)]
[FieldLength(nameof(SubSectionSize))]
[SubtypeFactory($"{nameof(Type)}.{nameof(Type.Value)}", typeof(ActionParamsFactory))]
public ActionParams ActionParams { get; set; } = new();
[FieldOrder(7)]
[SubtypeFactory($"{nameof(Type)}.{nameof(Type.Value)}", typeof(ActionParamsFactory),
BindingMode = BindingMode.OneWay)]
public required IActionParams ActionParams { get; set; }
}

0 comments on commit 4ead59f

Please sign in to comment.