@@ -708,6 +708,61 @@ static MethodInfo GetMethod(string name) => typeof(EnumMethods).GetMethod(
708
708
name , BindingFlags . Public | BindingFlags . Static ) ! ;
709
709
}
710
710
711
+ [ Fact ]
712
+ public static void InvokeNullableEnumParameterDefaultNo ( )
713
+ {
714
+ MethodInfo method = typeof ( EnumMethods ) . GetMethod ( "NullableEnumDefaultNo" , BindingFlags . Static | BindingFlags . NonPublic ) ;
715
+
716
+ Assert . Null ( method . Invoke ( null , new object ? [ ] { default ( object ) } ) ) ;
717
+ Assert . Equal ( YesNo . No , method . Invoke ( null , new object ? [ ] { YesNo . No } ) ) ;
718
+ Assert . Equal ( YesNo . Yes , method . Invoke ( null , new object ? [ ] { YesNo . Yes } ) ) ;
719
+ Assert . Equal ( YesNo . No , method . Invoke ( null , new object ? [ ] { Type . Missing } ) ) ;
720
+ }
721
+
722
+ [ Fact ]
723
+ public static void InvokeNullableEnumParameterDefaultYes ( )
724
+ {
725
+ MethodInfo method = typeof ( EnumMethods ) . GetMethod ( "NullableEnumDefaultYes" , BindingFlags . Static | BindingFlags . NonPublic ) ;
726
+
727
+ Assert . Null ( method . Invoke ( null , new object ? [ ] { default ( object ) } ) ) ;
728
+ Assert . Equal ( YesNo . No , method . Invoke ( null , new object ? [ ] { YesNo . No } ) ) ;
729
+ Assert . Equal ( YesNo . Yes , method . Invoke ( null , new object ? [ ] { YesNo . Yes } ) ) ;
730
+ Assert . Equal ( YesNo . Yes , method . Invoke ( null , new object ? [ ] { Type . Missing } ) ) ;
731
+ }
732
+
733
+ [ Fact ]
734
+ public static void InvokeNonNullableEnumParameterDefaultYes ( )
735
+ {
736
+ MethodInfo method = typeof ( EnumMethods ) . GetMethod ( "NonNullableEnumDefaultYes" , BindingFlags . Static | BindingFlags . NonPublic ) ;
737
+
738
+ Assert . Equal ( YesNo . No , method . Invoke ( null , new object [ ] { default ( object ) } ) ) ;
739
+ Assert . Equal ( YesNo . No , method . Invoke ( null , new object [ ] { YesNo . No } ) ) ;
740
+ Assert . Equal ( YesNo . Yes , method . Invoke ( null , new object [ ] { YesNo . Yes } ) ) ;
741
+ Assert . Equal ( YesNo . Yes , method . Invoke ( null , new object [ ] { Type . Missing } ) ) ;
742
+ }
743
+
744
+ [ Fact ]
745
+ public static void InvokeNullableEnumParameterDefaultNull ( )
746
+ {
747
+ MethodInfo method = typeof ( EnumMethods ) . GetMethod ( "NullableEnumDefaultNull" , BindingFlags . Static | BindingFlags . NonPublic ) ;
748
+
749
+ Assert . Null ( method . Invoke ( null , new object ? [ ] { default ( object ) } ) ) ;
750
+ Assert . Equal ( YesNo . No , method . Invoke ( null , new object ? [ ] { YesNo . No } ) ) ;
751
+ Assert . Equal ( YesNo . Yes , method . Invoke ( null , new object ? [ ] { YesNo . Yes } ) ) ;
752
+ Assert . Null ( method . Invoke ( null , new object ? [ ] { Type . Missing } ) ) ;
753
+ }
754
+
755
+ [ Fact ]
756
+ public static void InvokeNullableEnumParameterNoDefault ( )
757
+ {
758
+ MethodInfo method = typeof ( EnumMethods ) . GetMethod ( "NullableEnumNoDefault" , BindingFlags . Static | BindingFlags . NonPublic ) ;
759
+
760
+ Assert . Null ( method . Invoke ( null , new object ? [ ] { default ( object ) } ) ) ;
761
+ Assert . Equal ( YesNo . No , method . Invoke ( null , new object ? [ ] { YesNo . No } ) ) ;
762
+ Assert . Equal ( YesNo . Yes , method . Invoke ( null , new object ? [ ] { YesNo . Yes } ) ) ;
763
+ Assert . Throws < ArgumentException > ( ( ) => method . Invoke ( null , new object ? [ ] { Type . Missing } ) ) ;
764
+ }
765
+
711
766
[ Fact ]
712
767
public void ValueTypeMembers_WithOverrides ( )
713
768
{
@@ -1140,6 +1195,12 @@ public struct ValueTypeWithoutOverrides
1140
1195
public int GetId ( ) => Id ;
1141
1196
}
1142
1197
1198
+ public enum YesNo
1199
+ {
1200
+ No = 0 ,
1201
+ Yes = 1 ,
1202
+ }
1203
+
1143
1204
public static class EnumMethods
1144
1205
{
1145
1206
public static bool PassColorsInt ( ColorsInt color )
@@ -1153,6 +1214,31 @@ public static bool PassColorsShort(ColorsShort color)
1153
1214
Assert . Equal ( ColorsShort . Red , color ) ;
1154
1215
return true ;
1155
1216
}
1217
+
1218
+ static YesNo NonNullableEnumDefaultYes ( YesNo yesNo = YesNo . Yes )
1219
+ {
1220
+ return yesNo ;
1221
+ }
1222
+
1223
+ static YesNo ? NullableEnumDefaultNo ( YesNo ? yesNo = YesNo . No )
1224
+ {
1225
+ return yesNo ;
1226
+ }
1227
+
1228
+ static YesNo ? NullableEnumDefaultYes ( YesNo ? yesNo = YesNo . Yes )
1229
+ {
1230
+ return yesNo ;
1231
+ }
1232
+
1233
+ static YesNo ? NullableEnumDefaultNull ( YesNo ? yesNo = null )
1234
+ {
1235
+ return yesNo ;
1236
+ }
1237
+
1238
+ static YesNo ? NullableEnumNoDefault ( YesNo ? yesNo )
1239
+ {
1240
+ return yesNo ;
1241
+ }
1156
1242
}
1157
1243
#pragma warning restore 0414
1158
1244
}
0 commit comments