Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Leibowitz <mattleibow@live.com>2016-04-01 06:13:46 +0300
committerMatthew Leibowitz <mattleibow@live.com>2016-04-01 06:13:46 +0300
commit3abbe5b7e6cb6fed2cd1f85598ccd5d5f63a3bda (patch)
tree23e70ef63a3c0f219234ad46057ea87c29645b89 /mcs/class/Mono.Options
parentb129b29d4d0fdcfcfa644420d670d5d34d60e790 (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.cs5
-rw-r--r--mcs/class/Mono.Options/Test/Mono.Options/OptionSetTest.cs20
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;