@@ -34,6 +34,10 @@ type versionCmpInput struct {
3434 Versions []string `json:"versions"`
3535}
3636
37+ type roundtripInput struct {
38+ Vers string `json:"vers"`
39+ }
40+
3741func loadTestFile (t * testing.T , filename string ) * versTestFile {
3842 t .Helper ()
3943 path := filepath .Join ("testdata" , "vers-spec" , "tests" , filename )
@@ -50,8 +54,12 @@ func loadTestFile(t *testing.T, filename string) *versTestFile {
5054
5155func TestConformance_FromNative (t * testing.T ) {
5256 files := []string {
57+ "conan_range_from_native_basic_test.json" ,
58+ "conan_range_from_native_test.json" ,
5359 "gem_range_from_native_test.json" ,
60+ "nginx_range_from_native_test.json" ,
5461 "npm_range_from_native_test.json" ,
62+ "openssl_range_from_native_test.json" ,
5563 "pypi_range_from_native_test.json" ,
5664 "nuget_range_from_native_test.json" ,
5765 }
@@ -136,11 +144,45 @@ func TestConformance_Containment(t *testing.T) {
136144 }
137145}
138146
147+ func TestConformance_RoundTrip (t * testing.T ) {
148+ tf := loadTestFile (t , "pypi_range_roundtrip_test.json" )
149+ for _ , tc := range tf .Tests {
150+ if tc .TestType != "roundtrip" {
151+ continue
152+ }
153+ var input roundtripInput
154+ if err := json .Unmarshal (tc .Input , & input ); err != nil {
155+ t .Errorf ("failed to parse input: %v" , err )
156+ continue
157+ }
158+ var expected string
159+ if err := json .Unmarshal (tc .ExpectedOutput , & expected ); err != nil {
160+ t .Errorf ("failed to parse expected output: %v" , err )
161+ continue
162+ }
163+ t .Run (input .Vers , func (t * testing.T ) {
164+ r , err := Parse (input .Vers )
165+ if err != nil {
166+ t .Fatalf ("Parse(%q) error: %v" , input .Vers , err )
167+ }
168+ if got := ToVersString (r , r .Scheme ); got != expected {
169+ t .Errorf ("round trip = %q, want %q" , got , expected )
170+ }
171+ })
172+ }
173+ }
174+
139175//nolint:gocognit
140176func TestConformance_VersionComparison (t * testing.T ) {
141177 files := []string {
178+ "alpine_version_cmp_test.json" ,
179+ "alpm_version_cmp_test.json" ,
180+ "conan_version_cmp_test.json" ,
181+ "gentoo_version_cmp_test.json" ,
182+ "lexicographic-test.json" ,
142183 "nuget_version_cmp_test.json" ,
143184 "maven_version_cmp_test.json" ,
185+ "openssl_version_cmp_test.json" ,
144186 }
145187
146188 for _ , file := range files {
0 commit comments