@@ -150,3 +150,105 @@ func TestSliceRemoveFlag(t *testing.T) {
150
150
})
151
151
}
152
152
}
153
+
154
+ func TestSliceRemoveFlagAndValue (t * testing.T ) {
155
+ testCases := []struct {
156
+ name string
157
+ input []string
158
+ flagName string
159
+ expected []string
160
+ }{
161
+ {
162
+ name : "remove flag without value" ,
163
+ input : []string {"--flag1" , "value1" , "--flag2" , "value2" },
164
+ flagName : "flag1" ,
165
+ expected : []string {"--flag2" , "value2" },
166
+ },
167
+ {
168
+ name : "remove flag with spaced value" ,
169
+ input : []string {"--flag1" , "value1" , "--flag2" , "value2" },
170
+ flagName : "flag1" ,
171
+ expected : []string {"--flag2" , "value2" },
172
+ },
173
+ {
174
+ name : "remove flag with equals value" ,
175
+ input : []string {"--flag1=value1" , "--flag2" , "value2" },
176
+ flagName : "flag1" ,
177
+ expected : []string {"--flag2" , "value2" },
178
+ },
179
+ {
180
+ name : "remove flag with spaced value followed by another flag" ,
181
+ input : []string {"--flag1" , "value1" , "--flag2" , "value2" },
182
+ flagName : "flag1" ,
183
+ expected : []string {"--flag2" , "value2" },
184
+ },
185
+ {
186
+ name : "remove flag with spaced value followed by non-flag" ,
187
+ input : []string {"--flag1" , "value1" , "other" , "args" },
188
+ flagName : "flag1" ,
189
+ expected : []string {"other" , "args" },
190
+ },
191
+ {
192
+ name : "remove flag with spaced value followed by another flag" ,
193
+ input : []string {"--flag1" , "value1" , "--flag2" , "value2" },
194
+ flagName : "flag1" ,
195
+ expected : []string {"--flag2" , "value2" },
196
+ },
197
+ {
198
+ name : "remove multiple occurrences" ,
199
+ input : []string {"--flag1" , "value1" , "--flag1" , "value2" , "other" },
200
+ flagName : "flag1" ,
201
+ expected : []string {"other" },
202
+ },
203
+ {
204
+ name : "flag not present" ,
205
+ input : []string {"--flag1" , "value1" , "--flag2" , "value2" },
206
+ flagName : "flag3" ,
207
+ expected : []string {"--flag1" , "value1" , "--flag2" , "value2" },
208
+ },
209
+ {
210
+ name : "empty slice" ,
211
+ input : []string {},
212
+ flagName : "flag1" ,
213
+ expected : []string {},
214
+ },
215
+ {
216
+ name : "nil slice" ,
217
+ input : nil ,
218
+ flagName : "flag1" ,
219
+ expected : nil ,
220
+ },
221
+ {
222
+ name : "empty flag name" ,
223
+ input : []string {"--flag1" , "value1" },
224
+ flagName : "" ,
225
+ expected : []string {"--flag1" , "value1" },
226
+ },
227
+ {
228
+ name : "flag at end without value" ,
229
+ input : []string {"other" , "--flag1" },
230
+ flagName : "flag1" ,
231
+ expected : []string {"other" },
232
+ },
233
+ {
234
+ name : "flag at end with value" ,
235
+ input : []string {"other" , "--flag1" , "value1" },
236
+ flagName : "flag1" ,
237
+ expected : []string {"other" },
238
+ },
239
+ {
240
+ name : "mixed flag forms" ,
241
+ input : []string {"--flag1" , "value1" , "--flag1=value2" , "other" },
242
+ flagName : "flag1" ,
243
+ expected : []string {"other" },
244
+ },
245
+ }
246
+
247
+ for _ , tc := range testCases {
248
+ tc := tc // rebind to avoid range-variable capture
249
+ t .Run (tc .name , func (t * testing.T ) {
250
+ result := SliceRemoveFlagAndValue (tc .input , tc .flagName )
251
+ assert .Equal (t , tc .expected , result )
252
+ })
253
+ }
254
+ }
0 commit comments