summaryrefslogtreecommitdiffstats
path: root/hugolib/hugo_sites_build_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'hugolib/hugo_sites_build_test.go')
-rw-r--r--hugolib/hugo_sites_build_test.go1093
1 files changed, 30 insertions, 1063 deletions
diff --git a/hugolib/hugo_sites_build_test.go b/hugolib/hugo_sites_build_test.go
index bdbf4270e..4c2bf452c 100644
--- a/hugolib/hugo_sites_build_test.go
+++ b/hugolib/hugo_sites_build_test.go
@@ -5,150 +5,44 @@ import (
"path/filepath"
"strings"
"testing"
- "time"
qt "github.com/frankban/quicktest"
"github.com/gohugoio/hugo/common/loggers"
"github.com/gohugoio/hugo/htesting"
"github.com/gohugoio/hugo/resources/kinds"
- "github.com/fortytw2/leaktest"
- "github.com/fsnotify/fsnotify"
"github.com/gohugoio/hugo/helpers"
"github.com/gohugoio/hugo/hugofs"
"github.com/spf13/afero"
)
func TestMultiSitesMainLangInRoot(t *testing.T) {
- t.Parallel()
- for _, b := range []bool{false} {
- doTestMultiSitesMainLangInRoot(t, b)
- }
-}
-
-func doTestMultiSitesMainLangInRoot(t *testing.T, defaultInSubDir bool) {
- c := qt.New(t)
-
- siteConfig := map[string]any{
- "DefaultContentLanguage": "fr",
- "DefaultContentLanguageInSubdir": defaultInSubDir,
- }
-
- b := newMultiSiteTestBuilder(t, "toml", multiSiteTOMLConfigTemplate, siteConfig)
-
- pathMod := func(s string) string {
- return s
- }
-
- if !defaultInSubDir {
- pathMod = func(s string) string {
- return strings.Replace(s, "/fr/", "/", -1)
- }
- }
-
- b.CreateSites()
- b.Build(BuildCfg{})
-
- sites := b.H.Sites
- c.Assert(len(sites), qt.Equals, 4)
-
- enSite := sites[0]
- frSite := sites[1]
-
- c.Assert(enSite.LanguagePrefix(), qt.Equals, "/en")
-
- if defaultInSubDir {
- c.Assert(frSite.LanguagePrefix(), qt.Equals, "/fr")
- } else {
- c.Assert(frSite.LanguagePrefix(), qt.Equals, "")
- }
-
- c.Assert(enSite.PathSpec.RelURL("foo", true), qt.Equals, "/blog/en/foo")
-
- doc1en := enSite.RegularPages()[0]
- doc1fr := frSite.RegularPages()[0]
-
- enPerm := doc1en.Permalink()
- enRelPerm := doc1en.RelPermalink()
- c.Assert(enPerm, qt.Equals, "http://example.com/blog/en/sect/doc1-slug/")
- c.Assert(enRelPerm, qt.Equals, "/blog/en/sect/doc1-slug/")
-
- frPerm := doc1fr.Permalink()
- frRelPerm := doc1fr.RelPermalink()
-
- b.AssertFileContent(pathMod("public/fr/sect/doc1/index.html"), "Single", "Bonjour")
- b.AssertFileContent("public/en/sect/doc1-slug/index.html", "Single", "Hello")
-
- if defaultInSubDir {
- c.Assert(frPerm, qt.Equals, "http://example.com/blog/fr/sect/doc1/")
- c.Assert(frRelPerm, qt.Equals, "/blog/fr/sect/doc1/")
-
- // should have a redirect on top level.
- b.AssertFileContent("public/index.html", `<meta http-equiv="refresh" content="0; url=http://example.com/blog/fr">`)
- } else {
- // Main language in root
- c.Assert(frPerm, qt.Equals, "http://example.com/blog/sect/doc1/")
- c.Assert(frRelPerm, qt.Equals, "/blog/sect/doc1/")
+ files := `
+-- hugo.toml --
+defaultContentLanguage = "fr"
+defaultContentLanguageInSubdir = false
+disableKinds = ["taxonomy", "term"]
+[languages]
+[languages.en]
+weight = 1
+[languages.fr]
+weight = 2
+-- content/sect/doc1.en.md --
+---
+title: doc1 en
+---
+-- content/sect/doc1.fr.md --
+---
+title: doc1 fr
+slug: doc1-fr
+---
+-- layouts/_default/single.html --
+Single: {{ .Title }}|{{ .Lang }}|{{ .RelPermalink }}|
- // should have redirect back to root
- b.AssertFileContent("public/fr/index.html", `<meta http-equiv="refresh" content="0; url=http://example.com/blog">`)
- }
- b.AssertFileContent(pathMod("public/fr/index.html"), "Home", "Bonjour")
- b.AssertFileContent("public/en/index.html", "Home", "Hello")
-
- // Check list pages
- b.AssertFileContent(pathMod("public/fr/sect/index.html"), "List", "Bonjour")
- b.AssertFileContent("public/en/sect/index.html", "List", "Hello")
- b.AssertFileContent(pathMod("public/fr/plaques/FRtag1/index.html"), "Taxonomy List", "Bonjour")
- b.AssertFileContent("public/en/tags/tag1/index.html", "Taxonomy List", "Hello")
-
- // Check sitemaps
- // Sitemaps behaves different: In a multilanguage setup there will always be a index file and
- // one sitemap in each lang folder.
- b.AssertFileContent("public/sitemap.xml",
- "<loc>http://example.com/blog/en/sitemap.xml</loc>",
- "<loc>http://example.com/blog/fr/sitemap.xml</loc>")
-
- if defaultInSubDir {
- b.AssertFileContent("public/fr/sitemap.xml", "<loc>http://example.com/blog/fr/</loc>")
- } else {
- b.AssertFileContent("public/fr/sitemap.xml", "<loc>http://example.com/blog/</loc>")
- }
- b.AssertFileContent("public/en/sitemap.xml", "<loc>http://example.com/blog/en/</loc>")
-
- // Check rss
- b.AssertFileContent(pathMod("public/fr/index.xml"), pathMod(`<atom:link href="http://example.com/blog/fr/index.xml"`),
- `rel="self" type="application/rss+xml"`)
- b.AssertFileContent("public/en/index.xml", `<atom:link href="http://example.com/blog/en/index.xml"`)
- b.AssertFileContent(
- pathMod("public/fr/sect/index.xml"),
- pathMod(`<atom:link href="http://example.com/blog/fr/sect/index.xml"`))
- b.AssertFileContent("public/en/sect/index.xml", `<atom:link href="http://example.com/blog/en/sect/index.xml"`)
- b.AssertFileContent(
- pathMod("public/fr/plaques/FRtag1/index.xml"),
- pathMod(`<atom:link href="http://example.com/blog/fr/plaques/FRtag1/index.xml"`))
- b.AssertFileContent("public/en/tags/tag1/index.xml", `<atom:link href="http://example.com/blog/en/tags/tag1/index.xml"`)
-
- // Check paginators
- b.AssertFileContent(pathMod("public/fr/page/1/index.html"), pathMod(`refresh" content="0; url=http://example.com/blog/fr/"`))
- b.AssertFileContent("public/en/page/1/index.html", `refresh" content="0; url=http://example.com/blog/en/"`)
- b.AssertFileContent(pathMod("public/fr/page/2/index.html"), "Home Page 2", "Bonjour", pathMod("http://example.com/blog/fr/"))
- b.AssertFileContent("public/en/page/2/index.html", "Home Page 2", "Hello", "http://example.com/blog/en/")
- b.AssertFileContent(pathMod("public/fr/sect/page/1/index.html"), pathMod(`refresh" content="0; url=http://example.com/blog/fr/sect/"`))
- b.AssertFileContent("public/en/sect/page/1/index.html", `refresh" content="0; url=http://example.com/blog/en/sect/"`)
- b.AssertFileContent(pathMod("public/fr/sect/page/2/index.html"), "List Page 2", "Bonjour", pathMod("http://example.com/blog/fr/sect/"))
- b.AssertFileContent("public/en/sect/page/2/index.html", "List Page 2", "Hello", "http://example.com/blog/en/sect/")
- b.AssertFileContent(
- pathMod("public/fr/plaques/FRtag1/page/1/index.html"),
- pathMod(`refresh" content="0; url=http://example.com/blog/fr/plaques/FRtag1/"`))
- b.AssertFileContent("public/en/tags/tag1/page/1/index.html", `refresh" content="0; url=http://example.com/blog/en/tags/tag1/"`)
- b.AssertFileContent(
- pathMod("public/fr/plaques/FRtag1/page/2/index.html"), "List Page 2", "Bonjour",
- pathMod("http://example.com/blog/fr/plaques/FRtag1/"))
- b.AssertFileContent("public/en/tags/tag1/page/2/index.html", "List Page 2", "Hello", "http://example.com/blog/en/tags/tag1/")
- // nn (Nynorsk) and nb (Bokmål) have custom pagePath: side ("page" in Norwegian)
- b.AssertFileContent("public/nn/side/1/index.html", `refresh" content="0; url=http://example.com/blog/nn/"`)
- b.AssertFileContent("public/nb/side/1/index.html", `refresh" content="0; url=http://example.com/blog/nb/"`)
+`
+ b := Test(t, files)
+ b.AssertFileContent("public/sect/doc1-fr/index.html", "Single: doc1 fr|fr|/sect/doc1-fr/|")
+ b.AssertFileContent("public/en/sect/doc1/index.html", "Single: doc1 en|en|/en/sect/doc1/|")
}
func TestMultiSitesWithTwoLanguages(t *testing.T) {
@@ -182,12 +76,12 @@ p1 = "p1en"
c.Assert(len(sites), qt.Equals, 2)
nnSite := sites[0]
- nnHome := nnSite.getPage(kinds.KindHome)
+ nnHome := nnSite.getPageOldVersion(kinds.KindHome)
c.Assert(len(nnHome.AllTranslations()), qt.Equals, 2)
c.Assert(len(nnHome.Translations()), qt.Equals, 1)
c.Assert(nnHome.IsTranslated(), qt.Equals, true)
- enHome := sites[1].getPage(kinds.KindHome)
+ enHome := sites[1].getPageOldVersion(kinds.KindHome)
p1, err := enHome.Param("p1")
c.Assert(err, qt.IsNil)
@@ -198,403 +92,6 @@ p1 = "p1en"
c.Assert(p1, qt.Equals, "p1nn")
}
-func TestMultiSitesBuild(t *testing.T) {
- for _, config := range []struct {
- content string
- suffix string
- }{
- {multiSiteTOMLConfigTemplate, "toml"},
- {multiSiteYAMLConfigTemplate, "yml"},
- {multiSiteJSONConfigTemplate, "json"},
- } {
- config := config
- t.Run(config.suffix, func(t *testing.T) {
- t.Parallel()
- doTestMultiSitesBuild(t, config.content, config.suffix)
- })
- }
-}
-
-func doTestMultiSitesBuild(t *testing.T, configTemplate, configSuffix string) {
- c := qt.New(t)
-
- b := newMultiSiteTestBuilder(t, configSuffix, configTemplate, nil)
- b.CreateSites()
-
- sites := b.H.Sites
- c.Assert(len(sites), qt.Equals, 4)
-
- b.Build(BuildCfg{})
-
- // Check site config
- for _, s := range sites {
- c.Assert(s.conf.DefaultContentLanguageInSubdir, qt.Equals, true)
- c.Assert(s.conf.C.DisabledKinds, qt.Not(qt.IsNil))
- }
-
- gp1 := b.H.GetContentPage(filepath.FromSlash("content/sect/doc1.en.md"))
- c.Assert(gp1, qt.Not(qt.IsNil))
- c.Assert(gp1.Title(), qt.Equals, "doc1")
- gp2 := b.H.GetContentPage(filepath.FromSlash("content/dummysect/notfound.md"))
- c.Assert(gp2, qt.IsNil)
-
- enSite := sites[0]
- enSiteHome := enSite.getPage(kinds.KindHome)
- c.Assert(enSiteHome.IsTranslated(), qt.Equals, true)
-
- c.Assert(enSite.language.Lang, qt.Equals, "en")
-
- c.Assert(len(enSite.RegularPages()), qt.Equals, 5)
-
- //dumpPages(enSite.AllPages()...)
-
- //c.Assert(len(enSite.AllPages()), qt.Equals, 32)
-
- // Check 404s
- b.AssertFileContent("public/en/404.html", "404|en|404 Page not found")
- b.AssertFileContent("public/fr/404.html", "404|fr|404 Page not found")
-
- // Check robots.txt
- // the domain root is the public directory, so the robots.txt has to be created there and not in the language directories
- b.AssertFileContent("public/robots.txt", "robots")
- b.AssertFileDoesNotExist("public/en/robots.txt")
- b.AssertFileDoesNotExist("public/nn/robots.txt")
-
- b.AssertFileContent("public/en/sect/doc1-slug/index.html", "Permalink: http://example.com/blog/en/sect/doc1-slug/")
- b.AssertFileContent("public/en/sect/doc2/index.html", "Permalink: http://example.com/blog/en/sect/doc2/")
- b.AssertFileContent("public/superbob/index.html", "Permalink: http://example.com/blog/superbob/")
-
- doc2 := enSite.RegularPages()[1]
- doc3 := enSite.RegularPages()[2]
- c.Assert(doc3, qt.Equals, doc2.Prev())
- doc1en := enSite.RegularPages()[0]
- doc1fr := doc1en.Translations()[0]
- b.AssertFileContent("public/fr/sect/doc1/index.html", "Permalink: http://example.com/blog/fr/sect/doc1/")
-
- c.Assert(doc1fr, qt.Equals, doc1en.Translations()[0])
- c.Assert(doc1en, qt.Equals, doc1fr.Translations()[0])
- c.Assert(doc1fr.Language().Lang, qt.Equals, "fr")
-
- doc4 := enSite.AllPages()[4]
- c.Assert(len(doc4.Translations()), qt.Equals, 0)
-
- // Taxonomies and their URLs
- c.Assert(len(enSite.Taxonomies()), qt.Equals, 1)
- tags := enSite.Taxonomies()["tags"]
- c.Assert(len(tags), qt.Equals, 2)
- c.Assert(doc1en, qt.Equals, tags["tag1"][0].Page)
-
- frSite := sites[1]
- c.Assert(frSite.language.Lang, qt.Equals, "fr")
- c.Assert(len(frSite.RegularPages()), qt.Equals, 4)
- c.Assert(frSite.home.Title(), qt.Equals, "Le Français")
- c.Assert(len(frSite.AllPages()), qt.Equals, 32)
-
- for _, frenchPage := range frSite.RegularPages() {
- p := frenchPage
- c.Assert(p.Language().Lang, qt.Equals, "fr")
- }
-
- // See https://github.com/gohugoio/hugo/issues/4285
- // Before Hugo 0.33 you had to be explicit with the content path to get the correct Page, which
- // isn't ideal in a multilingual setup. You want a way to get the current language version if available.
- // Now you can do lookups with translation base name to get that behaviour.
- // Let us test all the regular page variants:
- getPageDoc1En := enSite.getPage(kinds.KindPage, filepath.ToSlash(doc1en.File().Path()))
- getPageDoc1EnBase := enSite.getPage(kinds.KindPage, "sect/doc1")
- getPageDoc1Fr := frSite.getPage(kinds.KindPage, filepath.ToSlash(doc1fr.File().Path()))
- getPageDoc1FrBase := frSite.getPage(kinds.KindPage, "sect/doc1")
- c.Assert(getPageDoc1En, qt.Equals, doc1en)
- c.Assert(getPageDoc1Fr, qt.Equals, doc1fr)
- c.Assert(getPageDoc1EnBase, qt.Equals, doc1en)
- c.Assert(getPageDoc1FrBase, qt.Equals, doc1fr)
-
- // Check redirect to main language, French
- b.AssertFileContent("public/index.html", "0; url=http://example.com/blog/fr")
-
- // check home page content (including data files rendering)
- b.AssertFileContent("public/en/index.html", "Default Home Page 1", "Hello", "Hugo Rocks!")
- b.AssertFileContent("public/fr/index.html", "French Home Page 1", "Bonjour", "Hugo Rocks!")
-
- // check single page content
- b.AssertFileContent("public/fr/sect/doc1/index.html", "Single", "Shortcode: Bonjour", "LingoFrench")
- b.AssertFileContent("public/en/sect/doc1-slug/index.html", "Single", "Shortcode: Hello", "LingoDefault")
-
- // Check node translations
- homeEn := enSite.getPage(kinds.KindHome)
- c.Assert(homeEn, qt.Not(qt.IsNil))
- c.Assert(len(homeEn.Translations()), qt.Equals, 3)
- c.Assert(homeEn.Translations()[0].Language().Lang, qt.Equals, "fr")
- c.Assert(homeEn.Translations()[1].Language().Lang, qt.Equals, "nn")
- c.Assert(homeEn.Translations()[1].Title(), qt.Equals, "På nynorsk")
- c.Assert(homeEn.Translations()[2].Language().Lang, qt.Equals, "nb")
- c.Assert(homeEn.Translations()[2].Title(), qt.Equals, "På bokmål")
- c.Assert(homeEn.Translations()[2].Language().LanguageName, qt.Equals, "Bokmål")
-
- sectFr := frSite.getPage(kinds.KindSection, "sect")
- c.Assert(sectFr, qt.Not(qt.IsNil))
-
- c.Assert(sectFr.Language().Lang, qt.Equals, "fr")
- c.Assert(len(sectFr.Translations()), qt.Equals, 1)
- c.Assert(sectFr.Translations()[0].Language().Lang, qt.Equals, "en")
- c.Assert(sectFr.Translations()[0].Title(), qt.Equals, "Sects")
-
- nnSite := sites[2]
- c.Assert(nnSite.language.Lang, qt.Equals, "nn")
- taxNn := nnSite.getPage(kinds.KindTaxonomy, "lag")
- c.Assert(taxNn, qt.Not(qt.IsNil))
- c.Assert(len(taxNn.Translations()), qt.Equals, 1)
- c.Assert(taxNn.Translations()[0].Language().Lang, qt.Equals, "nb")
-
- taxTermNn := nnSite.getPage(kinds.KindTerm, "lag", "sogndal")
- c.Assert(taxTermNn, qt.Not(qt.IsNil))
- c.Assert(nnSite.getPage(kinds.KindTerm, "LAG", "SOGNDAL"), qt.Equals, taxTermNn)
- c.Assert(len(taxTermNn.Translations()), qt.Equals, 1)
- c.Assert(taxTermNn.Translations()[0].Language().Lang, qt.Equals, "nb")
-
- // Check sitemap(s)
- b.AssertFileContent("public/sitemap.xml",
- "<loc>http://example.com/blog/en/sitemap.xml</loc>",
- "<loc>http://example.com/blog/fr/sitemap.xml</loc>")
- b.AssertFileContent("public/en/sitemap.xml", "http://example.com/blog/en/sect/doc2/")
- b.AssertFileContent("public/fr/sitemap.xml", "http://example.com/blog/fr/sect/doc1/")
-
- // Check taxonomies
- enTags := enSite.Taxonomies()["tags"]
- frTags := frSite.Taxonomies()["plaques"]
- c.Assert(len(enTags), qt.Equals, 2, qt.Commentf("Tags in en: %v", enTags))
- c.Assert(len(frTags), qt.Equals, 2, qt.Commentf("Tags in fr: %v", frTags))
- c.Assert(enTags["tag1"], qt.Not(qt.IsNil))
- c.Assert(frTags["FRtag1"], qt.Not(qt.IsNil))
- b.AssertFileContent("public/fr/plaques/FRtag1/index.html", "FRtag1|Bonjour|http://example.com/blog/fr/plaques/FRtag1/")
-
- // en and nn have custom site menus
- c.Assert(len(frSite.Menus()), qt.Equals, 0)
- c.Assert(len(enSite.Menus()), qt.Equals, 1)
- c.Assert(len(nnSite.Menus()), qt.Equals, 1)
-
- c.Assert(enSite.Menus()["main"].ByName()[0].Name, qt.Equals, "Home")
- c.Assert(nnSite.Menus()["main"].ByName()[0].Name, qt.Equals, "Heim")
-
- // Issue #3108
- prevPage := enSite.RegularPages()[0].Prev()
- c.Assert(prevPage, qt.Not(qt.IsNil))
- c.Assert(prevPage.Kind(), qt.Equals, kinds.KindPage)
-
- for {
- if prevPage == nil {
- break
- }
- c.Assert(prevPage.Kind(), qt.Equals, kinds.KindPage)
- prevPage = prevPage.Prev()
- }
-
- // Check bundles
- b.AssertFileContent("public/fr/bundles/b1/index.html", "RelPermalink: /blog/fr/bundles/b1/|")
- bundleFr := frSite.getPage(kinds.KindPage, "bundles/b1/index.md")
- c.Assert(bundleFr, qt.Not(qt.IsNil))
- c.Assert(len(bundleFr.Resources()), qt.Equals, 1)
- logoFr := bundleFr.Resources().GetMatch("logo*")
- logoFrGet := bundleFr.Resources().Get("logo.png")
- c.Assert(logoFrGet, qt.Equals, logoFr)
- c.Assert(logoFr, qt.Not(qt.IsNil))
- b.AssertFileContent("public/fr/bundles/b1/index.html", "Resources: image/png: /blog/fr/bundles/b1/logo.png")
- b.AssertFileContent("public/fr/bundles/b1/logo.png", "PNG Data")
-
- bundleEn := enSite.getPage(kinds.KindPage, "bundles/b1/index.en.md")
- c.Assert(bundleEn, qt.Not(qt.IsNil))
- b.AssertFileContent("public/en/bundles/b1/index.html", "RelPermalink: /blog/en/bundles/b1/|")
- c.Assert(len(bundleEn.Resources()), qt.Equals, 1)
- logoEn := bundleEn.Resources().GetMatch("logo*")
- c.Assert(logoEn, qt.Not(qt.IsNil))
- b.AssertFileContent("public/en/bundles/b1/index.html", "Resources: image/png: /blog/en/bundles/b1/logo.png")
- b.AssertFileContent("public/en/bundles/b1/logo.png", "PNG Data")
-}
-
-func TestMultiSitesRebuild(t *testing.T) {
- // t.Parallel() not supported, see https://github.com/fortytw2/leaktest/issues/4
- // This leaktest seems to be a little bit shaky on Travis.
- if !htesting.IsCI() {
- defer leaktest.CheckTimeout(t, 10*time.Second)()
- }
-
- c := qt.New(t)
-
- b := newMultiSiteTestDefaultBuilder(t).Running().CreateSites().Build(BuildCfg{})
-
- sites := b.H.Sites
- fs := b.Fs
-
- b.AssertFileContent("public/en/sect/doc2/index.html", "Single: doc2|Hello|en|", "\n\n<h1 id=\"doc2\">doc2</h1>\n\n<p><em>some content</em>")
-
- enSite := sites[0]
- frSite := sites[1]
-
- c.Assert(len(enSite.RegularPages()), qt.Equals, 5)
- c.Assert(len(frSite.RegularPages()), qt.Equals, 4)
-
- // Verify translations
- b.AssertFileContent("public/en/sect/doc1-slug/index.html", "Hello")
- b.AssertFileContent("public/fr/sect/doc1/index.html", "Bonjour")
-
- // check single page content
- b.AssertFileContent("public/fr/sect/doc1/index.html", "Single", "Shortcode: Bonjour")
- b.AssertFileContent("public/en/sect/doc1-slug/index.html", "Single", "Shortcode: Hello")
-
- homeEn := enSite.getPage(kinds.KindHome)
- c.Assert(homeEn, qt.Not(qt.IsNil))
- c.Assert(len(homeEn.Translations()), qt.Equals, 3)
-
- contentFs := b.H.Fs.Source
-
- for i, this := range []struct {
- preFunc func(t *testing.T)
- events []fsnotify.Event
- assertFunc func(t *testing.T)
- }{
- // * Remove doc
- // * Add docs existing languages
- // (Add doc new language: TODO(bep) we should load config.toml as part of these so we can add languages).
- // * Rename file
- // * Change doc
- // * Change a template
- // * Change language file
- {
- func(t *testing.T) {
- fs.Source.Remove("content/sect/doc2.en.md")
- },
- []fsnotify.Event{{Name: filepath.FromSlash("content/sect/doc2.en.md"), Op: fsnotify.Remove}},
- func(t *testing.T) {
- c.Assert(len(enSite.RegularPages()), qt.Equals, 4, qt.Commentf("1 en removed"))
- },
- },
- {
- func(t *testing.T) {
- writeNewContentFile(t, contentFs, "new_en_1", "2016-07-31", "content/new1.en.md", -5)
- writeNewContentFile(t, contentFs, "new_en_2", "1989-07-30", "content/new2.en.md", -10)
- writeNewContentFile(t, contentFs, "new_fr_1", "2016-07-30", "content/new1.fr.md", 10)
- },
- []fsnotify.Event{
- {Name: filepath.FromSlash("content/new1.en.md"), Op: fsnotify.Create},
- {Name: filepath.FromSlash("content/new2.en.md"), Op: fsnotify.Create},
- {Name: filepath.FromSlash("content/new1.fr.md"), Op: fsnotify.Create},
- },
- func(t *testing.T) {
- c.Assert(len(enSite.RegularPages()), qt.Equals, 6)
- c.Assert(len(enSite.AllPages()), qt.Equals, 34)
- c.Assert(len(frSite.RegularPages()), qt.Equals, 5)
- c.Assert(frSite.RegularPages()[3].Title(), qt.Equals, "new_fr_1")
- c.Assert(enSite.RegularPages()[0].Title(), qt.Equals, "new_en_2")
- c.Assert(enSite.RegularPages()[1].Title(), qt.Equals, "new_en_1")
-
- rendered := readWorkingDir(t, fs, "public/en/new1/index.html")
- c.Assert(strings.Contains(rendered, "new_en_1"), qt.Equals, true)
- },
- },
- {
- func(t *testing.T) {
- p := "content/sect/doc1.en.md"
- doc1 := readFileFromFs(t, contentFs, p)
- doc1 += "CHANGED"
- writeToFs(t, contentFs, p, doc1)
- },
- []fsnotify.Event{{Name: filepath.FromSlash("content/sect/doc1.en.md"), Op: fsnotify.Write}},
- func(t *testing.T) {
- c.Assert(len(enSite.RegularPages()), qt.Equals, 6)
- doc1 := readWorkingDir(t, fs, "public/en/sect/doc1-slug/index.html")
- c.Assert(strings.Contains(doc1, "CHANGED"), qt.Equals, true)
- },
- },
- // Rename a file
- {
- func(t *testing.T) {
- if err := contentFs.Rename("content/new1.en.md", "content/new1renamed.en.md"); err != nil {
- t.Fatalf("Rename failed: %s", err)
- }
- },
- []fsnotify.Event{
- {Name: filepath.FromSlash("content/new1renamed.en.md"), Op: fsnotify.Rename},
- {Name: filepath.FromSlash("content/new1.en.md"), Op: fsnotify.Rename},
- },
- func(t *testing.T) {
- c.Assert(len(enSite.RegularPages()), qt.Equals, 6, qt.Commentf("Rename"))
- c.Assert(enSite.RegularPages()[1].Title(), qt.Equals, "new_en_1")
- rendered := readWorkingDir(t, fs, "public/en/new1renamed/index.html")
- c.Assert(rendered, qt.Contains, "new_en_1")
- },
- },
- {
- // Change a template
- func(t *testing.T) {
- template := "layouts/_default/single.html"
- templateContent := readSource(t, fs, template)
- templateContent += "{{ print \"Template Changed\"}}"
- writeSource(t, fs, template, templateContent)
- },
- []fsnotify.Event{{Name: filepath.FromSlash("layouts/_default/single.html"), Op: fsnotify.Write}},
- func(t *testing.T) {
- c.Assert(len(enSite.RegularPages()), qt.Equals, 6)
- c.Assert(len(enSite.AllPages()), qt.Equals, 34)
- c.Assert(len(frSite.RegularPages()), qt.Equals, 5)
- doc1 := readWorkingDir(t, fs, "public/en/sect/doc1-slug/index.html")
- c.Assert(strings.Contains(doc1, "Template Changed"), qt.Equals, true)
- },
- },
- {
- // Change a language file
- func(t *testing.T) {
- languageFile := "i18n/fr.yaml"
- langContent := readSource(t, fs, languageFile)
- langContent = strings.Replace(langContent, "Bonjour", "Salut", 1)
- writeSource(t, fs, languageFile, langContent)
- },
- []fsnotify.Event{{Name: filepath.FromSlash("i18n/fr.yaml"), Op: fsnotify.Write}},
- func(t *testing.T) {
- c.Assert(len(enSite.RegularPages()), qt.Equals, 6)
- c.Assert(len(enSite.AllPages()), qt.Equals, 34)
- c.Assert(len(frSite.RegularPages()), qt.Equals, 5)
- docEn := readWorkingDir(t, fs, "public/en/sect/doc1-slug/index.html")
- c.Assert(strings.Contains(docEn, "Hello"), qt.Equals, true)
- docFr := readWorkingDir(t, fs, "public/fr/sect/doc1/index.html")
- c.Assert(strings.Contains(docFr, "Salut"), qt.Equals, true)
-
- homeEn := enSite.getPage(kinds.KindHome)
- c.Assert(homeEn, qt.Not(qt.IsNil))
- c.Assert(len(homeEn.Translations()), qt.Equals, 3)
- c.Assert(homeEn.Translations()[0].Language().Lang, qt.Equals, "fr")
- },
- },
- // Change a shortcode
- {
- func(t *testing.T) {
- writeSource(t, fs, "layouts/shortcodes/shortcode.html", "Modified Shortcode: {{ i18n \"hello\" }}")
- },
- []fsnotify.Event{
- {Name: filepath.FromSlash("layouts/shortcodes/shortcode.html"), Op: fsnotify.Write},
- },
- func(t *testing.T) {
- c.Assert(len(enSite.RegularPages()), qt.Equals, 6)
- c.Assert(len(enSite.AllPages()), qt.Equals, 34)
- c.Assert(len(frSite.RegularPages()), qt.Equals, 5)
- b.AssertFileContent("public/fr/sect/doc1/index.html", "Single", "Modified Shortcode: Salut")
- b.AssertFileContent("public/en/sect/doc1-slug/index.html", "Single", "Modified Shortcode: Hello")
- },
- },
- } {
-
- if this.preFunc != nil {
- this.preFunc(t)
- }
-
- err := b.H.Build(BuildCfg{}, this.events...)
- if err != nil {
- t.Fatalf("[%d] Failed to rebuild sites: %s", i, err)
- }
-
- this.assertFunc(t)
- }
-}
-
// https://github.com/gohugoio/hugo/issues/4706
func TestContentStressTest(t *testing.T) {
b := newTestSitesBuilder(t)
@@ -774,8 +271,8 @@ categories: ["mycat"]
t.Run(path, func(t *testing.T) {
c := qt.New(t)
- s1, _ := b.H.Sites[0].getPageNew(nil, path)
- s2, _ := b.H.Sites[1].getPageNew(nil, path)
+ s1, _ := b.H.Sites[0].getPage(nil, path)
+ s2, _ := b.H.Sites[1].getPage(nil, path)
c.Assert(s1, qt.Not(qt.IsNil))
c.Assert(s2, qt.Not(qt.IsNil))
@@ -794,310 +291,6 @@ categories: ["mycat"]
}
}
-var tocShortcode = `
-TOC1: {{ .Page.TableOfContents }}
-
-TOC2: {{ .Page.TableOfContents }}
-`
-
-func TestSelfReferencedContentInShortcode(t *testing.T) {
- t.Parallel()
-
- b := newMultiSiteTestDefaultBuilder(t)
-
- var (
- shortcode = `{{- .Page.Content -}}{{- .Page.Summary -}}{{- .Page.Plain -}}{{- .Page.PlainWords -}}{{- .Page.WordCount -}}{{- .Page.ReadingTime -}}`
-
- page = `---
-title: sctest
----
-Empty:{{< mycontent >}}:
-`
- )
-
- b.WithTemplatesAdded("layouts/shortcodes/mycontent.html", shortcode)
- b.WithContent("post/simple.en.md", page)
-
- b.CreateSites().Build(BuildCfg{})
-
- b.AssertFileContent("public/en/post/simple/index.html", "Empty:[]00:")
-}
-
-var tocPageSimple = `---
-title: tocTest
-publishdate: "2000-01-01"
----
-{{< toc >}}
-# Heading 1 {#1}
-Some text.
-## Subheading 1.1 {#1-1}
-Some more text.
-# Heading 2 {#2}
-Even more text.
-## Subheading 2.1 {#2-1}
-Lorem ipsum...
-`
-
-var tocPageVariants1 = `---
-title: tocTest
-publishdate: "2000-01-01"
----
-Variant 1:
-{{% wrapper %}}
-{{< toc >}}
-{{% /wrapper %}}
-# Heading 1
-
-Variant 3:
-{{% toc %}}
-
-`
-
-var tocPageVariants2 = `---
-title: tocTest
-publishdate: "2000-01-01"
----
-Variant 1:
-{{% wrapper %}}
-{{< toc >}}
-{{% /wrapper %}}
-# Heading 1
-
-Variant 2:
-{{< wrapper >}}
-{{< toc >}}
-{{< /wrapper >}}
-
-Variant 3:
-{{% toc %}}
-
-`
-
-var tocPageSimpleExpected = `<nav id="TableOfContents">
-<ul>
-<li><a href="#1">Heading 1</a>
-<ul>
-<li><a href="#1-1">Subheading 1.1</a></li>
-</ul></li>
-<li><a href="#2">Heading 2</a>
-<ul>
-<li><a href="#2-1">Subheading 2.1</a></li>
-</ul></li>
-</ul>
-</nav>`
-
-var tocPageWithShortcodesInHeadings = `---
-title: tocTest
-publishdate: "2000-01-01"
----
-
-{{< toc >}}
-
-# Heading 1 {#1}
-
-Some text.
-
-## Subheading 1.1 {{< shortcode >}} {#1-1}
-
-Some more text.
-
-# Heading 2 {{% shortcode %}} {#2}
-
-Even more text.
-
-## Subheading 2.1 {#2-1}
-
-Lorem ipsum...
-`
-
-var tocPageWithShortcodesInHeadingsExpected = `<nav id="TableOfContents">
-<ul>
-<li><a href="#1">Heading 1</a>
-<ul>
-<li><a href="#1-1">Subheading 1.1 Shortcode: Hello</a></li>
-</ul></li>
-<li><a href="#2">Heading 2 Shortcode: Hello</a>
-<ul>
-<li><a href="#2-1">Subheading 2.1</a></li>
-</ul></li>
-</ul>
-</nav>`
-
-var multiSiteTOMLConfigTemplate = `
-baseURL = "http://example.com/blog"
-
-paginate = 1
-disablePathToLower = true
-defaultContentLanguage = "{{ .DefaultContentLanguage }}"
-defaultContentLanguageInSubdir = {{ .DefaultContentLanguageInSubdir }}
-enableRobotsTXT = true
-
-[permalinks]
-other = "/somewhere/else/:filename"
-
-[Taxonomies]
-tag = "tags"
-
-[Languages]
-[Languages.en]
-weight = 10
-title = "In English"
-languageName = "English"
-[[Languages.en.menu.main]]
-url = "/"
-name = "Home"
-weight = 0
-
-[Languages.fr]
-weight = 20
-title = "Le Français"
-languageName = "Français"
-[Languages.fr.Taxonomies]
-plaque = "plaques"
-
-[Languages.nn]
-weight = 30
-title = "På nynorsk"
-languageName = "Nynorsk"
-paginatePath = "side"
-[Languages.nn.Taxonomies]
-lag = "lag"
-[[Languages.nn.menu.main]]
-url = "/"
-name = "Heim"
-weight = 1
-
-[Languages.nb]
-weight = 40
-title = "På bokmål"
-languageName = "Bokmål"
-paginatePath = "side"
-[Languages.nb.Taxonomies]
-lag = "lag"
-`
-
-var multiSiteYAMLConfigTemplate = `
-baseURL: "http://example.com/blog"
-
-disablePathToLower: true
-paginate: 1
-defaultContentLanguage: "{{ .DefaultContentLanguage }}"
-defaultContentLanguageInSubdir: {{ .DefaultContentLanguageInSubdir }}
-enableRobotsTXT: true
-
-permalinks:
- other: "/somewhere/else/:filename"
-
-Taxonomies:
- tag: "tags"
-
-Languages:
- en:
- weight: 10
- title: "In English"
- languageName: "English"
- menu:
- main:
- - url: "/"
- name: "Home"
- weight: 0
- fr:
- weight: 20
- title: "Le Français"
- languageName: "Français"
- Taxonomies:
- plaque: "plaques"
- nn:
- weight: 30
- title: "På nynorsk"
- languageName: "Nynorsk"
- paginatePath: "side"
- Taxonomies:
- lag: "lag"
- menu:
- main:
- - url: "/"
- name: "Heim"
- weight: 1
- nb:
- weight: 40
- title: "På bokmål"
- languageName: "Bokmål"
- paginatePath: "side"
- Taxonomies:
- lag: "lag"
-
-`
-
-// TODO(bep) clean move
-var multiSiteJSONConfigTemplate = `
-{
- "baseURL": "http://example.com/blog",
- "paginate": 1,
- "disablePathToLower": true,
- "defaultContentLanguage": "{{ .DefaultContentLanguage }}",
- "defaultContentLanguageInSubdir": true,
- "enableRobotsTXT": true,
- "permalinks": {
- "other": "/somewhere/else/:filename"
- },
- "Taxonomies": {
- "tag": "tags"
- },
- "Languages": {
- "en": {
- "weight": 10,
- "title": "In English",
- "languageName": "English",
- "menu": {
- "main": [
- {
- "url": "/",
- "name": "Home",
- "weight": 0
- }
- ]
- }
- },
- "fr": {
- "weight": 20,
- "title": "Le Français",
- "languageName": "Français",
- "Taxonomies": {
- "plaque": "plaques"
- }
- },
- "nn": {
- "weight": 30,
- "title": "På nynorsk",
- "paginatePath": "side",
- "languageName": "Nynorsk",
- "Taxonomies": {
- "lag": "lag"
- },
- "menu": {
- "main": [
- {
- "url": "/",
- "name": "Heim",
- "weight": 1
- }
- ]
- }
- },
- "nb": {
- "weight": 40,
- "title": "På bokmål",
- "pa