2021-11-17 15:34:35 +03:00
// Copyright 2021 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2021-11-17 15:34:35 +03:00
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"
2021-11-19 20:10:41 +03:00
"image/color"
2021-11-17 15:34:35 +03:00
_ "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"
2021-11-19 20:10:41 +03:00
"image/color"
2021-11-17 15:34:35 +03:00
_ "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 )
}