From cfbeb1efd148108d70b83a7ed0a5d0f74ddb5538 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sun, 10 Oct 2021 11:18:52 +1100 Subject: [PATCH] [v2] Fix parsing multiline require in go.mod --- v2/internal/gomod/gomod.go | 11 +-- v2/internal/gomod/gomod_test.go | 127 ++++++++++++++++++++++++++++++-- 2 files changed, 127 insertions(+), 11 deletions(-) diff --git a/v2/internal/gomod/gomod.go b/v2/internal/gomod/gomod.go index 8a482b5da18..f0f17b39af3 100644 --- a/v2/internal/gomod/gomod.go +++ b/v2/internal/gomod/gomod.go @@ -16,11 +16,12 @@ func GetWailsVersionFromModFile(goModText []byte) (*semver.Version, error) { if req.Syntax == nil { continue } - if len(req.Syntax.Token) < 3 { - continue + tokenPosition := 0 + if !req.Syntax.InBlock { + tokenPosition = 1 } - if req.Syntax.Token[1] == "github.com/wailsapp/wails/v2" { - version := req.Syntax.Token[2] + if req.Syntax.Token[tokenPosition] == "github.com/wailsapp/wails/v2" { + version := req.Syntax.Token[tokenPosition+1] return semver.NewVersion(version) } } @@ -34,7 +35,7 @@ func GoModOutOfSync(goModData []byte, currentVersion string) (bool, error) { return false, err } result, err := semver.NewVersion(currentVersion) - if err != nil { + if err != nil || result == nil { return false, fmt.Errorf("Unable to parse Wails version: %s", currentVersion) } diff --git a/v2/internal/gomod/gomod_test.go b/v2/internal/gomod/gomod_test.go index f05475f7063..35a46821eaf 100644 --- a/v2/internal/gomod/gomod_test.go +++ b/v2/internal/gomod/gomod_test.go @@ -2,6 +2,7 @@ package gomod import ( "github.com/Masterminds/semver" + "github.com/matryer/is" "reflect" "testing" ) @@ -10,7 +11,7 @@ const basic string = `module changeme go 1.17 -require github.com/wailsapp/wails/v2 v2.0.0-beta.8 +require github.com/wailsapp/wails/v2 v2.0.0-beta.7 require ( github.com/andybalholm/brotli v1.0.2 // indirect @@ -44,7 +45,7 @@ require ( golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 // indirect ) -//replace github.com/wailsapp/wails/v2 v2.0.0-beta.8 => C:\Users\leaan\Documents\wails-v2-beta\wails\v2 +//replace github.com/wailsapp/wails/v2 v2.0.0-beta.7 => C:\Users\leaan\Documents\wails-v2-beta\wails\v2 ` func TestGetWailsVersion(t *testing.T) { @@ -54,7 +55,7 @@ func TestGetWailsVersion(t *testing.T) { want *semver.Version wantErr bool }{ - {"basic", []byte(basic), semver.MustParse("v2.0.0-beta.8"), false}, + {"basic", []byte(basic), semver.MustParse("v2.0.0-beta.7"), false}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -108,10 +109,97 @@ require ( golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 // indirect ) -//replace github.com/wailsapp/wails/v2 v2.0.0-beta.8 => C:\Users\leaan\Documents\wails-v2-beta\wails\v2 +//replace github.com/wailsapp/wails/v2 v2.0.0-beta.7 => C:\Users\leaan\Documents\wails-v2-beta\wails\v2 +` + +const multilineRequire = `module changeme + +go 1.17 + +require ( + github.com/wailsapp/wails/v2 v2.0.0-beta.7 +) +require ( + github.com/andybalholm/brotli v1.0.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/fasthttp/websocket v0.0.0-20200320073529-1554a54587ab // indirect + github.com/gabriel-vasile/mimetype v1.3.1 // indirect + github.com/go-ole/go-ole v1.2.5 // indirect + github.com/gofiber/fiber/v2 v2.17.0 // indirect + github.com/gofiber/websocket/v2 v2.0.8 // indirect + github.com/google/uuid v1.1.2 // indirect + github.com/imdario/mergo v0.3.12 // indirect + github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e // indirect + github.com/klauspost/compress v1.12.2 // indirect + github.com/leaanthony/debme v1.2.1 // indirect + github.com/leaanthony/go-ansi-parser v1.0.1 // indirect + github.com/leaanthony/go-common-file-dialog v1.0.3 // indirect + github.com/leaanthony/go-webview2 v0.0.0-20211007092718-65d2f028ef2d // indirect + github.com/leaanthony/gosod v1.0.3 // indirect + github.com/leaanthony/slicer v1.5.0 // indirect + github.com/leaanthony/typescriptify-golang-structs v0.1.7 // indirect + github.com/leaanthony/webview2runtime v1.1.0 // indirect + github.com/leaanthony/winc v0.0.0-20210921073452-54963136bf18 // indirect + github.com/pkg/browser v0.0.0-20210706143420-7d21f8c997e2 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/savsgio/gotils v0.0.0-20200117113501-90175b0fbe3f // indirect + github.com/tkrajina/go-reflector v0.5.5 // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasthttp v1.28.0 // indirect + github.com/valyala/tcplisten v1.0.0 // indirect + golang.org/x/net v0.0.0-20210510120150-4163338589ed // indirect + golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 // indirect +) + +//replace github.com/wailsapp/wails/v2 v2.0.0-beta.7 => C:\Users\leaan\Documents\wails-v2-beta\wails\v2 +` + +const multilineRequireUpdated = `module changeme + +go 1.17 + +require ( + github.com/wailsapp/wails/v2 v2.0.0-beta.8 +) + +require ( + github.com/andybalholm/brotli v1.0.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/fasthttp/websocket v0.0.0-20200320073529-1554a54587ab // indirect + github.com/gabriel-vasile/mimetype v1.3.1 // indirect + github.com/go-ole/go-ole v1.2.5 // indirect + github.com/gofiber/fiber/v2 v2.17.0 // indirect + github.com/gofiber/websocket/v2 v2.0.8 // indirect + github.com/google/uuid v1.1.2 // indirect + github.com/imdario/mergo v0.3.12 // indirect + github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e // indirect + github.com/klauspost/compress v1.12.2 // indirect + github.com/leaanthony/debme v1.2.1 // indirect + github.com/leaanthony/go-ansi-parser v1.0.1 // indirect + github.com/leaanthony/go-common-file-dialog v1.0.3 // indirect + github.com/leaanthony/go-webview2 v0.0.0-20211007092718-65d2f028ef2d // indirect + github.com/leaanthony/gosod v1.0.3 // indirect + github.com/leaanthony/slicer v1.5.0 // indirect + github.com/leaanthony/typescriptify-golang-structs v0.1.7 // indirect + github.com/leaanthony/webview2runtime v1.1.0 // indirect + github.com/leaanthony/winc v0.0.0-20210921073452-54963136bf18 // indirect + github.com/pkg/browser v0.0.0-20210706143420-7d21f8c997e2 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/savsgio/gotils v0.0.0-20200117113501-90175b0fbe3f // indirect + github.com/tkrajina/go-reflector v0.5.5 // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasthttp v1.28.0 // indirect + github.com/valyala/tcplisten v1.0.0 // indirect + golang.org/x/net v0.0.0-20210510120150-4163338589ed // indirect + golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 // indirect +) + +//replace github.com/wailsapp/wails/v2 v2.0.0-beta.7 => C:\Users\leaan\Documents\wails-v2-beta\wails\v2 ` func TestUpdateGoModVersion(t *testing.T) { + is2 := is.New(t) + type args struct { goModText []byte currentVersion string @@ -123,6 +211,7 @@ func TestUpdateGoModVersion(t *testing.T) { wantErr bool }{ {"basic", args{[]byte(basic), "v2.0.0-beta.8"}, []byte(basicUpdated), false}, + {"basicmultiline", args{[]byte(multilineRequire), "v2.0.0-beta.8"}, []byte(multilineRequireUpdated), false}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -131,9 +220,35 @@ func TestUpdateGoModVersion(t *testing.T) { t.Errorf("UpdateGoModVersion() error = %v, wantErr %v", err, tt.wantErr) return } - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("UpdateGoModVersion() got = %v, want %v", string(got), string(tt.want)) + is2.Equal(got, tt.want) + }) + } +} + +func TestGoModOutOfSync(t *testing.T) { + is2 := is.New(t) + + type args struct { + goModData []byte + currentVersion string + } + tests := []struct { + name string + args args + want bool + wantErr bool + }{ + {"basic", args{[]byte(basic), "v2.0.0-beta.8"}, true, false}, + {"basicmultiline", args{[]byte(multilineRequire), "v2.0.0-beta.8"}, true, false}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := GoModOutOfSync(tt.args.goModData, tt.args.currentVersion) + if (err != nil) != tt.wantErr { + t.Errorf("GoModOutOfSync() error = %v, wantErr %v", err, tt.wantErr) + return } + is2.Equal(got, tt.want) }) } }