blob: 707d73b69bff41b61088595d362181714a900b07 [file] [log] [blame]
package version
import (
"strings"
"testing"
)
var anyConstraints = map[string][]*Constraint{
"*": []*Constraint{},
"*.*": []*Constraint{},
"*.x.*": []*Constraint{},
"x.x.x.*": []*Constraint{},
}
func TestParseAnyConstraints(t *testing.T) {
for in, out := range anyConstraints {
constraint := NewConstrainGroupFromString(in)
if x := constraint.GetConstraints(); len(x) != 0 {
t.Errorf("FAIL: fromString(%v) = {%s}: want {%s}", in, x, out)
}
}
}
var simpleConstraints = map[string][]*Constraint{
"<>1.0.0": []*Constraint{{"<>", "1.0.0.0"}},
"!=1.0.0": []*Constraint{{"!=", "1.0.0.0"}},
">1.0.0": []*Constraint{{">", "1.0.0.0"}},
"<1.2.3.4": []*Constraint{{"<", "1.2.3.4-dev"}},
"<=1.2.3": []*Constraint{{"<=", "1.2.3.0"}},
">=1.2.3": []*Constraint{{">=", "1.2.3.0"}},
"=1.2.3": []*Constraint{{"=", "1.2.3.0"}},
"==1.2.3": []*Constraint{{"==", "1.2.3.0"}},
"1.2.3": []*Constraint{{"=", "1.2.3.0"}},
"=1.0": []*Constraint{{"=", "1.0.0.0"}},
"1.2.3b5": []*Constraint{{"=", "1.2.3.0-beta5"}},
">= 1.2.3": []*Constraint{{">=", "1.2.3.0"}},
">=dev-master": []*Constraint{{">=", "9999999-dev"}},
"dev-master": []*Constraint{{"=", "9999999-dev"}},
"dev-feature-a": []*Constraint{{"=", "dev-feature-a"}},
"dev-some-fix": []*Constraint{{"=", "dev-some-fix"}},
"dev-CAPS": []*Constraint{{"=", "dev-CAPS"}},
"dev-master as 1.0.0": []*Constraint{{"=", "9999999-dev"}},
"<1.2.3.4-stable": []*Constraint{{"<", "1.2.3.4"}},
"<=3.0@dev": []*Constraint{{"<=", "3.0.0.0"}},
"1.0@dev": []*Constraint{{"=", "1.0.0.0"}}, //IgnoresStabilityFlag
"1.0.x-dev#abcd123": []*Constraint{{"=", "1.0.9999999.9999999-dev"}}, //IgnoresReferenceOnDevVersion
"1.0.x-dev#trunk/@123": []*Constraint{{"=", "1.0.9999999.9999999-dev"}}, //IgnoresReferenceOnDevVersion
//"1.0#abcd123": []string{"=", "1.0.0.0"}, //FailsOnBadReference
//"1.0#trunk/@123": []string{"=", "1.0.0.0"}, //FailsOnBadReference
}
func TestParseConstraints(t *testing.T) {
for in, out := range simpleConstraints {
constraint := NewConstrainGroupFromString(in)
if x := constraint.GetConstraints(); x[0].String() != out[0].String() {
t.Errorf("FAIL: parseConstraints(%v) = {%s}: want {%s}", in, x, out)
}
}
}
var wildcardConstraints = map[string][]*Constraint{
"2.*": []*Constraint{{">", "1.9999999.9999999.9999999"}, {"<", "2.9999999.9999999.9999999"}},
"20.*": []*Constraint{{">", "19.9999999.9999999.9999999"}, {"<", "20.9999999.9999999.9999999"}},
"2.0.*": []*Constraint{{">", "1.9999999.9999999.9999999"}, {"<", "2.0.9999999.9999999"}},
"2.2.x": []*Constraint{{">", "2.1.9999999.9999999"}, {"<", "2.2.9999999.9999999"}},
"2.10.x": []*Constraint{{">", "2.9.9999999.9999999"}, {"<", "2.10.9999999.9999999"}},
"2.1.3.*": []*Constraint{{">", "2.1.2.9999999"}, {"<", "2.1.3.9999999"}},
"0.*": []*Constraint{{"<", "0.9999999.9999999.9999999"}},
}
func TestParseConstraintsWildcardConstraints(t *testing.T) {
for in, out := range wildcardConstraints {
constraint := NewConstrainGroupFromString(in)
if x := constraint.GetConstraints(); x[0].String() != out[0].String() && x[1].String() != out[1].String() {
t.Errorf("FAIL: parseConstraints(%v) = {%s}: want {%s}", in, x, out)
}
}
}
var tildeConstraints = map[string][]*Constraint{
"~1": []*Constraint{{">=", "1.0.0.0"}, {"<", "2.0.0.0-dev"}},
"~1.2": []*Constraint{{">=", "1.2.0.0"}, {"<", "2.0.0.0-dev"}},
"~1.2.3": []*Constraint{{">=", "1.2.3.0"}, {"<", "1.3.0.0-dev"}},
"~1.2.3.4": []*Constraint{{">=", "1.2.3.4"}, {"<", "1.2.4.0-dev"}},
"~1.2-beta": []*Constraint{{">=", "1.2.0.0-beta"}, {"<", "2.0.0.0-dev"}},
"~1.2-b2": []*Constraint{{">=", "1.2.0.0-beta2"}, {"<", "2.0.0.0-dev"}},
"~1.2-BETA2": []*Constraint{{">=", "1.2.0.0-beta2"}, {"<", "2.0.0.0-dev"}},
"~1.2.2-dev": []*Constraint{{">=", "1.2.2.0-dev"}, {"<", "1.3.0.0-dev"}},
}
func TestParseConstraintsTildeConstraints(t *testing.T) {
for in, out := range tildeConstraints {
constraint := NewConstrainGroupFromString(in)
if x := constraint.GetConstraints(); x[0].String() != out[0].String() && x[1].String() != out[1].String() {
t.Errorf("FAIL: parseConstraints(%v) = {%s}: want {%s}", in, x, out)
}
}
}
var multiConstraints = map[string][]*Constraint{
">2.0,<=3.0": []*Constraint{{">", "2.0.0.0"}, {"<=", "3.0.0.0"}},
">2.0@stable,<=3.0@dev": []*Constraint{{">", "2.0.0.0"}, {"<=", "3.0.0.0-dev"}},
}
func TestParseConstraintsMultiConstraints(t *testing.T) {
for in, out := range multiConstraints {
constraint := NewConstrainGroupFromString(in)
if x := constraint.GetConstraints(); x[0].String() != out[0].String() && x[1].String() != out[1].String() {
t.Errorf("FAIL: parseConstraints(%v) = {%s}: want {%s}", in, x, out)
}
}
}
var miscConstraints = map[string]bool{
"*|1.0": true,
">2.0,<=3.0|2.5.0beta": true,
">2.0,<=3.0|3.5.0beta": false,
">=2.2.3,<2.4-dev|2.3.3": true,
"~1.2.3|1.2.3.5": true,
"~1.2.3|1.4.3.5": false,
"2.0.*|2.0.5": true,
"2.0.*|2.1.5": false,
"2.0.5|2.0.5": true,
"2.0.5|2.0.9": false,
">2.0.5|2.0.9": true,
"<2.0.5|2.0.9": false,
">=dev-master|dev-master": true,
}
func TestMatch(t *testing.T) {
for in, out := range miscConstraints {
tmp := strings.Split(in, "|")
constraint := NewConstrainGroupFromString(tmp[0])
if x := constraint.Match(tmp[1]); x != out {
t.Errorf("FAIL: Match(%v) = {%s}: want {%s}", in, x, out)
}
}
}
func TestAddConstraint(t *testing.T) {
group := NewConstrainGroup()
group.AddConstraint(NewConstrain("=", "1.0.0"))
constraints := group.GetConstraints()
if x := constraints[0].GetOperator(); x != "=" {
t.Errorf("FAIL: AddConstraintOperator() = {%s}: want {%s}", x, "=")
}
if x := constraints[0].GetVersion(); x != "1.0.0" {
t.Errorf("FAIL: AddConstraintVersion() = {%s}: want {%s}", x, "1.0.0")
}
}