Fixes npe when given filename ending with "." #1994

This commit is contained in:
Mike Farah 2024-03-30 14:00:40 +11:00
parent 101cf14b8c
commit 28c406706a
2 changed files with 57 additions and 3 deletions

View File

@ -123,11 +123,13 @@ func FormatStringFromFilename(filename string) string {
} }
func FormatFromString(format string) (*Format, error) { func FormatFromString(format string) (*Format, error) {
if format != "" {
for _, printerFormat := range Formats { for _, printerFormat := range Formats {
if printerFormat.MatchesName(format) { if printerFormat.MatchesName(format) {
return printerFormat, nil return printerFormat, nil
} }
} }
}
return nil, fmt.Errorf("unknown format '%v' please use [%v]", format, GetAvailableOutputFormatString()) return nil, fmt.Errorf("unknown format '%v' please use [%v]", format, GetAvailableOutputFormatString())
} }

52
pkg/yqlib/format_test.go Normal file
View File

@ -0,0 +1,52 @@
package yqlib
import (
"fmt"
"strings"
"testing"
"github.com/mikefarah/yq/v4/test"
)
type formatStringScenario struct {
description string
input string
expectedFormat *Format
expectedError string
}
var formatStringScenarios = []formatStringScenario{
{
description: "yaml",
input: "yaml",
expectedFormat: YamlFormat,
},
{
description: "Unknown format type",
input: "doc",
expectedError: "unknown format 'doc' please use",
},
{
description: "blank should error",
input: "",
expectedError: "unknown format '' please use",
},
}
func TestFormatFromString(t *testing.T) {
for _, tt := range formatStringScenarios {
actualFormat, actualError := FormatFromString(tt.input)
if tt.expectedError != "" {
if actualError == nil {
t.Errorf("Expected [%v] error but found none", tt.expectedError)
} else {
test.AssertResultWithContext(t, true, strings.Contains(actualError.Error(), tt.expectedError),
fmt.Sprintf("Expected [%v] to contain [%v]", actualError.Error(), tt.expectedError),
)
}
} else {
test.AssertResult(t, tt.expectedFormat, actualFormat)
}
}
}