You've already forked factorio-server-manager
mirror of
https://github.com/OpenFactorioServerManager/factorio-server-manager.git
synced 2025-07-13 01:10:25 +02:00
Updated tests, to also test compatibility
This commit is contained in:
@ -44,6 +44,9 @@ func SetupModPacks(t *testing.T, empty bool, emptyMods bool) {
|
|||||||
|
|
||||||
err = modList.DownloadMod("/download/train-station-overview/5fc1b28cd3d1bb6fd86d9432", "train-station-overview_3.0.0.zip", "train-station-overview")
|
err = modList.DownloadMod("/download/train-station-overview/5fc1b28cd3d1bb6fd86d9432", "train-station-overview_3.0.0.zip", "train-station-overview")
|
||||||
assert.NoError(t, err, `Error downloading Mod "train-station-overview"`)
|
assert.NoError(t, err, `Error downloading Mod "train-station-overview"`)
|
||||||
|
|
||||||
|
err = modList.DownloadMod("/download/sonaxaton-infinite-resources/5dca095d440570000be0de82", "sonaxaton-infinite-resources_0.4.1.zip", "sonaxaton-infinite-resources")
|
||||||
|
assert.NoError(t, err, `Error downloading Mod "sonaxaton-infinite-resources""`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -111,7 +114,48 @@ func TestModPackListHandler(t *testing.T) {
|
|||||||
SetupModPacks(t, false, false)
|
SetupModPacks(t, false, false)
|
||||||
defer CleanupModPacks(t)
|
defer CleanupModPacks(t)
|
||||||
|
|
||||||
expected := `[{"name":"test","mods":{"mods":[{"name":"belt-balancer","version":"3.0.0","title":"Belt Balancer","author":"knoxfighter","file_name":"belt-balancer_3.0.0.zip","factorio_version":"1.1.0.0","dependencies":null,"compatibility":true,"enabled":true},{"name":"train-station-overview","version":"3.0.0","title":"Train Station Overview","author":"knoxfighter","file_name":"train-station-overview_3.0.0.zip","factorio_version":"1.1.0.0","dependencies":null,"compatibility":true,"enabled":true}]}}]`
|
expected := `[
|
||||||
|
{
|
||||||
|
"name": "test",
|
||||||
|
"mods": {
|
||||||
|
"mods": [
|
||||||
|
{
|
||||||
|
"name": "belt-balancer",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"title": "Belt Balancer",
|
||||||
|
"author": "knoxfighter",
|
||||||
|
"file_name": "belt-balancer_3.0.0.zip",
|
||||||
|
"factorio_version": "1.1.0.0",
|
||||||
|
"dependencies": null,
|
||||||
|
"compatibility": true,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "sonaxaton-infinite-resources",
|
||||||
|
"version": "0.4.1",
|
||||||
|
"title": "Infinite Resources",
|
||||||
|
"author": "sonaxaton",
|
||||||
|
"file_name": "sonaxaton-infinite-resources_0.4.1.zip",
|
||||||
|
"factorio_version": "0.17.0.0",
|
||||||
|
"dependencies": null,
|
||||||
|
"compatibility": false,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "train-station-overview",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"title": "Train Station Overview",
|
||||||
|
"author": "knoxfighter",
|
||||||
|
"file_name": "train-station-overview_3.0.0.zip",
|
||||||
|
"factorio_version": "1.1.0.0",
|
||||||
|
"dependencies": null,
|
||||||
|
"compatibility": true,
|
||||||
|
"enabled": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]`
|
||||||
|
|
||||||
CallRoute(t, method, route, route, nil, handlerFunc, http.StatusOK, expected)
|
CallRoute(t, method, route, route, nil, handlerFunc, http.StatusOK, expected)
|
||||||
})
|
})
|
||||||
@ -140,7 +184,48 @@ func TestModPackCreateHandler(t *testing.T) {
|
|||||||
defer CleanupMods(t)
|
defer CleanupMods(t)
|
||||||
|
|
||||||
requestBody := strings.NewReader(`{"name": "test"}`)
|
requestBody := strings.NewReader(`{"name": "test"}`)
|
||||||
expected := `[{"name":"test","mods":{"mods":[{"name":"belt-balancer","version":"3.0.0","title":"Belt Balancer","author":"knoxfighter","file_name":"belt-balancer_3.0.0.zip","factorio_version":"1.1.0.0","dependencies":null,"compatibility":true,"enabled":true},{"name":"train-station-overview","version":"3.0.0","title":"Train Station Overview","author":"knoxfighter","file_name":"train-station-overview_3.0.0.zip","factorio_version":"1.1.0.0","dependencies":null,"compatibility":true,"enabled":true}]}}]`
|
expected := `[
|
||||||
|
{
|
||||||
|
"name": "test",
|
||||||
|
"mods": {
|
||||||
|
"mods": [
|
||||||
|
{
|
||||||
|
"name": "belt-balancer",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"title": "Belt Balancer",
|
||||||
|
"author": "knoxfighter",
|
||||||
|
"file_name": "belt-balancer_3.0.0.zip",
|
||||||
|
"factorio_version": "1.1.0.0",
|
||||||
|
"dependencies": null,
|
||||||
|
"compatibility": true,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "sonaxaton-infinite-resources",
|
||||||
|
"version": "0.4.1",
|
||||||
|
"title": "Infinite Resources",
|
||||||
|
"author": "sonaxaton",
|
||||||
|
"file_name": "sonaxaton-infinite-resources_0.4.1.zip",
|
||||||
|
"factorio_version": "0.17.0.0",
|
||||||
|
"dependencies": null,
|
||||||
|
"compatibility": false,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "train-station-overview",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"title": "Train Station Overview",
|
||||||
|
"author": "knoxfighter",
|
||||||
|
"file_name": "train-station-overview_3.0.0.zip",
|
||||||
|
"factorio_version": "1.1.0.0",
|
||||||
|
"dependencies": null,
|
||||||
|
"compatibility": true,
|
||||||
|
"enabled": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]`
|
||||||
|
|
||||||
CallRoute(t, method, route, route, requestBody, handlerFunc, http.StatusOK, expected)
|
CallRoute(t, method, route, route, requestBody, handlerFunc, http.StatusOK, expected)
|
||||||
})
|
})
|
||||||
@ -183,7 +268,43 @@ func TestModPackLoadHandler(t *testing.T) {
|
|||||||
SetupMods(t, true)
|
SetupMods(t, true)
|
||||||
defer CleanupMods(t)
|
defer CleanupMods(t)
|
||||||
|
|
||||||
expected := `{"mods":[{"name":"belt-balancer","version":"3.0.0","title":"Belt Balancer","author":"knoxfighter","file_name":"belt-balancer_3.0.0.zip","factorio_version":"1.1.0.0","dependencies":null,"compatibility":true,"enabled":true},{"name":"train-station-overview","version":"3.0.0","title":"Train Station Overview","author":"knoxfighter","file_name":"train-station-overview_3.0.0.zip","factorio_version":"1.1.0.0","dependencies":null,"compatibility":true,"enabled":true}]}`
|
expected := `{
|
||||||
|
"mods": [
|
||||||
|
{
|
||||||
|
"name": "belt-balancer",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"title": "Belt Balancer",
|
||||||
|
"author": "knoxfighter",
|
||||||
|
"file_name": "belt-balancer_3.0.0.zip",
|
||||||
|
"factorio_version": "1.1.0.0",
|
||||||
|
"dependencies": null,
|
||||||
|
"compatibility": true,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "sonaxaton-infinite-resources",
|
||||||
|
"version": "0.4.1",
|
||||||
|
"title": "Infinite Resources",
|
||||||
|
"author": "sonaxaton",
|
||||||
|
"file_name": "sonaxaton-infinite-resources_0.4.1.zip",
|
||||||
|
"factorio_version": "0.17.0.0",
|
||||||
|
"dependencies": null,
|
||||||
|
"compatibility": false,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "train-station-overview",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"title": "Train Station Overview",
|
||||||
|
"author": "knoxfighter",
|
||||||
|
"file_name": "train-station-overview_3.0.0.zip",
|
||||||
|
"factorio_version": "1.1.0.0",
|
||||||
|
"dependencies": null,
|
||||||
|
"compatibility": true,
|
||||||
|
"enabled": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}`
|
||||||
|
|
||||||
CallRoute(t, method, baseRoute, route, nil, handlerFunc, http.StatusOK, expected)
|
CallRoute(t, method, baseRoute, route, nil, handlerFunc, http.StatusOK, expected)
|
||||||
|
|
||||||
@ -246,7 +367,43 @@ func TestModPackModListHandler(t *testing.T) {
|
|||||||
SetupModPacks(t, false, false)
|
SetupModPacks(t, false, false)
|
||||||
defer CleanupModPacks(t)
|
defer CleanupModPacks(t)
|
||||||
|
|
||||||
expected := `{"mods":[{"name":"belt-balancer","version":"3.0.0","title":"Belt Balancer","author":"knoxfighter","file_name":"belt-balancer_3.0.0.zip","factorio_version":"1.1.0.0","dependencies":null,"compatibility":true,"enabled":true},{"name":"train-station-overview","version":"3.0.0","title":"Train Station Overview","author":"knoxfighter","file_name":"train-station-overview_3.0.0.zip","factorio_version":"1.1.0.0","dependencies":null,"compatibility":true,"enabled":true}]}`
|
expected := `{
|
||||||
|
"mods": [
|
||||||
|
{
|
||||||
|
"name": "belt-balancer",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"title": "Belt Balancer",
|
||||||
|
"author": "knoxfighter",
|
||||||
|
"file_name": "belt-balancer_3.0.0.zip",
|
||||||
|
"factorio_version": "1.1.0.0",
|
||||||
|
"dependencies": null,
|
||||||
|
"compatibility": true,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "sonaxaton-infinite-resources",
|
||||||
|
"version": "0.4.1",
|
||||||
|
"title": "Infinite Resources",
|
||||||
|
"author": "sonaxaton",
|
||||||
|
"file_name": "sonaxaton-infinite-resources_0.4.1.zip",
|
||||||
|
"factorio_version": "0.17.0.0",
|
||||||
|
"dependencies": null,
|
||||||
|
"compatibility": false,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "train-station-overview",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"title": "Train Station Overview",
|
||||||
|
"author": "knoxfighter",
|
||||||
|
"file_name": "train-station-overview_3.0.0.zip",
|
||||||
|
"factorio_version": "1.1.0.0",
|
||||||
|
"dependencies": null,
|
||||||
|
"compatibility": true,
|
||||||
|
"enabled": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}`
|
||||||
|
|
||||||
CallRoute(t, method, baseRoute, route, nil, handlerFunc, http.StatusOK, expected)
|
CallRoute(t, method, baseRoute, route, nil, handlerFunc, http.StatusOK, expected)
|
||||||
})
|
})
|
||||||
|
@ -90,6 +90,11 @@ func SetupMods(t *testing.T, empty bool) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf(`Error downloading Mod "train-station-overview": %s`, err)
|
t.Fatalf(`Error downloading Mod "train-station-overview": %s`, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = mod.DownloadMod("/download/sonaxaton-infinite-resources/5dca095d440570000be0de82", "sonaxaton-infinite-resources_0.4.1.zip", "sonaxaton-infinite-resources")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf(`Error downloading Mod "sonaxaton-infinite-resources": %s`, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,7 +172,41 @@ func TestListInstalledModsHandler(t *testing.T) {
|
|||||||
|
|
||||||
route := "/api/mods/list"
|
route := "/api/mods/list"
|
||||||
|
|
||||||
expected := `[{"name":"belt-balancer","version":"3.0.0","title":"Belt Balancer","author":"knoxfighter","file_name":"belt-balancer_3.0.0.zip","factorio_version":"1.1.0.0","dependencies":null,"compatibility":true,"enabled":true},{"name":"train-station-overview","version":"3.0.0","title":"Train Station Overview","author":"knoxfighter","file_name":"train-station-overview_3.0.0.zip","factorio_version":"1.1.0.0","dependencies":null,"compatibility":true,"enabled":true}]`
|
expected := `[
|
||||||
|
{
|
||||||
|
"name": "belt-balancer",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"title": "Belt Balancer",
|
||||||
|
"author": "knoxfighter",
|
||||||
|
"file_name": "belt-balancer_3.0.0.zip",
|
||||||
|
"factorio_version": "1.1.0.0",
|
||||||
|
"dependencies": null,
|
||||||
|
"compatibility": true,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "sonaxaton-infinite-resources",
|
||||||
|
"version": "0.4.1",
|
||||||
|
"title": "Infinite Resources",
|
||||||
|
"author": "sonaxaton",
|
||||||
|
"file_name": "sonaxaton-infinite-resources_0.4.1.zip",
|
||||||
|
"factorio_version": "0.17.0.0",
|
||||||
|
"dependencies": null,
|
||||||
|
"compatibility": false,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "train-station-overview",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"title": "Train Station Overview",
|
||||||
|
"author": "knoxfighter",
|
||||||
|
"file_name": "train-station-overview_3.0.0.zip",
|
||||||
|
"factorio_version": "1.1.0.0",
|
||||||
|
"dependencies": null,
|
||||||
|
"compatibility": true,
|
||||||
|
"enabled": true
|
||||||
|
}
|
||||||
|
]`
|
||||||
|
|
||||||
CallRoute(t, "GET", route, route, nil, ListInstalledModsHandler, http.StatusOK, expected)
|
CallRoute(t, "GET", route, route, nil, ListInstalledModsHandler, http.StatusOK, expected)
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,7 @@ func (modInfoList *ModInfoList) listInstalledMods() error {
|
|||||||
server := GetFactorioServer()
|
server := GetFactorioServer()
|
||||||
|
|
||||||
if !base.Equals(NilVersion) {
|
if !base.Equals(NilVersion) {
|
||||||
modInfo.Compatibility = server.Version.Compare(base, op)
|
modInfo.Compatibility = server.Version.Compatible(base, op)
|
||||||
} else {
|
} else {
|
||||||
log.Println("error finding basemodDependency. Using FactorioVersion...")
|
log.Println("error finding basemodDependency. Using FactorioVersion...")
|
||||||
modInfo.Compatibility = !server.Version.Less(modInfo.FactorioVersion)
|
modInfo.Compatibility = !server.Version.Less(modInfo.FactorioVersion)
|
||||||
|
@ -76,6 +76,7 @@ type Mod struct {
|
|||||||
CRC uint32 `json:"crc"`
|
CRC uint32 `json:"crc"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Mostly based on https://forums.factorio.com/viewtopic.php?f=5&t=8568&p=277892&hilit=level.dat+python#p277892
|
||||||
func (h *SaveHeader) ReadFrom(r io.Reader) (err error) {
|
func (h *SaveHeader) ReadFrom(r io.Reader) (err error) {
|
||||||
var scratch [8]byte
|
var scratch [8]byte
|
||||||
|
|
||||||
@ -91,7 +92,7 @@ func (h *SaveHeader) ReadFrom(r io.Reader) (err error) {
|
|||||||
|
|
||||||
atLeast016 := !h.FactorioVersion.Less(Version{0, 16, 0, 0})
|
atLeast016 := !h.FactorioVersion.Less(Version{0, 16, 0, 0})
|
||||||
|
|
||||||
if h.FactorioVersion.Greater(Version{0, 17, 0, 0}) {
|
if !h.FactorioVersion.Less(Version{0, 17, 0, 0}) {
|
||||||
//FIXME correct naming
|
//FIXME correct naming
|
||||||
_, err = r.Read(scratch[:1])
|
_, err = r.Read(scratch[:1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -99,39 +100,46 @@ func (h *SaveHeader) ReadFrom(r io.Reader) (err error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// campaign, example: "transport-belt-madness
|
||||||
h.Campaign, err = readString(r, Version(h.FactorioVersion), false)
|
h.Campaign, err = readString(r, Version(h.FactorioVersion), false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("read Campaign: %v", err)
|
return fmt.Errorf("read Campaign: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// level name, example: "level-01"
|
||||||
h.Name, err = readString(r, Version(h.FactorioVersion), false)
|
h.Name, err = readString(r, Version(h.FactorioVersion), false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("read Name: %v", err)
|
return fmt.Errorf("read Name: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// name of the base mod, example: "base"
|
||||||
h.BaseMod, err = readString(r, Version(h.FactorioVersion), false)
|
h.BaseMod, err = readString(r, Version(h.FactorioVersion), false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("read BaseMod: %v", err)
|
return fmt.Errorf("read BaseMod: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Read Difficulty
|
||||||
_, err = r.Read(scratch[:1])
|
_, err = r.Read(scratch[:1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("read Difficulty: %v", err)
|
return fmt.Errorf("read Difficulty: %v", err)
|
||||||
}
|
}
|
||||||
h.Difficulty = scratch[0]
|
h.Difficulty = scratch[0]
|
||||||
|
|
||||||
|
// Read finished as bool
|
||||||
_, err = r.Read(scratch[:1])
|
_, err = r.Read(scratch[:1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("read Finished: %v", err)
|
return fmt.Errorf("read Finished: %v", err)
|
||||||
}
|
}
|
||||||
h.Finished = scratch[0] != 0
|
h.Finished = scratch[0] != 0
|
||||||
|
|
||||||
|
// Read playerWon as bool
|
||||||
_, err = r.Read(scratch[:1])
|
_, err = r.Read(scratch[:1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("read PlayerWon: %v", err)
|
return fmt.Errorf("read PlayerWon: %v", err)
|
||||||
}
|
}
|
||||||
h.PlayerWon = scratch[0] != 0
|
h.PlayerWon = scratch[0] != 0
|
||||||
|
|
||||||
|
// Read NextLevel string (normally empty)
|
||||||
h.NextLevel, err = readString(r, Version(h.FactorioVersion), false)
|
h.NextLevel, err = readString(r, Version(h.FactorioVersion), false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("read NextLevel: %v", err)
|
return fmt.Errorf("read NextLevel: %v", err)
|
||||||
@ -257,6 +265,7 @@ func readOptimUint(r io.Reader, v Version, bitSize int) (uint32, error) {
|
|||||||
func readString(r io.Reader, game Version, forceOptimized bool) (s string, err error) {
|
func readString(r io.Reader, game Version, forceOptimized bool) (s string, err error) {
|
||||||
var n uint32
|
var n uint32
|
||||||
|
|
||||||
|
// since 0.16 read optimized uint
|
||||||
if !game.Less(Version{0, 16, 0, 0}) || forceOptimized {
|
if !game.Less(Version{0, 16, 0, 0}) || forceOptimized {
|
||||||
n, err = readOptimUint(r, game, 32)
|
n, err = readOptimUint(r, game, 32)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -42,7 +42,13 @@ func (v Version) Equals(b Version) bool {
|
|||||||
return v[0] == b[0] && v[1] == b[1] && v[2] == b[2] && v[3] == b[3]
|
return v[0] == b[0] && v[1] == b[1] && v[2] == b[2] && v[3] == b[3]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Greater cannot be !Less, cause incompatibility is given, when changing super-major or major version.
|
||||||
|
* So this will give incompatibilities between two different versions.
|
||||||
|
*/
|
||||||
|
|
||||||
// Less returns true if the receiver version is less than the argument version
|
// Less returns true if the receiver version is less than the argument version
|
||||||
|
// This has to be kept like it is, it used to determine the versions for the binary level.dat
|
||||||
func (v Version) Less(b Version) bool {
|
func (v Version) Less(b Version) bool {
|
||||||
switch {
|
switch {
|
||||||
case v[0] < b[0]:
|
case v[0] < b[0]:
|
||||||
@ -61,23 +67,30 @@ func (v Version) Less(b Version) bool {
|
|||||||
// Greater returns true if the receiver version is greater than the argument version
|
// Greater returns true if the receiver version is greater than the argument version
|
||||||
func (v Version) Greater(b Version) bool { return !v.Equals(b) && !v.Less(b) }
|
func (v Version) Greater(b Version) bool { return !v.Equals(b) && !v.Less(b) }
|
||||||
|
|
||||||
func (v Version) ge(b Version) bool { return v.Equals(b) || v.Greater(b) }
|
// GreaterC called to determine the compatibility with a greater version
|
||||||
func (v Version) le(b Version) bool { return v.Equals(b) || v.Less(b) }
|
// Versions, that have different super/major version are not compatible!
|
||||||
|
func (v *Version) GreaterC(b Version) bool {
|
||||||
|
return v[0] == b[0] && v[1] == b[1] && (v[2] > b[2] || (v[2] == b[2] && v[3] > b[3]))
|
||||||
|
}
|
||||||
|
|
||||||
// Compare returns true if the comparison between the two version operands is valid.
|
func (v Version) ge(b Version) bool { return v.Equals(b) || v.Greater(b) }
|
||||||
|
func (v Version) geC(b Version) bool { return v.Equals(b) || v.GreaterC(b) }
|
||||||
|
func (v Version) le(b Version) bool { return v.Equals(b) || v.Less(b) }
|
||||||
|
|
||||||
|
// Compatible returns true if the comparison between the two version operands is valid.
|
||||||
// Supported ops are: ==, !=, >, <, >=, <=
|
// Supported ops are: ==, !=, >, <, >=, <=
|
||||||
func (v Version) Compare(b Version, op string) bool {
|
func (v Version) Compatible(b Version, op string) bool {
|
||||||
switch op {
|
switch op {
|
||||||
case "==":
|
case "==":
|
||||||
return v.Equals(b)
|
return v.Equals(b)
|
||||||
case "!=":
|
case "!=":
|
||||||
return !v.Equals(b)
|
return !v.Equals(b)
|
||||||
case ">":
|
case ">":
|
||||||
return v.Greater(b)
|
return v.GreaterC(b)
|
||||||
case "<":
|
case "<":
|
||||||
return v.Less(b)
|
return v.Less(b)
|
||||||
case ">=":
|
case ">=":
|
||||||
return v.ge(b)
|
return v.geC(b)
|
||||||
case "<=":
|
case "<=":
|
||||||
return v.le(b)
|
return v.le(b)
|
||||||
default:
|
default:
|
||||||
|
Reference in New Issue
Block a user