diff options
author | Matthew Leibowitz <mattleibow@live.com> | 2016-04-01 06:13:46 +0300 |
---|---|---|
committer | Matthew Leibowitz <mattleibow@live.com> | 2016-04-01 06:13:46 +0300 |
commit | 3abbe5b7e6cb6fed2cd1f85598ccd5d5f63a3bda (patch) | |
tree | 23e70ef63a3c0f219234ad46057ea87c29645b89 /mcs/class/Mono.Options | |
parent | b129b29d4d0fdcfcfa644420d670d5d34d60e790 (diff) |
[Mono.Options] Added support for Enums in the PCL version
- Support for String to Enum
- Support for Number to Enum
- Support for Flags to Enum
- Added a UnitTest
Diffstat (limited to 'mcs/class/Mono.Options')
-rw-r--r-- | mcs/class/Mono.Options/Mono.Options/Options.cs | 5 | ||||
-rw-r--r-- | mcs/class/Mono.Options/Test/Mono.Options/OptionSetTest.cs | 20 |
2 files changed, 24 insertions, 1 deletions
diff --git a/mcs/class/Mono.Options/Mono.Options/Options.cs b/mcs/class/Mono.Options/Mono.Options/Options.cs index 23ee99324e8..05810c39481 100644 --- a/mcs/class/Mono.Options/Mono.Options/Options.cs +++ b/mcs/class/Mono.Options/Mono.Options/Options.cs @@ -477,7 +477,10 @@ namespace Mono.Options try { if (value != null) { #if PCL - t = (T) Convert.ChangeType (value, targetType); + if (targetType.GetTypeInfo ().IsEnum) + t = (T) Enum.Parse (targetType, value, true); + else + t = (T) Convert.ChangeType (value, targetType); #else TypeConverter conv = TypeDescriptor.GetConverter (targetType); t = (T) conv.ConvertFromString (value); diff --git a/mcs/class/Mono.Options/Test/Mono.Options/OptionSetTest.cs b/mcs/class/Mono.Options/Test/Mono.Options/OptionSetTest.cs index a66f2784989..572223ebd66 100644 --- a/mcs/class/Mono.Options/Test/Mono.Options/OptionSetTest.cs +++ b/mcs/class/Mono.Options/Test/Mono.Options/OptionSetTest.cs @@ -270,6 +270,26 @@ namespace MonoTests.Mono.Options } [Test] + public void EnumValues () + { + DayOfWeek a = 0; + OptionSet p = new OptionSet () { + { "a=", (DayOfWeek v) => a = v }, + }; + p.Parse (_ ("-a=Monday")); + Assert.AreEqual (a, DayOfWeek.Monday); + p.Parse (_ ("-a=tuesday")); + Assert.AreEqual (a, DayOfWeek.Tuesday); + p.Parse (_ ("-a=3")); + Assert.AreEqual (a, DayOfWeek.Wednesday); + p.Parse (_ ("-a=Monday,Tuesday")); + Assert.AreEqual (a, DayOfWeek.Monday | DayOfWeek.Tuesday); + Utils.AssertException (typeof (OptionException), + "Could not convert string `Noday' to type DayOfWeek for option `-a'.", + p, v => { v.Parse (_ ("-a=Noday")); }); + } + + [Test] public void BooleanValues () { bool a = false; |