* Mono.Options/Options.cs: Don't overly split option values, only split
authorJonathan Pryor <jpryor@novell.com>
Tue, 8 Jun 2010 17:01:47 +0000 (17:01 -0000)
committerJonathan Pryor <jpryor@novell.com>
Tue, 8 Jun 2010 17:01:47 +0000 (17:01 -0000)
  to obtain the maximum number of desired values.  This better supports
  e.g. DOS paths in multi-value values, e.g. '-DPATH=C:\tmp' would now
  create the values {"PATH", "C:\tmp"} instead of {"PATH", "C", "\tmp"}.
* Test/Mono.Options/OptionSetTest.cs: Add tests for constrained value
  splitting.

svn path=/trunk/mcs/; revision=158672

mcs/class/Mono.Options/Mono.Options/ChangeLog
mcs/class/Mono.Options/Mono.Options/Options.cs
mcs/class/Mono.Options/Test/Mono.Options/ChangeLog
mcs/class/Mono.Options/Test/Mono.Options/OptionSetTest.cs

index c93e63dd538860d1a4f34d94688f21bb055c60c0..d62c6e6f1f91fbbca83a9bb929e3cc7c25e857c2 100644 (file)
@@ -1,3 +1,10 @@
+2010-06-08  Jonathan Pryor  <jpryor@novell.com>
+
+       * Options.cs: Don't overly split option values, only split to obtain
+         the maximum number of desired values.  This better supports e.g. DOS
+         paths in multi-value values, e.g. '-DPATH=C:\tmp' would now create
+         the values {"PATH", "C:\tmp"} instead of {"PATH", "C", "\tmp"}.
+
 2009-04-18  Jonathan Pryor  <jpryor@novell.com>
 
        * Options.cs: "Code sharing": Use StringCodea.WrappedLines() from
index d8e65f303b97c31a2e886a0f1d16869386d2734c..7601f515578ac582e238b20270e726ae125f314e 100644 (file)
@@ -913,7 +913,7 @@ namespace Mono.Options
                {
                        if (option != null)
                                foreach (string o in c.Option.ValueSeparators != null 
-                                               ? option.Split (c.Option.ValueSeparators, StringSplitOptions.None)
+                                               ? option.Split (c.Option.ValueSeparators, c.Option.MaxValueCount - c.OptionValues.Count, StringSplitOptions.None)
                                                : new string[]{option}) {
                                        c.OptionValues.Add (o);
                                }
index 8a3bd2c3f1ed888a4e6bbbe5ca4bc7798bc0d97e..f28952e68447dd4cb21bc92430d08a8ac090c4b8 100644 (file)
@@ -1,3 +1,7 @@
+2010-06-08  Jonathan Pryor  <jpryor@novell.com>
+
+       * OptionSetTest.cs: Add tests for constrained value splitting.
+
 2008-04-18  Jonathan Pryor  <jpryor@novell.com>
 
        * OptionSetTest.cs: Update WriteOptionDescriptions() for new, 
index d03fc5888987fd85dcfddec3b65c8d36498b5a5f..c69535844f43a4649cbea7136d6f1a8e382a1e91 100644 (file)
@@ -393,11 +393,11 @@ namespace Tests.Mono.Options
                                { "e={}", (k, v) => a.Add (k, v) },
                                { "f=+/", (k, v) => a.Add (k, v) },
                        };
-                       p.Parse (_("-a", "A", "B", "-a", "C", "D", "-a=E=F", "-a:G:H", "-aI=J", "-b", "1", "a", "-b", "2", "b"));
+                       p.Parse (_("-a", "A", @"C:\tmp", "-a", "C=D", @"-a=E=F:\tmp", "-a:G:H", "-aI=J", "-b", "1", "a", "-b", "2", "b"));
                        AssertDictionary (a, 
-                                       "A", "B", 
+                                       "A", @"C:\tmp", 
                                        "C", "D", 
-                                       "E", "F", 
+                                       "E", @"F:\tmp", 
                                        "G", "H", 
                                        "I", "J");
                        AssertDictionary (b,
@@ -481,29 +481,29 @@ namespace Tests.Mono.Options
                                new CustomOption ("a==:", null, 2, v => a.Add (v [0], v [1])),
                                new CustomOption ("b==:", null, 3, v => b.Add (v [0], new string[]{v [1], v [2]})),
                        };
-                       p.Parse (_("-a=b=c", "-a=d", "e", "-a:f=g", "-a:h:i", "-a", "j=k", "-a", "l:m"));
+                       p.Parse (_(@"-a=b=C:\tmp", "-a=d", @"C:\e", @"-a:f=C:\g", @"-a:h:C:\i", "-a", @"j=C:\k", "-a", @"l:C:\m"));
                        Assert.AreEqual (a.Count, 6);
-                       Assert.AreEqual (a ["b"], "c");
-                       Assert.AreEqual (a ["d"], "e");
-                       Assert.AreEqual (a ["f"], "g");
-                       Assert.AreEqual (a ["h"], "i");
-                       Assert.AreEqual (a ["j"], "k");
-                       Assert.AreEqual (a ["l"], "m");
+                       Assert.AreEqual (a ["b"], @"C:\tmp");
+                       Assert.AreEqual (a ["d"], @"C:\e");
+                       Assert.AreEqual (a ["f"], @"C:\g");
+                       Assert.AreEqual (a ["h"], @"C:\i");
+                       Assert.AreEqual (a ["j"], @"C:\k");
+                       Assert.AreEqual (a ["l"], @"C:\m");
 
                        Utils.AssertException (typeof(OptionException),
                                        "Missing required value for option '-a'.",
                                        p, v => {v.Parse (_("-a=b"));});
 
-                       p.Parse (_("-b", "a", "b", "c", "-b:d:e:f", "-b=g=h:i", "-b:j=k:l"));
+                       p.Parse (_("-b", "a", "b", @"C:\tmp", @"-b:d:e:F:\tmp", @"-b=g=h:i:\tmp", @"-b:j=k:l:\tmp"));
                        Assert.AreEqual (b.Count, 4);
                        Assert.AreEqual (b ["a"][0], "b");
-                       Assert.AreEqual (b ["a"][1], "c");
+                       Assert.AreEqual (b ["a"][1], @"C:\tmp");
                        Assert.AreEqual (b ["d"][0], "e");
-                       Assert.AreEqual (b ["d"][1], "f");
+                       Assert.AreEqual (b ["d"][1], @"F:\tmp");
                        Assert.AreEqual (b ["g"][0], "h");
-                       Assert.AreEqual (b ["g"][1], "i");
+                       Assert.AreEqual (b ["g"][1], @"i:\tmp");
                        Assert.AreEqual (b ["j"][0], "k");
-                       Assert.AreEqual (b ["j"][1], "l");
+                       Assert.AreEqual (b ["j"][1], @"l:\tmp");
                }
 
                [Test]