@@ -152,6 +152,92 @@ func TestShortDescriptionFrom(t *testing.T) {
152152 })
153153}
154154
155+ func TestArgsFrom (t * testing.T ) {
156+ t .Run ("happy path with 3 args" , func (t * testing.T ) {
157+ f , err := ioutil .TempFile ("" , "test-args3-ok" )
158+ assert .NoError (t , err )
159+
160+ f .WriteString ("#\n # args: 2\n #\n " )
161+ defer func () {
162+ f .Close ()
163+ os .Remove (f .Name ())
164+ }()
165+
166+ v , err := argsFrom (f .Name ())
167+ assert .NoError (t , err )
168+ assert .Error (t , v (& cobra.Command {}, []string {}))
169+ assert .Error (t , v (& cobra.Command {}, []string {"first" }))
170+ assert .NoError (t , v (& cobra.Command {}, []string {"first" , "second" }))
171+ assert .Error (t , v (& cobra.Command {}, []string {"first" , "second" , "third" }))
172+ })
173+
174+ t .Run ("happy path with no args" , func (t * testing.T ) {
175+ f , err := ioutil .TempFile ("" , "test-args0-ok" )
176+ assert .NoError (t , err )
177+
178+ f .WriteString ("#\n # args: 0\n #\n " )
179+ defer func () {
180+ f .Close ()
181+ os .Remove (f .Name ())
182+ }()
183+
184+ v , err := argsFrom (f .Name ())
185+ assert .NoError (t , err )
186+ assert .NoError (t , v (& cobra.Command {}, []string {}))
187+ assert .Error (t , v (& cobra.Command {}, []string {"first" }))
188+ assert .Error (t , v (& cobra.Command {}, []string {"first" , "second" }))
189+ })
190+
191+ t .Run ("missing" , func (t * testing.T ) {
192+ f , err := ioutil .TempFile ("" , "test-args-missing" )
193+ assert .NoError (t , err )
194+
195+ f .WriteString ("#\n #\n #\n " )
196+ defer func () {
197+ f .Close ()
198+ os .Remove (f .Name ())
199+ }()
200+
201+ v , err := argsFrom (f .Name ())
202+ assert .NoError (t , err )
203+ assert .NoError (t , v (& cobra.Command {}, []string {}))
204+ assert .NoError (t , v (& cobra.Command {}, []string {"first" , "second" }))
205+ })
206+
207+ t .Run ("bad value: not numeric" , func (t * testing.T ) {
208+ f , err := ioutil .TempFile ("" , "test-args-not-numeric" )
209+ assert .NoError (t , err )
210+
211+ f .WriteString ("#\n # args: banana\n #\n " )
212+ defer func () {
213+ f .Close ()
214+ os .Remove (f .Name ())
215+ }()
216+
217+ v , err := argsFrom (f .Name ())
218+ assert .NoError (t , err )
219+ assert .NoError (t , v (& cobra.Command {}, []string {}))
220+ assert .NoError (t , v (& cobra.Command {}, []string {"first" , "second" }))
221+ })
222+
223+ t .Run ("bad value: too large" , func (t * testing.T ) {
224+ f , err := ioutil .TempFile ("" , "test-args-too-large" )
225+ assert .NoError (t , err )
226+
227+ f .WriteString ("#\n # args: 999999999999999999999999999999999999999999999999999999999999999999999999\n #\n " )
228+ defer func () {
229+ f .Close ()
230+ os .Remove (f .Name ())
231+ }()
232+
233+ v , err := argsFrom (f .Name ())
234+ if ! assert .Error (t , err ) {
235+ assert .NoError (t , v (& cobra.Command {}, []string {}))
236+ assert .NoError (t , v (& cobra.Command {}, []string {"first" , "second" }))
237+ }
238+ })
239+ }
240+
155241func TestExampleFrom (t * testing.T ) {
156242 t .Run ("happy path" , func (t * testing.T ) {
157243 f , err := ioutil .TempFile ("" , "test-example-ok" )
0 commit comments