package version import ( "testing" ) func TestNewConstraint(t *testing.T) { cases := []struct { input string count int err bool }{ {">= 1.2", 1, false}, {"1.0", 1, false}, {">= 1.x", 0, true}, {">= 1.2, < 1.0", 2, false}, // Out of bounds {"11387778780781445675529500000000000000000", 0, true}, } for _, tc := range cases { v, err := NewConstraint(tc.input) if tc.err && err == nil { t.Fatalf("expected error for input: %s", tc.input) } else if !tc.err && err != nil { t.Fatalf("error for input %s: %s", tc.input, err) } if len(v) != tc.count { t.Fatalf("input: %s\nexpected len: %d\nactual: %d", tc.input, tc.count, len(v)) } } } func TestConstraintCheck(t *testing.T) { cases := []struct { constraint string version string check bool }{ {">= 1.0, < 1.2", "1.1.5", true}, {"< 1.0, < 1.2", "1.1.5", false}, {"= 1.0", "1.1.5", false}, {"= 1.0", "1.0.0", true}, {"1.0", "1.0.0", true}, {"~> 1.0", "2.0", false}, {"~> 1.0", "1.1", true}, {"~> 1.0", "1.2.3", true}, {"~> 1.0.0", "1.2.3", false}, {"~> 1.0.0", "1.0.7", true}, {"~> 1.0.0", "1.1.0", false}, {"~> 1.0.7", "1.0.4", false}, {"~> 1.0.7", "1.0.7", true}, {"~> 1.0.7", "1.0.8", true}, {"~> 1.0.7", "1.0.7.5", true}, {"~> 1.0.7", "1.0.6.99", false}, {"~> 1.0.7", "1.0.8.0", true}, {"~> 1.0.9.5", "1.0.9.5", true}, {"~> 1.0.9.5", "1.0.9.4", false}, {"~> 1.0.9.5", "1.0.9.6", true}, {"~> 1.0.9.5", "1.0.9.5.0", true}, {"~> 1.0.9.5", "1.0.9.5.1", true}, } for _, tc := range cases { c, err := NewConstraint(tc.constraint) if err != nil { t.Fatalf("err: %s", err) } v, err := NewVersion(tc.version) if err != nil { t.Fatalf("err: %s", err) } actual := c.Check(v) expected := tc.check if actual != expected { t.Fatalf("Version: %s\nConstraint: %s\nExpected: %#v", tc.version, tc.constraint, expected) } } } func TestConstraintsString(t *testing.T) { cases := []struct { constraint string result string }{ {">= 1.0, < 1.2", ""}, {"~> 1.0.7", ""}, } for _, tc := range cases { c, err := NewConstraint(tc.constraint) if err != nil { t.Fatalf("err: %s", err) } actual := c.String() expected := tc.result if expected == "" { expected = tc.constraint } if actual != expected { t.Fatalf("Constraint: %s\nExpected: %#v\nActual: %s", tc.constraint, expected, actual) } } }