go_version/version_test.go

289 lines
6.3 KiB
Go

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("<Version Major=\"4\" Minor=\"3\" Revision=\"2\" Build=\"1\"/>"), &testVersion)
if nil != err {
t.FailNow()
}
if !testVersion.Equal(Version{Major: 4, Minor: 3, Revision: 2, Build: 1}) {
t.FailNow()
}
err = xml.Unmarshal([]byte("<Version Major=\"a\" Minor=\"3\" Revision=\"2\" Build=\"1\"/>"), &testVersion)
if nil == err {
t.FailNow()
}
err = xml.Unmarshal([]byte("<Version Major=\"4\" Minor=\"b\" Revision=\"2\" Build=\"1\"/>"), &testVersion)
if nil == err {
t.FailNow()
}
err = xml.Unmarshal([]byte("<Version Major=\"4\" Minor=\"3\" Revision=\"c\" Build=\"1\"/>"), &testVersion)
if nil == err {
t.FailNow()
}
err = xml.Unmarshal([]byte("<Version Major=\"4\" Minor=\"3\" Revision=\"2\" Build=\"d\"/>"), &testVersion)
if nil == err {
t.FailNow()
}
err = xml.Unmarshal([]byte("<Version Major=\"4\" Minor=\"3\" Revision=\"2\" Build=\"1\"></Versions>"), &testVersion)
if nil == err {
t.FailNow()
}
err = xml.Unmarshal([]byte("<Version Major=\"4\" Minor=\"3\" Revision=\"2\" Build=\"1\"><Dummy/></Version>"), &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()
}
}