@@ -17,6 +17,11 @@ type testType struct {
1717 Tag string
1818}
1919
20+ type testTypeManyTags struct {
21+ NameID string
22+ Tags []string
23+ }
24+
2025type testDate struct {
2126 Date * time.Time
2227}
@@ -78,6 +83,45 @@ func testGetCommands() *core.Commands {
7883 return argsI , nil
7984 },
8085 },
86+ & core.Command {
87+ Namespace : "test" ,
88+ Resource : "many-positional" ,
89+ ArgSpecs : core.ArgSpecs {
90+ {
91+ Name : "name-id" ,
92+ Positional : true ,
93+ },
94+ {
95+ Name : "tag" ,
96+ Positional : true ,
97+ },
98+ },
99+ AllowAnonymousClient : true ,
100+ ArgsType : reflect .TypeOf (testType {}),
101+ Run : func (_ context.Context , argsI interface {}) (i interface {}, e error ) {
102+ return argsI , nil
103+ },
104+ },
105+ & core.Command {
106+ Namespace : "test" ,
107+ Resource : "many-multi-positional" ,
108+ ArgSpecs : core.ArgSpecs {
109+ {
110+ Name : "name-id" ,
111+ Positional : true ,
112+ },
113+ {
114+ Name : "tags" ,
115+ Positional : true ,
116+ },
117+ },
118+ AcceptMultiplePositionalArgs : true ,
119+ AllowAnonymousClient : true ,
120+ ArgsType : reflect .TypeOf (testTypeManyTags {}),
121+ Run : func (_ context.Context , argsI interface {}) (i interface {}, e error ) {
122+ return argsI , nil
123+ },
124+ },
81125 & core.Command {
82126 Namespace : "test" ,
83127 Resource : "raw-args" ,
@@ -196,42 +240,6 @@ func Test_PositionalArg(t *testing.T) {
196240 }),
197241 ),
198242 }))
199-
200- t .Run ("Invalid1" , core .Test (& core.TestConfig {
201- Commands : testGetCommands (),
202- Cmd : "scw test positional name-id=plop tag=world" ,
203- Check : core .TestCheckCombine (
204- core .TestCheckExitCode (1 ),
205- core .TestCheckError (& core.CliError {
206- Err : errors .New ("a positional argument is required for this command" ),
207- Hint : "Try running: scw test positional plop tag=world" ,
208- }),
209- ),
210- }))
211-
212- t .Run ("Invalid2" , core .Test (& core.TestConfig {
213- Commands : testGetCommands (),
214- Cmd : "scw test positional tag=world name-id=plop" ,
215- Check : core .TestCheckCombine (
216- core .TestCheckExitCode (1 ),
217- core .TestCheckError (& core.CliError {
218- Err : errors .New ("a positional argument is required for this command" ),
219- Hint : "Try running: scw test positional plop tag=world" ,
220- }),
221- ),
222- }))
223-
224- t .Run ("Invalid3" , core .Test (& core.TestConfig {
225- Commands : testGetCommands (),
226- Cmd : "scw test positional plop name-id=plop" ,
227- Check : core .TestCheckCombine (
228- core .TestCheckExitCode (1 ),
229- core .TestCheckError (& core.CliError {
230- Err : errors .New ("a positional argument is required for this command" ),
231- Hint : "Try running: scw test positional plop" ,
232- }),
233- ),
234- }))
235243 })
236244
237245 t .Run ("simple" , core .Test (& core.TestConfig {
@@ -240,6 +248,24 @@ func Test_PositionalArg(t *testing.T) {
240248 Check : core .TestCheckExitCode (0 ),
241249 }))
242250
251+ t .Run ("simple2" , core .Test (& core.TestConfig {
252+ Commands : testGetCommands (),
253+ Cmd : "scw test positional name-id=plop tag=world" ,
254+ Check : core .TestCheckExitCode (0 ),
255+ }))
256+
257+ t .Run ("simple3" , core .Test (& core.TestConfig {
258+ Commands : testGetCommands (),
259+ Cmd : "scw test positional tag=world name-id=plop" ,
260+ Check : core .TestCheckExitCode (0 ),
261+ }))
262+
263+ t .Run ("simple4" , core .Test (& core.TestConfig {
264+ Commands : testGetCommands (),
265+ Cmd : "scw test positional plop name-id=plop" ,
266+ Check : core .TestCheckExitCode (0 ),
267+ }))
268+
243269 t .Run ("full command" , core .Test (& core.TestConfig {
244270 Commands : testGetCommands (),
245271 Cmd : "scw test positional plop tag=world" ,
@@ -272,6 +298,41 @@ func Test_PositionalArg(t *testing.T) {
272298 core .TestCheckGolden (),
273299 ),
274300 }))
301+
302+ t .Run ("many positional" , core .Test (& core.TestConfig {
303+ Commands : testGetCommands (),
304+ Cmd : "scw test many-positional tag1 name-id=plop" ,
305+ Check : core .TestCheckExitCode (0 ),
306+ }))
307+
308+ t .Run ("many positional" , core .Test (& core.TestConfig {
309+ Commands : testGetCommands (),
310+ Cmd : "scw test many-positional tag1 name-id=plop" ,
311+ Check : core .TestCheckCombine (
312+ core .TestCheckExitCode (0 ),
313+ func (t * testing.T , ctx * core.CheckFuncCtx ) {
314+ t .Helper ()
315+ res := ctx .Result .(* testType )
316+ assert .Equal (t , "plop" , res .NameID )
317+ assert .Equal (t , "tag1" , res .Tag )
318+ },
319+ ),
320+ }))
321+
322+ t .Run ("many multi-positional" , core .Test (& core.TestConfig {
323+ Commands : testGetCommands (),
324+ Cmd : "scw test many-multi-positional pos1 pos2 name-id=plop" ,
325+ Check : core .TestCheckCombine (
326+ core .TestCheckExitCode (0 ),
327+ func (t * testing.T , ctx * core.CheckFuncCtx ) {
328+ t .Helper ()
329+ res := ctx .Result .(* testTypeManyTags )
330+ assert .Equal (t , "plop" , res .NameID )
331+ assert .Equal (t , "pos1" , res .Tags [0 ])
332+ assert .Equal (t , "pos2" , res .Tags [1 ])
333+ },
334+ ),
335+ }))
275336}
276337
277338func Test_MultiPositionalArg (t * testing.T ) {
0 commit comments