289 lines
6.3 KiB
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()
|
|
}
|
|
}
|