1
0
Fork 0
golang-github-editorconfig-.../editorconfig_test.go
Daniel Baumann 2b08a89310
Adding upstream version 2.6.3.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-05-18 22:58:26 +02:00

179 lines
4.1 KiB
Go

package editorconfig //nolint:testpackage
import (
"errors"
"os"
"path/filepath"
"strings"
"testing"
"testing/iotest"
"github.com/editorconfig/editorconfig-core-go/v2/internal/assert"
)
const (
testFile = "testdata/.editorconfig"
)
func testParse(t *testing.T, ec *Editorconfig) {
t.Helper()
assert.Equal(t, true, ec.Root)
assert.Equal(t, 3, len(ec.Definitions))
def := ec.Definitions[0]
assert.Equal(t, "*", def.Selector)
assert.Equal(t, EndOfLineLf, def.EndOfLine)
assert.Equal(t, true, *def.InsertFinalNewline)
assert.Equal(t, CharsetUTF8, def.Charset)
assert.Equal(t, true, *def.TrimTrailingWhitespace)
assert.Equal(t, "8", def.IndentSize)
def = ec.Definitions[1]
assert.Equal(t, "*.go", def.Selector)
assert.Equal(t, IndentStyleTab, def.IndentStyle)
assert.Equal(t, "4", def.IndentSize)
assert.Equal(t, 4, def.TabWidth)
def = ec.Definitions[2]
assert.Equal(t, "*.{js,css,less,htm,html}", def.Selector)
assert.Equal(t, IndentStyleSpaces, def.IndentStyle)
assert.Equal(t, "2", def.IndentSize)
assert.Equal(t, 2, def.TabWidth)
}
func TestParseFile(t *testing.T) {
t.Parallel()
ec, err := ParseFile(testFile)
assert.Nil(t, err)
testParse(t, ec)
}
func TestParseBytes(t *testing.T) { //nolint:paralleltest
data, err := os.ReadFile(testFile)
assert.Nil(t, err)
ec, err := ParseBytes(data)
assert.Nil(t, err)
testParse(t, ec)
}
func TestParseReader(t *testing.T) { //nolint:paralleltest
f, err := os.Open(testFile)
assert.Nil(t, err)
defer f.Close()
ec, err := Parse(f)
assert.Nil(t, err)
testParse(t, ec)
}
func TestParseReaderTimeoutError(t *testing.T) { //nolint:paralleltest
f, err := os.Open(testFile)
assert.Nil(t, err)
defer f.Close()
_, err = Parse(iotest.TimeoutReader(f))
assert.Equal(t, true, errors.Is(err, iotest.ErrTimeout))
}
func TestGetDefinition(t *testing.T) {
t.Parallel()
ec, err := ParseFile(testFile)
if err != nil {
t.Errorf("Couldn't parse file: %v", err)
}
def, err := ec.GetDefinitionForFilename("main.go")
if err != nil {
t.Errorf("Couldn't parse file: %v", err)
}
assert.Equal(t, IndentStyleTab, def.IndentStyle)
assert.Equal(t, "4", def.IndentSize)
assert.Equal(t, 4, def.TabWidth)
assert.Equal(t, true, *def.TrimTrailingWhitespace)
assert.Equal(t, CharsetUTF8, def.Charset)
assert.Equal(t, true, *def.InsertFinalNewline)
assert.Equal(t, EndOfLineLf, def.EndOfLine)
}
func TestWrite(t *testing.T) { //nolint:paralleltest
ec, err := ParseFile(testFile)
if err != nil {
t.Errorf("Couldn't parse file: %v", err)
}
tempFile := filepath.Join(os.TempDir(), ".editorconfig")
f, err := os.OpenFile(tempFile, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0o644)
assert.Nil(t, err)
defer func() {
f.Close()
os.Remove(tempFile)
}()
err = ec.Write(f)
assert.Nil(t, err)
savedEc, err := ParseFile(tempFile)
assert.Nil(t, err)
testParse(t, savedEc)
}
func TestSave(t *testing.T) {
t.Parallel()
ec, err := ParseFile(testFile)
if err != nil {
t.Errorf("Couldn't parse file: %v", err)
}
tempFile := filepath.Join(os.TempDir(), ".editorconfig")
defer os.Remove(tempFile)
err = ec.Save(tempFile)
assert.Nil(t, err)
savedEc, err := ParseFile(tempFile)
assert.Nil(t, err)
testParse(t, savedEc)
}
func TestPublicTestDefinitionForFilename(t *testing.T) {
t.Parallel()
def, err := GetDefinitionForFilename("testdata/root/src/dummy.go")
assert.Nil(t, err)
assert.Equal(t, "4", def.IndentSize)
assert.Equal(t, IndentStyleTab, def.IndentStyle)
assert.Equal(t, true, *def.InsertFinalNewline)
assert.Equal(t, (*bool)(nil), def.TrimTrailingWhitespace)
}
func TestPublicTestDefinitionForFilenameWithConfigname(t *testing.T) {
t.Parallel()
def, warning, err := GetDefinitionForFilenameWithConfignameGraceful("testdata/root/src/dummy.go", "a.ini")
// Checking that we've got three warnings by splitting the lines
message := warning.Error()
merr := strings.Split(message, "\n")
assert.Equal(t, 3, len(merr))
assert.Nil(t, err)
assert.Equal(t, "5", def.IndentSize)
assert.Equal(t, IndentStyleSpaces, def.IndentStyle)
assert.Equal(t, false, *def.InsertFinalNewline)
assert.Equal(t, false, *def.TrimTrailingWhitespace)
}