Skip to content

Commit 43e380c

Browse files
committed
ListOfStringsToEnumConverterTestClass_ReadJson_TestFlagWithoutZeroEnum_EvaluatesToZero Test
Adds a test that ensures Flags can have their value set to 0, even if the Enum does not contain 0 as an explicit value.
1 parent 805fadb commit 43e380c

File tree

1 file changed

+42
-8
lines changed

1 file changed

+42
-8
lines changed

Assets/Tests/PlayMode/Config/JsonConverters/ListOfStringsToEnumConverterTests.cs

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ namespace PlayEveryWare.EpicOnlineServices.Tests.Config
3030
using Newtonsoft.Json.Linq;
3131
public static partial class ListOfStringsToEnumConverterTests
3232
{
33-
private static readonly Dictionary<string, TestOrderEnum> CUSTOM_MAPPING = new()
33+
private static readonly Dictionary<string, TestOrderEnum> TESTORDERENUM_CUSTOM_MAPPING = new()
3434
{
3535
{ "FirstLetter", TestOrderEnum.A },
3636
{ "SecondLetter", TestOrderEnum.B },
@@ -47,18 +47,38 @@ private enum TestOrderEnum : int
4747
C = 0x00008
4848
}
4949

50-
private class ListOfStringsToEnumConverterTestClass : ListOfStringsToEnumConverter<TestOrderEnum>
50+
/// <summary>
51+
/// This Enum is explicitly marked as a flag, and lacks a "0" value.
52+
/// There are Flags inside the EOS SDK C# that do not set a "0".
53+
/// <seealso cref="Epic.OnlineServices.IntegratedPlatform.IntegratedPlatformManagementFlags"/>
54+
/// </summary>
55+
[Flags]
56+
private enum TestFlagWithoutZeroEnum : int
5157
{
52-
protected override TestOrderEnum FromStringArray(JArray array)
58+
A = 0x00001,
59+
B = 0x00002,
60+
C = 0x00004
61+
}
62+
63+
private class ListOfStringsToEnumConverterTestClass<TEnum> : ListOfStringsToEnumConverter<TEnum> where TEnum : struct, Enum
64+
{
65+
private readonly Dictionary<string, TEnum> mappings;
66+
67+
public ListOfStringsToEnumConverterTestClass(Dictionary<string, TEnum> inMappings)
5368
{
54-
return FromStringArrayWithCustomMapping(array, CUSTOM_MAPPING);
69+
mappings = inMappings;
70+
}
71+
72+
protected override TEnum FromStringArray(JArray array)
73+
{
74+
return FromStringArrayWithCustomMapping(array, mappings);
5575
}
5676
}
5777

5878
[Test]
5979
public static void ListOfStringsToEnumConverterTestClass_ReadJson_ArrayOfStrings_ReturnsCorrectEnum()
6080
{
61-
var converter = new ListOfStringsToEnumConverterTestClass();
81+
var converter = new ListOfStringsToEnumConverterTestClass<TestOrderEnum>(TESTORDERENUM_CUSTOM_MAPPING);
6282
var json = JArray.FromObject(new[] { "FirstLetter", "ThirdLetter", "B" });
6383
var result = (TestOrderEnum)converter.ReadJson(json.CreateReader(), typeof(InputStateButtonFlags), null, null);
6484

@@ -68,7 +88,7 @@ public static void ListOfStringsToEnumConverterTestClass_ReadJson_ArrayOfStrings
6888
[Test]
6989
public static void ListOfStringsToEnumConverterTestClass_ReadJson_SingleString_ReturnsCorrectEnum()
7090
{
71-
var converter = new ListOfStringsToEnumConverterTestClass();
91+
var converter = new ListOfStringsToEnumConverterTestClass<TestOrderEnum>(TESTORDERENUM_CUSTOM_MAPPING);
7292
var json = JToken.FromObject("A");
7393
var result = (TestOrderEnum)converter.ReadJson(json.CreateReader(), typeof(InputStateButtonFlags), null, null);
7494

@@ -78,7 +98,7 @@ public static void ListOfStringsToEnumConverterTestClass_ReadJson_SingleString_R
7898
[Test]
7999
public static void ListOfStringsToEnumConverterTestClass_ReadJson_Null_ReturnsDefaultEnum()
80100
{
81-
var converter = new ListOfStringsToEnumConverterTestClass();
101+
var converter = new ListOfStringsToEnumConverterTestClass<TestOrderEnum>(TESTORDERENUM_CUSTOM_MAPPING);
82102
var result = (TestOrderEnum)converter.ReadJson(new JValue((string)null).CreateReader(), typeof(InputStateButtonFlags), null, null);
83103

84104
Assert.AreEqual(TestOrderEnum.None, result);
@@ -87,11 +107,25 @@ public static void ListOfStringsToEnumConverterTestClass_ReadJson_Null_ReturnsDe
87107
[Test]
88108
public static void ListOfStringsToEnumConverterTestClass_ReadJson_InvalidTokenType_ThrowsException()
89109
{
90-
var converter = new ListOfStringsToEnumConverterTestClass();
110+
var converter = new ListOfStringsToEnumConverterTestClass<TestOrderEnum>(TESTORDERENUM_CUSTOM_MAPPING);
91111
var invalidJson = JToken.FromObject(123); // Invalid type for enum parsing
92112

93113
Assert.Throws<JsonSerializationException>(() => converter.ReadJson(invalidJson.CreateReader(), typeof(TestOrderEnum), null, null));
94114
}
95115

116+
/// <summary>
117+
/// Converts a '0' into <see cref="TestFlagWithoutZeroEnum"/> using the <see cref="ListOfStringsToEnumConverterTestClass"/>.
118+
/// Even though <see cref="TestFlagWithoutZeroEnum"/> lacks a 0, it is a Flag enum.
119+
/// The resulting value should be equivalent to a '0' integer, as opposed to using the lowest value.
120+
/// </summary>
121+
[Test]
122+
public static void ListOfStringsToEnumConverterTestClass_ReadJson_TestFlagWithoutZeroEnum_EvaluatesToZero()
123+
{
124+
var converter = new ListOfStringsToEnumConverterTestClass<TestFlagWithoutZeroEnum>(null);
125+
var json = JToken.FromObject(0);
126+
var result = (TestFlagWithoutZeroEnum)converter.ReadJson(json.CreateReader(), typeof(TestFlagWithoutZeroEnum), null, null);
127+
128+
Assert.AreEqual((TestFlagWithoutZeroEnum)0, result);
129+
}
96130
}
97131
}

0 commit comments

Comments
 (0)