diff options
author | wxiaoguang <wxiaoguang@gmail.com> | 2021-11-17 20:34:35 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-17 20:34:35 +0800 |
commit | 750a8465f547e9f08a87612c75898d56b8ec1f88 (patch) | |
tree | f3eed8b40971c01a75617675a24014233b9f1cc7 /build/codeformat/formatimports_test.go | |
parent | 29cc169d20fc995072a819da6f996717a9899b3b (diff) | |
download | gitea-750a8465f547e9f08a87612c75898d56b8ec1f88.tar.gz gitea-750a8465f547e9f08a87612c75898d56b8ec1f88.zip |
A better go code formatter, and now `make fmt` can run in Windows (#17684)
* go build / format tools
* re-format imports
Diffstat (limited to 'build/codeformat/formatimports_test.go')
-rw-r--r-- | build/codeformat/formatimports_test.go | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/build/codeformat/formatimports_test.go b/build/codeformat/formatimports_test.go new file mode 100644 index 0000000000..d308353bda --- /dev/null +++ b/build/codeformat/formatimports_test.go @@ -0,0 +1,125 @@ +// Copyright 2021 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package codeformat + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestFormatImportsSimple(t *testing.T) { + formatted, err := formatGoImports([]byte(` +package codeformat + +import ( + "github.com/stretchr/testify/assert" + "testing" +) +`)) + + expected := ` +package codeformat + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) +` + + assert.NoError(t, err) + assert.Equal(t, expected, string(formatted)) +} + +func TestFormatImportsGroup(t *testing.T) { + // gofmt/goimports won't group the packages, for example, they produce such code: + // "bytes" + // "image" + // (a blank line) + // "fmt" + // "image/color/palette" + // our formatter does better, and these packages are grouped into one. + + formatted, err := formatGoImports([]byte(` +package test + +import ( + "bytes" + "fmt" + "image" + "image/color/palette" + + _ "image/gif" // for processing gif images + _ "image/jpeg" // for processing jpeg images + _ "image/png" // for processing png images + + "code.gitea.io/other/package" + + "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/util" + + "xorm.io/the/package" + + "github.com/issue9/identicon" + "github.com/nfnt/resize" + "github.com/oliamb/cutter" +) +`)) + + expected := ` +package test + +import ( + "bytes" + "fmt" + "image" + "image/color/palette" + + _ "image/gif" // for processing gif images + _ "image/jpeg" // for processing jpeg images + _ "image/png" // for processing png images + + "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/util" + + "code.gitea.io/other/package" + "github.com/issue9/identicon" + "github.com/nfnt/resize" + "github.com/oliamb/cutter" + "xorm.io/the/package" +) +` + + assert.NoError(t, err) + assert.Equal(t, expected, string(formatted)) +} + +func TestFormatImportsInvalidComment(t *testing.T) { + // why we shouldn't write comments between imports: it breaks the grouping of imports + // for example: + // "pkg1" + // "pkg2" + // // a comment + // "pkgA" + // "pkgB" + // the comment splits the packages into two groups, pkg1/2 are sorted separately, pkgA/B are sorted separately + // we don't want such code, so the code should be: + // "pkg1" + // "pkg2" + // "pkgA" // a comment + // "pkgB" + + _, err := formatGoImports([]byte(` +package test + +import ( + "image/jpeg" + // for processing gif images + "image/gif" +) +`)) + assert.ErrorIs(t, err, errInvalidCommentBetweenImports) +} |