@@ -62,6 +62,110 @@ private val oneArgName = listOf("ARG_NAME")
6262
6363abstract class Test (body : () -> Unit ) : FunSpec({ test(this::class.qualifiedName!!, body) })
6464
65+ class OptionNameValidationTest : Test ({
66+ val parser = parserOf()
67+
68+ // These are all acceptable.
69+ parser.option<Int >("-x", errorName = "", help = TEST_HELP ) { 0 }
70+ parser.option<Int >("--x", errorName = "", help = TEST_HELP ) { 0 }
71+ parser.option<Int >("--xy", errorName = "", help = TEST_HELP ) { 0 }
72+ parser.option<Int >("-X ", errorName = "", help = TEST_HELP ) { 0 }
73+ parser.option<Int >("--X ", errorName = "", help = TEST_HELP ) { 0 }
74+ parser.option<Int >("--XY ", errorName = "", help = TEST_HELP ) { 0 }
75+ parser.option<Int >("--X -Y ", errorName = "", help = TEST_HELP ) { 0 }
76+ parser.option<Int >("--X_Y ", errorName = "", help = TEST_HELP ) { 0 }
77+ parser.option<Int >("-5", errorName = "", help = TEST_HELP ) { 0 }
78+ parser.option<Int >("--5", errorName = "", help = TEST_HELP ) { 0 }
79+ parser.option<Int >("--5Y", errorName = "", help = TEST_HELP ) { 0 }
80+ parser.option<Int >("--X5 ", errorName = "", help = TEST_HELP ) { 0 }
81+
82+ shouldThrow<IllegalArgumentException > {
83+ parser.option<Int >("-_ ", errorName = "", help = TEST_HELP ) { 0 }
84+ }
85+
86+ shouldThrow<IllegalArgumentException > {
87+ parser.option<Int >("---x", errorName = "", help = TEST_HELP ) { 0 }
88+ }
89+
90+ shouldThrow<IllegalArgumentException > {
91+ parser.option<Int >("x", errorName = "", help = TEST_HELP ) { 0 }
92+ }
93+
94+ shouldThrow<IllegalArgumentException > {
95+ parser.option<Int >("", errorName = "", help = TEST_HELP ) { 0 }
96+ }
97+
98+ shouldThrow<IllegalArgumentException > {
99+ parser.option<Int >("-xx", errorName = "", help = TEST_HELP ) { 0 }
100+ }
101+
102+ shouldThrow<IllegalArgumentException > {
103+ parser.option<Int >("--foo bar", errorName = "", help = TEST_HELP ) { 0 }
104+ }
105+
106+ shouldThrow<IllegalArgumentException > {
107+ parser.option<Int >("--foo--bar", errorName = "", help = TEST_HELP ) { 0 }
108+ }
109+
110+ shouldThrow<IllegalArgumentException > {
111+ parser.option<Int >("--f!oobar", errorName = "", help = TEST_HELP ) { 0 }
112+ }
113+ })
114+
115+ class PositionalNameValidationTest : Test ({
116+ val parser = parserOf()
117+
118+ // These are all acceptable.
119+ parser.positional<Int >("X ", help = TEST_HELP ) { 0 }
120+ parser.positional<Int >("XYZ ", help = TEST_HELP ) { 0 }
121+ parser.positional<Int >("XY -Z ", help = TEST_HELP ) { 0 }
122+ parser.positional<Int >("XY_Z ", help = TEST_HELP ) { 0 }
123+
124+ shouldThrow<IllegalArgumentException > {
125+ parser.positional<Int >("-", help = TEST_HELP ) { 0 }
126+ }
127+
128+ shouldThrow<IllegalArgumentException > {
129+ parser.positional<Int >("_ ", help = TEST_HELP ) { 0 }
130+ }
131+
132+ shouldThrow<IllegalArgumentException > {
133+ parser.positional<Int >("x", help = TEST_HELP ) { 0 }
134+ }
135+
136+ shouldThrow<IllegalArgumentException > {
137+ parser.positional<Int >("", help = TEST_HELP ) { 0 }
138+ }
139+
140+ shouldThrow<IllegalArgumentException > {
141+ parser.positional<Int >("-X ", help = TEST_HELP ) { 0 }
142+ }
143+
144+ shouldThrow<IllegalArgumentException > {
145+ parser.positional<Int >("X -", help = TEST_HELP ) { 0 }
146+ }
147+
148+ shouldThrow<IllegalArgumentException > {
149+ parser.positional<Int >("X --Y ", help = TEST_HELP ) { 0 }
150+ }
151+
152+ shouldThrow<IllegalArgumentException > {
153+ parser.positional<Int >("X !", help = TEST_HELP ) { 0 }
154+ }
155+
156+ shouldThrow<IllegalArgumentException > {
157+ parser.positional<Int >("5", help = TEST_HELP ) { 0 }
158+ }
159+
160+ // This should be acceptable
161+ parser.option<Int >("--foobar", argNames = listOf("X -Y "), errorName = "", help = TEST_HELP ) { 0 }
162+
163+ // This should not
164+ shouldThrow<IllegalArgumentException > {
165+ parser.option<Int >("--foobar", argNames = listOf("X --Y "), errorName = "", help = TEST_HELP ) { 0 }
166+ }
167+ })
168+
65169class ArglessShortOptionsTest : Test ({
66170 class Args (parser: ArgParser ) {
67171 val xyz by parser.option<MutableList <String >>("-x", "-y", "-z",
0 commit comments