github.com/hernad/nomad@v1.6.112/helper/constraints/semver/constraints_test.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 package semver 5 6 import ( 7 "testing" 8 9 "github.com/hashicorp/go-version" 10 ) 11 12 // This file is a copy of github.com/hashicorp/go-version/constraint_test.go 13 // with minimal changes to demonstrate differences. Diffing the files should 14 // illustrate behavior differences in Constraint and version.Constraint. 15 16 func TestNewConstraint(t *testing.T) { 17 cases := []struct { 18 input string 19 count int 20 err bool 21 }{ 22 {">= 1.2", 1, false}, 23 {"1.0", 1, false}, 24 {">= 1.x", 0, true}, 25 {">= 1.2, < 1.0", 2, false}, 26 27 // Out of bounds 28 {"11387778780781445675529500000000000000000", 0, true}, 29 30 // Semver only 31 {">= 1.0beta1", 0, true}, 32 33 // No pessimistic operator 34 {"~> 1.0", 0, true}, 35 } 36 37 for _, tc := range cases { 38 v, err := NewConstraint(tc.input) 39 if tc.err && err == nil { 40 t.Fatalf("expected error for input: %s", tc.input) 41 } else if !tc.err && err != nil { 42 t.Fatalf("error for input %s: %s", tc.input, err) 43 } 44 45 if len(v) != tc.count { 46 t.Fatalf("input: %s\nexpected len: %d\nactual: %d", 47 tc.input, tc.count, len(v)) 48 } 49 } 50 } 51 52 func TestConstraintCheck(t *testing.T) { 53 cases := []struct { 54 constraint string 55 version string 56 check bool 57 }{ 58 {">= 1.0, < 1.2", "1.1.5", true}, 59 {"< 1.0, < 1.2", "1.1.5", false}, 60 {"= 1.0", "1.1.5", false}, 61 {"= 1.0", "1.0.0", true}, 62 {"1.0", "1.0.0", true}, 63 64 // Assert numbers are *not* compared lexically as in #4729 65 {"> 10", "8", false}, 66 67 // Pre-releases are ordered according to Semver v2 68 {"> 2.0", "2.1.0-beta", true}, 69 {"> 2.1.0-a", "2.1.0-beta", true}, 70 {"> 2.1.0-a", "2.1.1-beta", true}, 71 {"> 2.0.0", "2.1.0-beta", true}, 72 {"> 2.1.0-a", "2.1.1", true}, 73 {"> 2.1.0-a", "2.1.1-beta", true}, 74 {"> 2.1.0-a", "2.1.0", true}, 75 {"<= 2.1.0-a", "2.0.0", true}, 76 {">= 0.6.1", "1.3.0-beta1", true}, 77 {"> 1.0-beta1", "1.0-rc1", true}, 78 79 // Meta components are ignored according to Semver v2 80 {">= 0.6.1", "1.3.0-beta1+ent", true}, 81 {">= 1.3.0-beta1", "1.3.0-beta1+ent", true}, 82 {"> 1.3.0-beta1+cgo", "1.3.0-beta1+ent", false}, 83 {"= 1.3.0-beta1+cgo", "1.3.0-beta1+ent", true}, 84 } 85 86 for _, tc := range cases { 87 c, err := NewConstraint(tc.constraint) 88 if err != nil { 89 t.Fatalf("err: %s", err) 90 } 91 92 v, err := version.NewSemver(tc.version) 93 if err != nil { 94 t.Fatalf("err: %s", err) 95 } 96 97 actual := c.Check(v) 98 expected := tc.check 99 if actual != expected { 100 t.Fatalf("Version: %s\nConstraint: %s\nExpected: %#v", 101 tc.version, tc.constraint, expected) 102 } 103 } 104 } 105 106 func TestConstraintsString(t *testing.T) { 107 cases := []struct { 108 constraint string 109 result string 110 }{ 111 {">= 1.0, < 1.2", ""}, 112 } 113 114 for _, tc := range cases { 115 c, err := NewConstraint(tc.constraint) 116 if err != nil { 117 t.Fatalf("err: %s", err) 118 } 119 120 actual := c.String() 121 expected := tc.result 122 if expected == "" { 123 expected = tc.constraint 124 } 125 126 if actual != expected { 127 t.Fatalf("Constraint: %s\nExpected: %#v\nActual: %s", 128 tc.constraint, expected, actual) 129 } 130 } 131 }