mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-31 22:41:53 +02:00
@@ -93,20 +93,6 @@ func LoadConfig(d ConfigSourceDescriptor, doWithConfig ...func(cfg config.Provid
|
||||
}
|
||||
}
|
||||
|
||||
// TODO(bep) improve this. This is currently needed to get the merge correctly.
|
||||
if l.cfg.IsSet("languages") {
|
||||
langs := l.cfg.GetParams("languages")
|
||||
for _, lang := range langs {
|
||||
langp := lang.(maps.Params)
|
||||
if _, ok := langp["menus"]; !ok {
|
||||
langp["menus"] = make(maps.Params)
|
||||
}
|
||||
if _, ok := langp["params"]; !ok {
|
||||
langp["params"] = make(maps.Params)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
l.cfg.SetDefaultMergeStrategy()
|
||||
|
||||
// We create languages based on the settings, so we need to make sure that
|
||||
|
@@ -76,7 +76,7 @@ func TestLoadMultiConfig(t *testing.T) {
|
||||
c.Assert(cfg.GetString("DontChange"), qt.Equals, "same")
|
||||
}
|
||||
|
||||
func TestLoadConfigFromTheme(t *testing.T) {
|
||||
func TestLoadConfigFromThemes(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
c := qt.New(t)
|
||||
@@ -185,11 +185,15 @@ name = "menu-theme"
|
||||
|
||||
`
|
||||
|
||||
buildForStrategy := func(t testing.TB, s string) *sitesBuilder {
|
||||
mainConfig := strings.ReplaceAll(mainConfigTemplate, "MERGE_PARAMS", s)
|
||||
buildForConfig := func(mainConfig, themeConfig string) *sitesBuilder {
|
||||
b := newTestSitesBuilder(t)
|
||||
b.WithConfigFile("toml", mainConfig).WithThemeConfigFile("toml", themeConfig)
|
||||
return b.CreateSites().Build(BuildCfg{})
|
||||
return b.Build(BuildCfg{})
|
||||
}
|
||||
|
||||
buildForStrategy := func(t testing.TB, s string) *sitesBuilder {
|
||||
mainConfig := strings.ReplaceAll(mainConfigTemplate, "MERGE_PARAMS", s)
|
||||
return buildForConfig(mainConfig, themeConfig)
|
||||
}
|
||||
|
||||
c.Run("Merge default", func(c *qt.C) {
|
||||
@@ -316,6 +320,64 @@ name = "menu-theme"
|
||||
})
|
||||
})
|
||||
|
||||
c.Run("Merge no params in project", func(c *qt.C) {
|
||||
b := buildForConfig(
|
||||
"baseURL=\"https://example.org\"\ntheme = \"test-theme\"\n",
|
||||
"[params]\np1 = \"p1 theme\"\n",
|
||||
)
|
||||
|
||||
got := b.Cfg.Get("").(maps.Params)
|
||||
|
||||
b.Assert(got["params"], qt.DeepEquals, maps.Params{
|
||||
"p1": "p1 theme",
|
||||
})
|
||||
})
|
||||
|
||||
c.Run("Merge language no menus or params in project", func(c *qt.C) {
|
||||
b := buildForConfig(
|
||||
`
|
||||
theme = "test-theme"
|
||||
baseURL = "https://example.com/"
|
||||
|
||||
[languages]
|
||||
[languages.en]
|
||||
languageName = "English"
|
||||
|
||||
`,
|
||||
`
|
||||
[languages]
|
||||
[languages.en]
|
||||
languageName = "EnglishTheme"
|
||||
|
||||
[languages.en.params]
|
||||
p1="themep1"
|
||||
|
||||
[[languages.en.menus.main]]
|
||||
name = "menu-theme"
|
||||
`,
|
||||
)
|
||||
|
||||
got := b.Cfg.Get("").(maps.Params)
|
||||
|
||||
b.Assert(got["languages"], qt.DeepEquals,
|
||||
maps.Params{
|
||||
"en": maps.Params{
|
||||
"languagename": "English",
|
||||
"menus": maps.Params{
|
||||
"main": []map[string]interface{}{
|
||||
{
|
||||
"name": "menu-theme",
|
||||
},
|
||||
},
|
||||
},
|
||||
"params": maps.Params{
|
||||
"p1": "themep1",
|
||||
},
|
||||
},
|
||||
},
|
||||
)
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
func TestLoadConfigFromThemeDir(t *testing.T) {
|
||||
|
@@ -54,3 +54,28 @@ weight = 1
|
||||
b.AssertFileContent("public/index.html", "Hello: Hello")
|
||||
})
|
||||
}
|
||||
|
||||
func TestLanguageBugs(t *testing.T) {
|
||||
c := qt.New(t)
|
||||
|
||||
// Issue #8672
|
||||
c.Run("Config with language, menu in root only", func(c *qt.C) {
|
||||
b := newTestSitesBuilder(c)
|
||||
b.WithConfigFile("toml", `
|
||||
theme = "test-theme"
|
||||
[[menus.foo]]
|
||||
name = "foo-a"
|
||||
[languages.en]
|
||||
|
||||
`,
|
||||
)
|
||||
|
||||
b.WithThemeConfigFile("toml", `[languages.en]`)
|
||||
|
||||
b.Build(BuildCfg{})
|
||||
|
||||
menus := b.H.Sites[0].Menus()
|
||||
c.Assert(menus, qt.HasLen, 1)
|
||||
|
||||
})
|
||||
}
|
||||
|
Reference in New Issue
Block a user