Skip to content

Commit

Permalink
Fix output formats and media type per language config regression
Browse files Browse the repository at this point in the history
Fixes #11159
  • Loading branch information
bep committed Jun 28, 2023
1 parent 9b313ce commit 79639c9
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 31 deletions.
32 changes: 24 additions & 8 deletions config/allconfig/alldecoders.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,8 @@ var allDecoderSetups = map[string]decodeWeight{
return err
},
},
"mediaTypes": {
key: "mediaTypes",
"mediatypes": {
key: "mediatypes",
decode: func(d decodeWeight, p decodeConfig) error {
var err error
p.c.MediaTypes, err = media.DecodeTypes(p.p.GetStringMap(d.key))
Expand Down Expand Up @@ -168,8 +168,8 @@ var allDecoderSetups = map[string]decodeWeight{
return nil
},
},
"outputFormats": {
key: "outputFormats",
"outputformats": {
key: "outputformats",
decode: func(d decodeWeight, p decodeConfig) error {
var err error
p.c.OutputFormats, err = output.DecodeConfig(p.c.MediaTypes.Config, p.p.Get(d.key))
Expand Down Expand Up @@ -221,9 +221,9 @@ var allDecoderSetups = map[string]decodeWeight{
// key = '...'

// To sucessfully be backward compatible, "default" patterns need to be set for both page and term
p.c.Permalinks["page"][k] = v;
p.c.Permalinks["term"][k] = v;
p.c.Permalinks["page"][k] = v
p.c.Permalinks["term"][k] = v

case maps.Params:
// [permalinks.key]
// xyz = ???
Expand All @@ -234,7 +234,7 @@ var allDecoderSetups = map[string]decodeWeight{
switch v2 := v2.(type) {
case string:
p.c.Permalinks[k][k2] = v2

default:
return fmt.Errorf("permalinks configuration invalid: unknown value %q for key %q for kind %q", v2, k2, k)
}
Expand Down Expand Up @@ -410,3 +410,19 @@ var allDecoderSetups = map[string]decodeWeight{
},
},
}

func init() {
for k, v := range allDecoderSetups {
// Verify that k and v.key is all lower case.
if k != strings.ToLower(k) {
panic(fmt.Sprintf("key %q is not lower case", k))
}
if v.key != strings.ToLower(v.key) {
panic(fmt.Sprintf("key %q is not lower case", v.key))
}

if k != v.key {
panic(fmt.Sprintf("key %q is not the same as the map key %q", k, v.key))
}
}
}
42 changes: 42 additions & 0 deletions hugolib/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1144,6 +1144,48 @@ LanguageCode: {{ .Site.LanguageCode }}|{{ site.Language.LanguageCode }}|

}

// See #11159
func TestConfigOutputFormatsPerLanguage(t *testing.T) {
t.Parallel()

files := `
-- hugo.toml --
[languages]
[languages.en]
title = "English Title"
[languages.sv]
title = "Swedish Title"
[languages.sv.outputFormats.html]
path = "foo"
[languages.sv.mediatypes."text/html"]
suffixes = ["bar"]
-- layouts/index.html --
Home.
`
b := NewIntegrationTestBuilder(
IntegrationTestConfig{
T: t,
TxtarString: files,
},
).Build()

b.AssertFileContent("public/index.html", "Home.")

enConfig := b.H.Sites[0].conf
m, _ := enConfig.MediaTypes.Config.GetByType("text/html")
b.Assert(m.Suffixes(), qt.DeepEquals, []string{"html"})

svConfig := b.H.Sites[1].conf
f, _ := svConfig.OutputFormats.Config.GetByName("html")
b.Assert(f.Path, qt.Equals, "foo")
m, _ = svConfig.MediaTypes.Config.GetByType("text/html")
b.Assert(m.Suffixes(), qt.DeepEquals, []string{"bar"})

}

func TestConfigMiscPanics(t *testing.T) {
t.Parallel()

Expand Down
37 changes: 14 additions & 23 deletions tpl/collections/integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,21 +87,16 @@ func TestAppendSliceToASliceOfSlices(t *testing.T) {
{{ $obj }}
`

for i := 0; i < 4; i++ {

b := hugolib.NewIntegrationTestBuilder(
hugolib.IntegrationTestConfig{
T: t,
TxtarString: files,
},
).Build()

b.AssertFileContent("public/index.html", "[[a] [b] [c]]")
b := hugolib.NewIntegrationTestBuilder(
hugolib.IntegrationTestConfig{
T: t,
TxtarString: files,
},
).Build()

}
b.AssertFileContent("public/index.html", "[[a] [b] [c]]")

}

Expand All @@ -120,18 +115,14 @@ func TestAppendNilToSlice(t *testing.T) {
`

for i := 0; i < 4; i++ {

b := hugolib.NewIntegrationTestBuilder(
hugolib.IntegrationTestConfig{
T: t,
TxtarString: files,
},
).Build()

b.AssertFileContent("public/index.html", "[a &lt;nil&gt;]")
b := hugolib.NewIntegrationTestBuilder(
hugolib.IntegrationTestConfig{
T: t,
TxtarString: files,
},
).Build()

}
b.AssertFileContent("public/index.html", "[a &lt;nil&gt;]")

}

Expand Down

0 comments on commit 79639c9

Please sign in to comment.