5 // Jonathan Pryor <jpryor@novell.com>
7 // Copyright (C) 2008 Novell (http://www.novell.com)
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
37 using NUnit.Framework;
40 namespace Tests.NDesk.Options
42 namespace MonoTests.Mono.Options
45 class DefaultOption : Option {
46 public DefaultOption (string prototypes, string description)
47 : base (prototypes, description)
51 public DefaultOption (string prototypes, string description, int c)
52 : base (prototypes, description, c)
56 protected override void OnParseComplete (OptionContext c)
58 throw new NotImplementedException ();
63 public class OptionTest {
65 public void Exceptions ()
68 Utils.AssertException (typeof(ArgumentNullException),
69 $"Value cannot be null.{Environment.NewLine}Parameter name: prototype",
70 p, v => { new DefaultOption (null, null); });
71 Utils.AssertException (typeof(ArgumentException),
72 $"Cannot be the empty string.{Environment.NewLine}Parameter name: prototype",
73 p, v => { new DefaultOption ("", null); });
74 Utils.AssertException (typeof(ArgumentException),
75 $"Empty option names are not supported.{Environment.NewLine}Parameter name: prototype",
76 p, v => { new DefaultOption ("a|b||c=", null); });
77 Utils.AssertException (typeof(ArgumentException),
78 $"Conflicting option types: '=' vs. ':'.{Environment.NewLine}Parameter name: prototype",
79 p, v => { new DefaultOption ("a=|b:", null); });
80 Utils.AssertException (typeof(ArgumentException),
81 $"The default option handler '<>' cannot require values.{Environment.NewLine}Parameter name: prototype",
82 p, v => { new DefaultOption ("<>=", null); });
83 Utils.AssertException (typeof(ArgumentException),
84 $"The default option handler '<>' cannot require values.{Environment.NewLine}Parameter name: prototype",
85 p, v => { new DefaultOption ("<>:", null); });
86 Utils.AssertException (null, null,
87 p, v => { new DefaultOption ("t|<>=", null, 1); });
88 Utils.AssertException (typeof(ArgumentException),
89 $"The default option handler '<>' cannot require values.{Environment.NewLine}Parameter name: prototype",
90 p, v => { new DefaultOption ("t|<>=", null, 2); });
91 Utils.AssertException (null, null,
92 p, v => { new DefaultOption ("a|b=", null, 2); });
93 Utils.AssertException (typeof(ArgumentOutOfRangeException),
94 $"Specified argument was out of the range of valid values.{Environment.NewLine}Parameter name: maxValueCount",
95 p, v => { new DefaultOption ("a", null, -1); });
96 Utils.AssertException (typeof(ArgumentException),
97 "Cannot provide maxValueCount of 0 for OptionValueType.Required or " +
98 $"OptionValueType.Optional.{Environment.NewLine}Parameter name: maxValueCount",
99 p, v => { new DefaultOption ("a=", null, 0); });
100 Utils.AssertException (typeof(ArgumentException),
101 "Ill-formed name/value separator found in \"a={\"." + Environment.NewLine + "Parameter name: prototype",
102 p, v => { new DefaultOption ("a={", null); });
103 Utils.AssertException (typeof(ArgumentException),
104 "Ill-formed name/value separator found in \"a=}\"." + Environment.NewLine + "Parameter name: prototype",
105 p, v => { new DefaultOption ("a=}", null); });
106 Utils.AssertException (typeof(ArgumentException),
107 "Ill-formed name/value separator found in \"a={{}}\"." + Environment.NewLine + "Parameter name: prototype",
108 p, v => { new DefaultOption ("a={{}}", null); });
109 Utils.AssertException (typeof(ArgumentException),
110 "Ill-formed name/value separator found in \"a={}}\"." + Environment.NewLine + "Parameter name: prototype",
111 p, v => { new DefaultOption ("a={}}", null); });
112 Utils.AssertException (typeof(ArgumentException),
113 "Ill-formed name/value separator found in \"a={}{\"." + Environment.NewLine + "Parameter name: prototype",
114 p, v => { new DefaultOption ("a={}{", null); });
115 Utils.AssertException (typeof(ArgumentException),
116 $"Cannot provide key/value separators for Options taking 1 value(s).{Environment.NewLine}Parameter name: prototype",
117 p, v => { new DefaultOption ("a==", null); });
118 Utils.AssertException (typeof(ArgumentException),
119 $"Cannot provide key/value separators for Options taking 1 value(s).{Environment.NewLine}Parameter name: prototype",
120 p, v => { new DefaultOption ("a={}", null); });
121 Utils.AssertException (typeof(ArgumentException),
122 $"Cannot provide key/value separators for Options taking 1 value(s).{Environment.NewLine}Parameter name: prototype",
123 p, v => { new DefaultOption ("a=+-*/", null); });
124 Utils.AssertException (null, null,
125 p, v => { new DefaultOption ("a", null, 0); });
126 Utils.AssertException (null, null,
127 p, v => { new DefaultOption ("a", null, 0); });
128 Utils.AssertException (null, null,
130 var d = new DefaultOption ("a", null);
131 Assert.AreEqual (d.GetValueSeparators ().Length, 0);
133 Utils.AssertException (null, null,
135 var d = new DefaultOption ("a=", null, 1);
136 string[] s = d.GetValueSeparators ();
137 Assert.AreEqual (s.Length, 0);
139 Utils.AssertException (null, null,
141 var d = new DefaultOption ("a=", null, 2);
142 string[] s = d.GetValueSeparators ();
143 Assert.AreEqual (s.Length, 2);
144 Assert.AreEqual (s [0], ":");
145 Assert.AreEqual (s [1], "=");
147 Utils.AssertException (null, null,
149 var d = new DefaultOption ("a={}", null, 2);
150 string[] s = d.GetValueSeparators ();
151 Assert.AreEqual (s.Length, 0);
153 Utils.AssertException (null, null,
155 var d = new DefaultOption ("a={-->}{=>}", null, 2);
156 string[] s = d.GetValueSeparators ();
157 Assert.AreEqual (s.Length, 2);
158 Assert.AreEqual (s [0], "-->");
159 Assert.AreEqual (s [1], "=>");
161 Utils.AssertException (null, null,
163 var d = new DefaultOption ("a=+-*/", null, 2);
164 string[] s = d.GetValueSeparators ();
165 Assert.AreEqual (s.Length, 4);
166 Assert.AreEqual (s [0], "+");
167 Assert.AreEqual (s [1], "-");
168 Assert.AreEqual (s [2], "*");
169 Assert.AreEqual (s [3], "/");