@@ -251,25 +251,45 @@ func TestIsVersionSatisfied(t *testing.T) {
251251
252252func TestNormalizeVersion (t * testing.T ) {
253253 tests := []struct {
254- input string
255- expected string
254+ input string
255+ sourceType SourceType
256+ expected string
257+ description string
256258 }{
257- {"1.5.0" , "1.5.0" },
258- {"^1.5.0" , "1.5.0" },
259- {"~1.5.0" , "1.5.0" },
260- {">=1.5.0" , ">=1.5.0" },
261- {"<2.0.0" , "<2.0.0" },
262- {"==1.5.0" , "==1.5.0" },
263- {" 1.5.0 " , "1.5.0" },
264- {`"1.5.0"` , "1.5.0" },
265- {`'1.5.0'` , "1.5.0" },
266- {"*" , "*" },
267- {"latest" , "latest" },
259+ // Lock file tests (should remove ^ and ~)
260+ {"1.5.0" , SourceTypeLock , "1.5.0" , "exact version" },
261+ {"^1.5.0" , SourceTypeLock , "1.5.0" , "npm caret removed for lock file" },
262+ {"~1.5.0" , SourceTypeLock , "1.5.0" , "npm tilde removed for lock file" },
263+ {">=1.5.0" , SourceTypeLock , ">=1.5.0" , "semver operators preserved for lock file" },
264+ {"<2.0.0" , SourceTypeLock , "<2.0.0" , "semver operators preserved for lock file" },
265+ {"==1.5.0" , SourceTypeLock , "==1.5.0" , "semver operators preserved for lock file" },
266+ {" 1.5.0 " , SourceTypeLock , "1.5.0" , "whitespace removed" },
267+ {`"1.5.0"` , SourceTypeLock , "1.5.0" , "quotes removed" },
268+ {`'1.5.0'` , SourceTypeLock , "1.5.0" , "quotes removed" },
269+ {"*" , SourceTypeLock , "*" , "wildcard preserved" },
270+ {"latest" , SourceTypeLock , "latest" , "latest preserved" },
271+
272+ // Package file tests (should preserve ^ and ~)
273+ {"1.5.0" , SourceTypePackage , "1.5.0" , "exact version" },
274+ {"^1.5.0" , SourceTypePackage , "^1.5.0" , "npm caret preserved for package file" },
275+ {"~1.5.0" , SourceTypePackage , "~1.5.0" , "npm tilde preserved for package file" },
276+ {">=1.5.0" , SourceTypePackage , ">=1.5.0" , "semver operators preserved for package file" },
277+ {"<2.0.0" , SourceTypePackage , "<2.0.0" , "semver operators preserved for package file" },
278+ {"==1.5.0" , SourceTypePackage , "==1.5.0" , "semver operators preserved for package file" },
279+ {" 1.5.0 " , SourceTypePackage , "1.5.0" , "whitespace removed" },
280+ {`"1.5.0"` , SourceTypePackage , "1.5.0" , "quotes removed" },
281+ {`'1.5.0'` , SourceTypePackage , "1.5.0" , "quotes removed" },
282+ {"*" , SourceTypePackage , "*" , "wildcard preserved" },
283+ {"latest" , SourceTypePackage , "latest" , "latest preserved" },
268284 }
269285
270286 for _ , tt := range tests {
271- t .Run (tt .input , func (t * testing.T ) {
272- result := normalizeVersion (tt .input )
287+ sourceTypeStr := "Package"
288+ if tt .sourceType == SourceTypeLock {
289+ sourceTypeStr = "Lock"
290+ }
291+ t .Run (fmt .Sprintf ("%s_%s_%s" , tt .input , sourceTypeStr , tt .description ), func (t * testing.T ) {
292+ result := normalizeVersion (tt .input , tt .sourceType )
273293 if result != tt .expected {
274294 t .Errorf ("Expected %s but got %s" , tt .expected , result )
275295 }
0 commit comments