| // Copyright IBM Corp. 2014, 2026 | |
| // SPDX-License-Identifier: BUSL-1.1 | |
| package discovery | |
| import ( | |
| "fmt" | |
| "testing" | |
| ) | |
| func TestVersionSet(t *testing.T) { | |
| tests := []struct { | |
| ConstraintStr string | |
| VersionStr string | |
| ShouldHave bool | |
| }{ | |
| // These test cases are not exhaustive since the underlying go-version | |
| // library is well-tested. This is mainly here just to exercise our | |
| // wrapper code, but also used as an opportunity to cover some basic | |
| // but important cases such as the ~> constraint so that we'll be more | |
| // likely to catch any accidental breaking behavior changes in the | |
| // underlying library. | |
| { | |
| ">=1.0.0", | |
| "1.0.0", | |
| true, | |
| }, | |
| { | |
| ">=1.0.0", | |
| "0.0.0", | |
| false, | |
| }, | |
| { | |
| ">=1.0.0", | |
| "1.1.0-beta1", | |
| false, | |
| }, | |
| { | |
| ">=1.0.0", | |
| "1.1.0", | |
| true, | |
| }, | |
| { | |
| "~>1.1.0-a", | |
| "1.1.0-beta1", | |
| true, | |
| }, | |
| { | |
| "~>1.1.0", | |
| "1.1.2", | |
| true, | |
| }, | |
| { | |
| "~>1.1.0", | |
| "1.2.0", | |
| false, | |
| }, | |
| } | |
| for _, test := range tests { | |
| t.Run(fmt.Sprintf("%s has %s", test.ConstraintStr, test.VersionStr), func(t *testing.T) { | |
| accepted, err := ConstraintStr(test.ConstraintStr).Parse() | |
| if err != nil { | |
| t.Fatalf("unwanted error parsing constraints string %q: %s", test.ConstraintStr, err) | |
| } | |
| version, err := VersionStr(test.VersionStr).Parse() | |
| if err != nil { | |
| t.Fatalf("unwanted error parsing version string %q: %s", test.VersionStr, err) | |
| } | |
| if got, want := accepted.Allows(version), test.ShouldHave; got != want { | |
| t.Errorf("Has returned %#v; want %#v", got, want) | |
| } | |
| }) | |
| } | |
| } |