if len(m) == 1 {
// In v0.112.4 we moved this to the language config, but it's very commmon for mono language sites to have this at the top level.
var first maps.Params
+ var ok bool
for _, v := range m {
- first = v.(maps.Params)
- break
+ first, ok = v.(maps.Params)
+ if ok {
+ break
+ }
}
- if _, found := first["languagecode"]; !found {
- first["languagecode"] = p.p.GetString("languagecode")
+ if first != nil {
+ if _, found := first["languagecode"]; !found {
+ first["languagecode"] = p.p.GetString("languagecode")
+ }
}
}
p.c.Languages, err = langs.DecodeConfig(m)
}
-// Issue 11047
-func TestConfigYamlNil(t *testing.T) {
+func TestConfigMiscPanics(t *testing.T) {
t.Parallel()
- files := `
+ // Issue 11047,
+ t.Run("empty params", func(t *testing.T) {
+
+ files := `
-- hugo.yaml --
params:
-- layouts/index.html --
Foo: {{ site.Params.foo }}|
+
+
+ `
+ b := NewIntegrationTestBuilder(
+ IntegrationTestConfig{
+ T: t,
+ TxtarString: files,
+ },
+ ).Build()
+
+ b.AssertFileContent("public/index.html", "Foo: |")
+ })
+ // Issue 11046
+ t.Run("invalid language setup", func(t *testing.T) {
+
+ files := `
+-- hugo.toml --
+baseURL = "https://example.org"
+languageCode = "en-us"
+title = "Blog of me"
+defaultContentLanguage = "en"
+
+[languages]
+ [en]
+ lang = "en"
+ languageName = "English"
+ weight = 1
+-- layouts/index.html --
+Foo: {{ site.Params.foo }}|
-`
- b := NewIntegrationTestBuilder(
- IntegrationTestConfig{
- T: t,
- TxtarString: files,
- },
- ).Build()
+
+ `
+ b, err := NewIntegrationTestBuilder(
+ IntegrationTestConfig{
+ T: t,
+ TxtarString: files,
+ },
+ ).BuildE()
- b.AssertFileContent("public/index.html", "Foo: |")
+ b.Assert(err, qt.IsNotNil)
+ b.Assert(err.Error(), qt.Contains, "no languages")
+ })
}
package langs
import (
+ "errors"
+
"github.com/gohugoio/hugo/common/maps"
"github.com/mitchellh/mapstructure"
)
if err := mapstructure.WeakDecode(m, &langs); err != nil {
return nil, err
}
+ if len(langs) == 0 {
+ return nil, errors.New("no languages configured")
+ }
return langs, nil
}