diff options
author | Stefan Haller <stefan@haller-berlin.de> | 2024-03-10 20:59:11 +0100 |
---|---|---|
committer | Stefan Haller <stefan@haller-berlin.de> | 2024-03-12 13:27:14 +0100 |
commit | 2f4437591e9a6e2d7ce46a1a9607762bf2fd002a (patch) | |
tree | d24293aceb6c8b3fad58805ac18bb838620a173d /pkg/gui/types | |
parent | d12ceeb1ecac2bf9783f0febb48aca335805524a (diff) |
Show popup message with breaking changes on startup
Diffstat (limited to 'pkg/gui/types')
-rw-r--r-- | pkg/gui/types/version_number.go | 41 | ||||
-rw-r--r-- | pkg/gui/types/version_number_test.go | 81 |
2 files changed, 122 insertions, 0 deletions
diff --git a/pkg/gui/types/version_number.go b/pkg/gui/types/version_number.go new file mode 100644 index 000000000..ae51a2722 --- /dev/null +++ b/pkg/gui/types/version_number.go @@ -0,0 +1,41 @@ +package types + +import ( + "errors" + "regexp" + "strconv" +) + +type VersionNumber struct { + Major, Minor, Patch int +} + +func (v *VersionNumber) IsOlderThan(otherVersion *VersionNumber) bool { + this := v.Major*1000*1000 + v.Minor*1000 + v.Patch + other := otherVersion.Major*1000*1000 + otherVersion.Minor*1000 + otherVersion.Patch + return this < other +} + +func ParseVersionNumber(versionStr string) (*VersionNumber, error) { + re := regexp.MustCompile(`^v?(\d+)\.(\d+)(?:\.(\d+))?$`) + matches := re.FindStringSubmatch(versionStr) + if matches == nil { + return nil, errors.New("unexpected version format: " + versionStr) + } + + v := &VersionNumber{} + var err error + + if v.Major, err = strconv.Atoi(matches[1]); err != nil { + return nil, err + } + if v.Minor, err = strconv.Atoi(matches[2]); err != nil { + return nil, err + } + if len(matches[3]) > 0 { + if v.Patch, err = strconv.Atoi(matches[3]); err != nil { + return nil, err + } + } + return v, nil +} diff --git a/pkg/gui/types/version_number_test.go b/pkg/gui/types/version_number_test.go new file mode 100644 index 000000000..407a01139 --- /dev/null +++ b/pkg/gui/types/version_number_test.go @@ -0,0 +1,81 @@ +package types + +import ( + "errors" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestParseVersionNumber(t *testing.T) { + tests := []struct { + versionStr string + expected *VersionNumber + err error + }{ + { + versionStr: "1.2.3", + expected: &VersionNumber{ + Major: 1, + Minor: 2, + Patch: 3, + }, + err: nil, + }, + { + versionStr: "v1.2.3", + expected: &VersionNumber{ + Major: 1, + Minor: 2, + Patch: 3, + }, + err: nil, + }, + { + versionStr: "12.34.56", + expected: &VersionNumber{ + Major: 12, + Minor: 34, + Patch: 56, + }, + err: nil, + }, + { + versionStr: "1.2", + expected: &VersionNumber{ + Major: 1, + Minor: 2, + Patch: 0, + }, + err: nil, + }, + { + versionStr: "1", + expected: nil, + err: errors.New("unexpected version format: 1"), + }, + { + versionStr: "invalid", + expected: nil, + err: errors.New("unexpected version format: invalid"), + }, + { + versionStr: "junk_before 1.2.3", + expected: nil, + err: errors.New("unexpected version format: junk_before 1.2.3"), + }, + { + versionStr: "1.2.3 junk_after", + expected: nil, + err: errors.New("unexpected version format: 1.2.3 junk_after"), + }, + } + + for _, test := range tests { + t.Run(test.versionStr, func(t *testing.T) { + actual, err := ParseVersionNumber(test.versionStr) + assert.Equal(t, test.expected, actual) + assert.Equal(t, test.err, err) + }) + } +} |