Skip to content

Commit

Permalink
[v2] Fix parsing multiline require in go.mod
Browse files Browse the repository at this point in the history
  • Loading branch information
leaanthony committed Oct 10, 2021
1 parent 3022b0b commit cfbeb1e
Show file tree
Hide file tree
Showing 2 changed files with 127 additions and 11 deletions.
11 changes: 6 additions & 5 deletions v2/internal/gomod/gomod.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}
Expand All @@ -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)
}

Expand Down
127 changes: 121 additions & 6 deletions v2/internal/gomod/gomod_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package gomod

import (
"github.com/Masterminds/semver"
"github.com/matryer/is"
"reflect"
"testing"
)
Expand All @@ -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
Expand Down Expand Up @@ -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) {
Expand All @@ -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) {
Expand Down Expand Up @@ -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
Expand All @@ -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) {
Expand All @@ -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)
})
}
}

0 comments on commit cfbeb1e

Please sign in to comment.