@@ -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