package version import ( "encoding/json" "encoding/xml" "testing" ) func TestVersionBasic(t *testing.T) { testVersion := Version{} if testVersion.String() != "0" { t.FailNow() } testVersion.Major = 1 if testVersion.String() != "1" { t.FailNow() } testVersion.Minor = 2 if testVersion.String() != "1.2" { t.FailNow() } testVersion.Revision = 3 if testVersion.String() != "1.2.3" { t.FailNow() } testVersion.Build = 4 if testVersion.String() != "1.2.3.4" { t.FailNow() } if testVersion.SpecificString(1) != "1" { t.FailNow() } if testVersion.SpecificString(2) != "1.2" { t.FailNow() } if testVersion.SpecificString(3) != "1.2.3" { t.FailNow() } if testVersion.SpecificString(4) != "1.2.3.4" { t.FailNow() } testVersion.Major = 0 if testVersion.String() != "0.2.3.4" { t.FailNow() } } func TestVersionComparisons(t *testing.T) { versions := make([]Version, 4) versions[0] = Version{Major: 1} versions[1] = Version{Major: 1, Minor: 2} versions[2] = Version{Major: 1, Minor: 2, Revision: 3} versions[3] = Version{Major: 1, Minor: 2, Revision: 3, Build: 4} for i := 0; i < 4; i++ { for j := 0; j < 4; j++ { if i != j { if versions[i].Equal(versions[j]) { t.FailNow() } if i < j { if !versions[i].Smaller(versions[j]) { t.FailNow() } if versions[i].Larger(versions[j]) { t.FailNow() } } else { if versions[i].Smaller(versions[j]) { t.FailNow() } if !versions[i].Larger(versions[j]) { t.FailNow() } } } else { if !versions[i].Equal(versions[j]) { t.FailNow() } if versions[i].Smaller(versions[j]) { t.FailNow() } if versions[i].Larger(versions[j]) { t.FailNow() } } } } if !versions[0].Smaller(Version{Major: 2}) { t.FailNow() } } func TestVersionParsing(t *testing.T) { version, err := ParseVersion("") if nil == err { t.FailNow() } if version.String() != "0" { t.FailNow() } version, err = ParseVersion("a") if nil == err { t.FailNow() } if version.String() != "0" { t.FailNow() } version, err = ParseVersion("1") if nil != err { t.FailNow() } if version.String() != "1" { t.FailNow() } version, err = ParseVersion("1.") if nil == err { t.FailNow() } if version.String() != "1" { t.FailNow() } version, err = ParseVersion("1.a") if nil == err { t.FailNow() } if version.String() != "1" { t.FailNow() } version, err = ParseVersion("1.2") if nil != err { t.FailNow() } if version.String() != "1.2" { t.FailNow() } version, err = ParseVersion("1.2.") if nil == err { t.FailNow() } if version.String() != "1.2" { t.FailNow() } version, err = ParseVersion("1.2.a") if nil == err { t.FailNow() } if version.String() != "1.2" { t.FailNow() } version, err = ParseVersion("1.2.3") if nil != err { t.FailNow() } if version.String() != "1.2.3" { t.FailNow() } version, err = ParseVersion("1.2.3.") if nil == err { t.FailNow() } if version.String() != "1.2.3" { t.FailNow() } version, err = ParseVersion("1.2.3.a") if nil == err { t.FailNow() } if version.String() != "1.2.3" { t.FailNow() } version, err = ParseVersion("1.2.3.4") if nil != err { t.FailNow() } if version.String() != "1.2.3.4" { t.FailNow() } version, err = ParseVersion("1.2.3.4.") if nil != err { t.FailNow() } if version.String() != "1.2.3.4" { t.FailNow() } version, err = ParseVersion("1.2.3.4.a") if nil != err { t.FailNow() } if version.String() != "1.2.3.4" { t.FailNow() } var finalTest *Version if finalTest.Parse("1.2.3.4") == nil { t.FailNow() } } func TestVersionXML(t *testing.T) { versions := make([]Version, 7) versions[0] = Version{Major: 1} versions[1] = Version{Major: 1, Minor: 2} versions[2] = Version{Major: 1, Minor: 2, Revision: 3} versions[3] = Version{Major: 1, Minor: 2, Revision: 3, Build: 4} versions[4] = Version{Major: 0, Minor: 2, Revision: 3, Build: 4} versions[5] = Version{Major: 0, Minor: 0, Revision: 3, Build: 4} versions[6] = Version{Major: 0, Minor: 0, Revision: 0, Build: 4} var testVersion Version var err error for i := 0; i < 7; i++ { binary, err := xml.Marshal(versions[i]) if nil != err { t.FailNow() } err = xml.Unmarshal(binary, &testVersion) if nil != err { t.FailNow() } if !testVersion.Equal(versions[i]) { t.FailNow() } } err = xml.Unmarshal([]byte(""), &testVersion) if nil != err { t.FailNow() } if !testVersion.Equal(Version{Major: 4, Minor: 3, Revision: 2, Build: 1}) { t.FailNow() } err = xml.Unmarshal([]byte(""), &testVersion) if nil == err { t.FailNow() } err = xml.Unmarshal([]byte(""), &testVersion) if nil == err { t.FailNow() } err = xml.Unmarshal([]byte(""), &testVersion) if nil == err { t.FailNow() } err = xml.Unmarshal([]byte(""), &testVersion) if nil == err { t.FailNow() } err = xml.Unmarshal([]byte(""), &testVersion) if nil == err { t.FailNow() } err = xml.Unmarshal([]byte(""), &testVersion) if nil == err { t.FailNow() } err = xml.Unmarshal([]byte(""), &testVersion) if nil == err { t.FailNow() } } func TestVersionJSON(t *testing.T) { versions := make([]Version, 7) versions[0] = Version{Major: 1} versions[1] = Version{Major: 1, Minor: 2} versions[2] = Version{Major: 1, Minor: 2, Revision: 3} versions[3] = Version{Major: 1, Minor: 2, Revision: 3, Build: 4} versions[4] = Version{Major: 0, Minor: 2, Revision: 3, Build: 4} versions[5] = Version{Major: 0, Minor: 0, Revision: 3, Build: 4} versions[6] = Version{Major: 0, Minor: 0, Revision: 0, Build: 4} var testVersion Version var err error for i := 0; i < 7; i++ { binary, err := json.Marshal(versions[i]) if nil != err { t.FailNow() } err = json.Unmarshal(binary, &testVersion) if nil != err { t.FailNow() } if !testVersion.Equal(versions[i]) { t.FailNow() } } err = json.Unmarshal([]byte("\"binary\""), &testVersion) if nil == err { t.FailNow() } }