@@ -140,3 +140,88 @@ func TestShouldCheckLatestCliVersion(t *testing.T) {
140
140
assert .NoError (t , err )
141
141
assert .True (t , shouldCheck )
142
142
}
143
+
144
+ func TestExtractBoolFlagFromArgs (t * testing.T ) {
145
+ testCases := []struct {
146
+ name string
147
+ args []string
148
+ flagName string
149
+ expectedValue bool
150
+ expectedErr bool
151
+ expectedArgs []string
152
+ }{
153
+ {
154
+ name : "Flag present as --flagName (implied true)" ,
155
+ args : []string {"somecmd" , "--flagName" , "otherarg" },
156
+ flagName : "flagName" ,
157
+ expectedValue : true ,
158
+ expectedErr : false ,
159
+ expectedArgs : []string {"somecmd" , "otherarg" },
160
+ },
161
+ {
162
+ name : "Flag present as --flagName=true" ,
163
+ args : []string {"somecmd" , "--flagName=true" , "otherarg" },
164
+ flagName : "flagName" ,
165
+ expectedValue : true ,
166
+ expectedErr : false ,
167
+ expectedArgs : []string {"somecmd" , "otherarg" },
168
+ },
169
+ {
170
+ name : "Flag present as --flagName=false" ,
171
+ args : []string {"somecmd" , "--flagName=false" , "otherarg" },
172
+ flagName : "flagName" ,
173
+ expectedValue : false ,
174
+ expectedErr : false ,
175
+ expectedArgs : []string {"somecmd" , "otherarg" },
176
+ },
177
+ {
178
+ name : "Flag not present" ,
179
+ args : []string {"somecmd" , "otherarg" },
180
+ flagName : "flagName" ,
181
+ expectedValue : false ,
182
+ expectedErr : false ,
183
+ expectedArgs : []string {"somecmd" , "otherarg" },
184
+ },
185
+ {
186
+ name : "Flag present with invalid value" ,
187
+ args : []string {"somecmd" , "--flagName=invalid" , "otherarg" },
188
+ flagName : "flagName" ,
189
+ expectedValue : false ,
190
+ expectedErr : true ,
191
+ expectedArgs : []string {"somecmd" , "--flagName=invalid" , "otherarg" },
192
+ },
193
+ {
194
+ name : "Flag present as -flagName (should not be found)" ,
195
+ args : []string {"somecmd" , "-flagName" , "otherarg" },
196
+ flagName : "flagName" ,
197
+ expectedValue : false ,
198
+ expectedErr : false ,
199
+ expectedArgs : []string {"somecmd" , "-flagName" , "otherarg" },
200
+ },
201
+ {
202
+ name : "Flag present multiple times" ,
203
+ args : []string {"somecmd" , "--flagName" , "--flagName=false" , "otherarg" },
204
+ flagName : "flagName" ,
205
+ expectedValue : false ,
206
+ expectedErr : false ,
207
+ expectedArgs : []string {"somecmd" , "--flagName=false" , "otherarg" },
208
+ },
209
+ }
210
+
211
+ for _ , tc := range testCases {
212
+ t .Run (tc .name , func (t * testing.T ) {
213
+ // Make a copy to avoid modifying the original
214
+ argsCopy := append ([]string (nil ), tc .args ... )
215
+ value , err := ExtractBoolFlagFromArgs (& argsCopy , tc .flagName )
216
+
217
+ if tc .expectedErr {
218
+ assert .Error (t , err )
219
+ } else {
220
+ assert .NoError (t , err )
221
+ }
222
+
223
+ assert .Equal (t , tc .expectedValue , value )
224
+ assert .Equal (t , tc .expectedArgs , argsCopy )
225
+ })
226
+ }
227
+ }
0 commit comments