@@ -170,3 +170,30 @@ func TestParseDelimitedSlice(t *testing.T) {
170170 })
171171 }
172172}
173+
174+ func TestParseNameVersionPairs (t * testing.T ) {
175+ tests := []struct {
176+ name string
177+ input string
178+ expected [][2 ]string
179+ expectErr bool
180+ }{
181+ {"empty string" , "" , [][2 ]string {}, false },
182+ {"single pair" , "foo:1.0.0" , [][2 ]string {{"foo" , "1.0.0" }}, false },
183+ {"multiple pairs" , "foo:1.0.0;bar:2.0.0" , [][2 ]string {{"foo" , "1.0.0" }, {"bar" , "2.0.0" }}, false },
184+ {"spaces" , " foo:1.0.0 ; bar:2.0.0 " , [][2 ]string {{" foo" , "1.0.0 " }, {" bar" , "2.0.0 " }}, false },
185+ {"invalid format" , "foo" , nil , true },
186+ {"too many parts" , "foo:1.0.0:extra" , nil , true },
187+ }
188+ for _ , tt := range tests {
189+ t .Run (tt .name , func (t * testing.T ) {
190+ result , err := ParseNameVersionPairs (tt .input )
191+ if tt .expectErr {
192+ assert .Error (t , err , "expected error for input %q" , tt .input )
193+ return
194+ }
195+ assert .NoError (t , err , "unexpected error for input %q: %v" , tt .input , err )
196+ assert .Equal (t , tt .expected , result , "ParseNameVersionPairs(%q) = %v, want %v" , tt .input , result , tt .expected )
197+ })
198+ }
199+ }
0 commit comments