diff --git a/pkg/yqlib/format.go b/pkg/yqlib/format.go index a74ce599..67cc1e22 100644 --- a/pkg/yqlib/format.go +++ b/pkg/yqlib/format.go @@ -113,7 +113,7 @@ func FormatStringFromFilename(filename string) string { if filename != "" { GetLogger().Debugf("checking filename '%s' for auto format detection", filename) ext := filepath.Ext(filename) - if ext != "" && ext[0] == '.' { + if len(ext) >= 2 && ext[0] == '.' { format := strings.ToLower(ext[1:]) GetLogger().Debugf("detected format '%s'", format) return format diff --git a/test/format_test.go b/test/format_test.go new file mode 100644 index 00000000..ffa41ee1 --- /dev/null +++ b/test/format_test.go @@ -0,0 +1,36 @@ +package test + +import ( + "testing" + + "github.com/mikefarah/yq/v4/pkg/yqlib" +) + +// only test format detection based on filename extension +func TestFormatStringFromFilename(t *testing.T) { + cases := []struct { + filename string + expected string + }{ + // filenames that have extensions + {"file.yaml", "yaml"}, + {"FILE.JSON", "json"}, + {"file.properties", "properties"}, + {"file.xml", "xml"}, + {"file.unknown", "unknown"}, + + // filenames without extensions + {"file", "yaml"}, + {"a.dir/file", "yaml"}, + {"file.", "yaml"}, + {".", "yaml"}, + {"", "yaml"}, + } + + for _, c := range cases { + result := yqlib.FormatStringFromFilename(c.filename) + if result != c.expected { + t.Errorf("FormatStringFromFilename(%q) = %q, wanted: %q", c.filename, result, c.expected) + } + } +}