~rogpeppe/juju-core/438-local-instance-Addresses

« back to all changes in this revision

Viewing changes to version/version_test.go

  • Committer: Roger Peppe
  • Date: 2012-04-25 15:54:21 UTC
  • mto: (130.2.2 go-upload-executables)
  • mto: This revision was merged to the branch mainline in revision 132.
  • Revision ID: roger.peppe@canonical.com-20120425155421-tmp9p3xdtep7m86i
version: simplify

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
 
3
3
import (
4
4
        "."
5
 
        "reflect"
 
5
        . "launchpad.net/gocheck"
6
6
        "testing"
7
7
)
8
8
 
 
9
type suite struct{}
 
10
 
 
11
var _ = Suite(suite{})
 
12
 
 
13
func Test(t *testing.T) {
 
14
        TestingT(t)
 
15
}
 
16
 
9
17
var cmpTests = []struct {
10
18
        v1, v2 string
11
 
        compat bool
12
19
        less   bool
13
20
        eq     bool
14
21
}{
15
 
        {"1.0.0", "1.0.0", true, false, true},
16
 
        {"01.0.0", "1.0.0", true, false, true},
17
 
        {"10.0.0", "9.0.0", false, false, false},
18
 
        {"1.0.0", "1.0.1", true, true, false},
19
 
        {"1.0.1", "1.0.0", true, false, false},
20
 
        {"1.0.0", "1.1.0", true, true, false},
21
 
        {"1.1.0", "1.0.0", false, false, false},
22
 
        {"1.0.0", "2.0.0", false, true, false},
23
 
        {"2.0.0", "1.0.0", false, false, false},
24
 
 
25
 
        // pre-release
26
 
        {"1.0.0", "1.0.0-alpha", true, false, false},
27
 
        {"1.0.0", "1.0.1-alpha", false, true, false},
28
 
        {"1.0.0-alpha", "1.0.0-beta", true, true, false},
29
 
        {"1.0.0-9999", "1.0.0-beta", true, true, false},
30
 
        {"1.0.0-99999999999", "1.0.0-199999999999.0.0", true, true, false},
31
 
        {"1.0.0-beta.9", "1.0.0-alpha.10", true, false, false},
32
 
        {"1.0.0-alpha.9", "1.0.0-alpha.10", true, true, false},
33
 
        {"1.0.0-alpha", "1.0.0-alpha-x", true, true, false},
34
 
        {"1.0.0-01", "1.0.0-1", true, false, true}, // N.B. equal but strings are not.
35
 
 
36
 
        // build
37
 
        {"1.0.0", "1.0.0+build", true, true, false},
38
 
        {"1.0.0+build", "1.0.0+crime", true, true, false},
39
 
        {"1.0.0+build.9", "1.0.0+build.10", true, true, false},
40
 
        {"1.0.0+build", "1.0.0+build-x", true, true, false},
41
 
 
42
 
        // semantics of pre-release vs build are poorly specified.
43
 
        {"1.0.0+build", "1.0.0-alpha+build", true, false, false},
 
22
        {"1.0.0", "1.0.0", false, true},
 
23
        {"01.0.0", "1.0.0", false, true},
 
24
        {"10.0.0", "9.0.0", false, false},
 
25
        {"1.0.0", "1.0.1", true, false},
 
26
        {"1.0.1", "1.0.0", false, false},
 
27
        {"1.0.0", "1.1.0", true, false},
 
28
        {"1.1.0", "1.0.0", false, false},
 
29
        {"1.0.0", "2.0.0", true, false},
 
30
        {"2.0.0", "1.0.0", false, false},
44
31
}
45
32
 
46
 
