ref: c43b512b4700f76ac77f12d632bb030c3a241393
parent: 19f2e729135af700c5d4aa06e7b3540e6d4847fd
author: Bjørn Erik Pedersen <[email protected]>
date: Tue Jun 20 13:20:08 EDT 2017
output: Identify extension-less text types as text See #3614
--- a/output/outputFormat.go
+++ b/output/outputFormat.go
@@ -219,7 +219,12 @@
}
if ext != "" {
- return formats.GetBySuffix(ext)
+ f, found = formats.GetBySuffix(ext)
+ if !found && len(parts) == 2 {
+ // For extensionless output formats (e.g. Netlify's _redirects)
+ // we must fall back to using the extension as format lookup.
+ f, found = formats.GetByName(ext)
+ }
}
return
}
--- a/output/outputFormat_test.go
+++ b/output/outputFormat_test.go
@@ -91,6 +91,47 @@
require.False(t, found)
}
+func TestGetFormatByFilename(t *testing.T) {
+ noExtNoDelimMediaType := media.TextType
+ noExtNoDelimMediaType.Suffix = ""
+ noExtNoDelimMediaType.Delimiter = ""
+
+ noExtMediaType := media.TextType
+ noExtMediaType.Suffix = ""
+
+ var (
+ noExtDelimFormat = Format{
+ Name: "NEM",
+ MediaType: noExtNoDelimMediaType,
+ BaseName: "_redirects",
+ }
+ noExt = Format{
+ Name: "NEX",
+ MediaType: noExtMediaType,
+ BaseName: "next",
+ }
+ )
+
+ formats := Formats{AMPFormat, HTMLFormat, noExtDelimFormat, noExt, CalendarFormat}
+ f, found := formats.FromFilename("my.amp.html")
+ require.True(t, found)
+ require.Equal(t, AMPFormat, f)
+ f, found = formats.FromFilename("my.ics")
+ require.True(t, found)
+ f, found = formats.FromFilename("my.html")
+ require.True(t, found)
+ require.Equal(t, HTMLFormat, f)
+ f, found = formats.FromFilename("my.nem")
+ require.True(t, found)
+ require.Equal(t, noExtDelimFormat, f)
+ f, found = formats.FromFilename("my.nex")
+ require.True(t, found)
+ require.Equal(t, noExt, f)
+ f, found = formats.FromFilename("my.css")
+ require.False(t, found)
+
+}
+
func TestDecodeFormats(t *testing.T) {
mediaTypes := media.Types{media.JSONType, media.XMLType}