]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Fix output formats and media type per language config regression
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 28 Jun 2023 08:01:44 +0000 (10:01 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 28 Jun 2023 10:33:33 +0000 (12:33 +0200)
Fixes #11159

config/allconfig/alldecoders.go
hugolib/config_test.go
tpl/collections/integration_test.go

index 4d9ef4f85afee6f1d668ad1aabc6e31d927cce6a..bda3122d3efe5daff20640af36c860bf9f30837a 100644 (file)
@@ -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))
@@ -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))
@@ -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 = ???
@@ -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)
                                                        }
@@ -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))
+               }
+       }
+}
index 56a03c6dfbafe21901488d1fd9c450b7a38cf87b..f87d8b936f3f2aae6e3c0c411c57406d2fbf5028 100644 (file)
@@ -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()
 
index 829aee355b4b569d15fad944676b5797a2a832a5..80d2f043ab3a8f529b56e60bb6f182e58078eb1c 100644 (file)
@@ -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]]")
 
 }
 
@@ -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;]")
 
 }