func TestComparison(t *testing.T) {
 
33
func (suite) TestComparison(c *C) {
47
34
        for i, test := range cmpTests {
 
35
                c.Logf("test %d", i)
48
36
                v1, err := version.Parse(test.v1)
49
 
                if err != nil {
50
 
                        t.Fatalf("test %d; %q failed to parse: %v", i, v1, err)
51
 
                }
 
37
                c.Assert(err, IsNil)
52
38
                v2, err := version.Parse(test.v2)
53
 
                if err != nil {
54
 
                        t.Fatalf("test %d; %q failed to parse: %v", i, v2, err)
55
 
                }
56
 
                compat := v1.Compatible(v2)
 
39
                c.Assert(err, IsNil)
57
40
                less := v1.Less(v2)
58
 
                gteq := v2.Less(v1)
59
 
                if compat != test.compat {
60
 
                        t.Errorf("test %d; %q vs %q compatibility mismatch; expected %v", i, test.v1, test.v2, test.compat)
61
 
                }
62
 
                if less != test.less {
63
 
                        t.Errorf("test %d; %q vs %q (%v vs %v) less mismatch; expected %v", i, test.v1, test.v2, v1, v2, test.less)
64
 
                }
 
41
                gt := v2.Less(v1)
 
42
                c.Check(less, Equals, test.less)
65
43
                if test.eq {
66
 
                        if gteq {
67
 
                                t.Errorf("test %d; %q vs %q; a==b but b < a", i, test.v1, test.v2)
68
 
                        }
 
44
                        c.Check(gt, Equals, false)
69
45
                } else {
70
 
                        if gteq != !test.less {
71
 
                                t.Errorf("test %d; %q vs %q; inverted less unexpected result; expected %v", i, test.v1, test.v2, !test.less)
72
 
                        }
 
46
                        c.Check(gt, Equals, !test.less)
73
47
                }
74
48
        }
75
49
}
76
50
 
77
51
var parseTests = []struct {
78
52
        v      string
79
 
        expect *version.Version
 
53
        err    string
 
54
        expect version.Version
 
55
        dev    bool
80
56
}{
81
 
        {"11.234.3456", &version.Version{Major: 11, Minor: 234, Patch: 3456}},
82
 
        {"0.0.0-09az-x-y.z.foo", &version.Version{Prerelease: []string{"09az-x-y", "z", "foo"}}},
83
 
        {"0.0.0+xyz.p-q", &version.Version{Build: []string{"xyz", "p-q"}}},
84
 
        {"1.2.3-alpha+build", &version.Version{
85
 
                Major:      1,
86
 
                Minor:      2,
87
 
                Patch:      3,
88
 
                Prerelease: []string{"alpha"},
89
 
                Build:      []string{"build"},
90
 
        }},
91
 
        {"1.0.0+build", &version.Version{
92
 
                Major: 1,
93
 
                Build: []string{"build"},
94
 
        }},
 
57
        {
 
58
                v:   "0.0.0",
 
59
                dev: false,
 
60
        },
 
61
        {
 
62
                v:      "1.0.0",
 
63
                expect: version.Version{Major: 1},
 
64
                dev:    true,
 
65
        },
 
66
        {
 
67
                v:      "0.1.0",
 
68
                expect: version.Version{Minor: 1},
 
69
                dev:    true,
 
70
        },
 
71
        {
 
72
                v:      "0.0.1",
 
73
                expect: version.Version{Patch: 1},
 
74
                dev:    true,
 
75
        },
 
76
        {
 
77
                v:      "10.234.3456",
 
78
                expect: version.Version{Major: 10, Minor: 234, Patch: 3456},
 
79
                dev:    false,
 
80
        },
 
81
        {
 
82
                v:   "1234567890.2.1",
 
83
                err: "invalid version.*",
 
84
        },
 
85
        {
 
86
                v:   "0.2..1",
 
87
                err: "invalid version.*",
 
88
        },
95
89
}
96
90
 
97
 
func TestParse(t *testing.T) {
 
91
func (suite) TestParse(c *C) {
98
92
        for i, test := range parseTests {
 
93
                c.Logf("test %d", i)
99
94
                v, err := version.Parse(test.v)
100
 
                if err != nil {
101
 
                        t.Fatalf("test %d; %q parse error %v", i, v, err)
102
 
                }
103
 
                if !reflect.DeepEqual(v, test.expect) {
104
 
                        t.Errorf("test %d; %q expected %v got %v", i, test.v, test.expect, v)
 
95
                if test.err != "" {
 
96
                        c.Assert(err, ErrorMatches, test.err)
 
97
                } else {
 
98
                        c.Assert(err, IsNil)
 
99
                        c.Assert(v, Equals, test.expect)
 
100
                        c.Check(v.IsDev(), Equals, test.dev)
105
101
                }
106
102
        }
107
103
}