From: Bjørn Erik Pedersen Date: Fri, 7 Nov 2025 17:37:44 +0000 (+0100) Subject: hugolib: Delete some old integration tests X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=e24b604c3018106b51edae47ddc7ee9d81f9c73d;p=brevno-suite%2Fhugo hugolib: Delete some old integration tests We have had several had several integration test setups over the years. What we have now, backed by txtar files, has been working very well for a long time. The tests deleted here may lose us some coverage, but they are painful to maintain and it's unlikely that we will port them to the new setup. --- diff --git a/hugolib/pagebundler_test.go b/hugolib/pagebundler_test.go index dcdd7af4f..f81bcdaae 100644 --- a/hugolib/pagebundler_test.go +++ b/hugolib/pagebundler_test.go @@ -26,13 +26,8 @@ import ( "github.com/gohugoio/hugo/hugofs" - "github.com/gohugoio/hugo/resources/kinds" - "github.com/gohugoio/hugo/resources/page" - "github.com/gohugoio/hugo/htesting" - "github.com/gohugoio/hugo/deps" - qt "github.com/frankban/quicktest" ) @@ -322,93 +317,6 @@ Len Sites: {{ len .Site.Sites }}| b.Assert(len(b.H.Sites), qt.Equals, 1) } -func TestPageBundlerHeadless(t *testing.T) { - t.Parallel() - - cfg, fs := newTestCfg() - c := qt.New(t) - - workDir := "/work" - cfg.Set("workingDir", workDir) - cfg.Set("contentDir", "base") - cfg.Set("baseURL", "https://example.com") - configs, err := loadTestConfigFromProvider(cfg) - c.Assert(err, qt.IsNil) - - pageContent := `--- -title: "Bundle Galore" -slug: s1 -date: 2017-01-23 ---- - -TheContent. - -{{< myShort >}} -` - - writeSource(t, fs, filepath.Join(workDir, "layouts", "_default", "single.html"), "single {{ .Content }}") - writeSource(t, fs, filepath.Join(workDir, "layouts", "_default", "list.html"), "list") - writeSource(t, fs, filepath.Join(workDir, "layouts", "shortcodes", "myShort.html"), "SHORTCODE") - - writeSource(t, fs, filepath.Join(workDir, "base", "a", "index.md"), pageContent) - writeSource(t, fs, filepath.Join(workDir, "base", "a", "l1.png"), "PNG image") - writeSource(t, fs, filepath.Join(workDir, "base", "a", "l2.png"), "PNG image") - - writeSource(t, fs, filepath.Join(workDir, "base", "b", "index.md"), `--- -title: "Headless Bundle in Topless Bar" -slug: s2 -headless: true -date: 2017-01-23 ---- - -TheContent. -HEADLESS {{< myShort >}} -`) - writeSource(t, fs, filepath.Join(workDir, "base", "b", "l1.png"), "PNG image") - writeSource(t, fs, filepath.Join(workDir, "base", "b", "l2.png"), "PNG image") - writeSource(t, fs, filepath.Join(workDir, "base", "b", "p1.md"), pageContent) - - s := buildSingleSite(t, deps.DepsCfg{Fs: fs, Configs: configs}, BuildCfg{}) - - c.Assert(len(s.RegularPages()), qt.Equals, 1) - - regular := s.getPageOldVersion(kinds.KindPage, "a/index") - c.Assert(regular.RelPermalink(), qt.Equals, "/s1/") - - headless := s.getPageOldVersion(kinds.KindPage, "b/index") - c.Assert(headless, qt.Not(qt.IsNil)) - c.Assert(headless.Title(), qt.Equals, "Headless Bundle in Topless Bar") - c.Assert(headless.RelPermalink(), qt.Equals, "") - c.Assert(headless.Permalink(), qt.Equals, "") - c.Assert(content(headless), qt.Contains, "HEADLESS SHORTCODE") - - headlessResources := headless.Resources() - c.Assert(len(headlessResources), qt.Equals, 3) - res := headlessResources.Match("l*") - c.Assert(len(res), qt.Equals, 2) - pageResource := headlessResources.GetMatch("p*") - c.Assert(pageResource, qt.Not(qt.IsNil)) - p := pageResource.(page.Page) - c.Assert(content(p), qt.Contains, "SHORTCODE") - c.Assert(p.Name(), qt.Equals, "p1.md") - - th := newTestHelper(s.conf, s.Fs, t) - - th.assertFileContent(filepath.FromSlash("public/s1/index.html"), "TheContent") - th.assertFileContent(filepath.FromSlash("public/s1/l1.png"), "PNG") - - th.assertFileNotExist("public/s2/index.html") - // But the bundled resources needs to be published - th.assertFileContent(filepath.FromSlash("public/s2/l1.png"), "PNG") - - // No headless bundles here, please. - // https://github.com/gohugoio/hugo/issues/6492 - c.Assert(s.RegularPages(), qt.HasLen, 1) - c.Assert(s.Pages(), qt.HasLen, 4) - c.Assert(s.home.RegularPages(), qt.HasLen, 1) - c.Assert(s.home.Pages(), qt.HasLen, 1) -} - func TestPageBundlerHeadlessIssue6552(t *testing.T) { t.Parallel() diff --git a/hugolib/rss_test.go b/hugolib/rss_test.go index 34c2be393..8b657d5d8 100644 --- a/hugolib/rss_test.go +++ b/hugolib/rss_test.go @@ -14,50 +14,9 @@ package hugolib import ( - "path/filepath" - "strings" "testing" - - "github.com/gohugoio/hugo/deps" ) -func TestRSSOutput(t *testing.T) { - t.Parallel() - - rssLimit := len(weightedSources) - 1 - - cfg, fs := newTestCfg() - cfg.Set("baseURL", "http://auth/bub/") - cfg.Set("title", "RSSTest") - cfg.Set("rssLimit", rssLimit) - th, configs := newTestHelperFromProvider(cfg, fs, t) - - rssURI := "index.xml" - - for _, src := range weightedSources { - writeSource(t, fs, filepath.Join("content", "sect", src[0]), src[1]) - } - - buildSingleSite(t, deps.DepsCfg{Fs: fs, Configs: configs}, BuildCfg{}) - - // Home RSS - th.assertFileContent(filepath.Join("public", rssURI), "") - if c != rssLimit { - t.Errorf("incorrect RSS item count: expected %d, got %d", rssLimit, c) - } - - // Encoded summary - th.assertFileContent(filepath.Join("public", rssURI), "Single|{{ .Title }}") - writeSource(t, fs, filepath.Join("layouts", "_default", "list.html"), - ` -{{ $sect := (.Site.GetPage "l1/l2") }} -List|{{ .Title }}|L1/l2-IsActive: {{ .InSection $sect }} -{{ range .Paginator.Pages }} -PAG|{{ .Title }}|{{ $sect.InSection . }} -{{ end }} -{{/* https://github.com/gohugoio/hugo/issues/4989 */}} -{{ $sections := (.Site.GetPage "section" .Section).Sections.ByWeight }} -`) - - cfg.Set("pagination.pagerSize", 2) - - th, configs := newTestHelperFromProvider(cfg, fs, t) - - s := buildSingleSite(t, deps.DepsCfg{Fs: fs, Configs: configs}, BuildCfg{}) - - c.Assert(len(s.RegularPages()), qt.Equals, 21) - - tests := []struct { - sections string - verify func(c *qt.C, p page.Page) - }{ - {"elsewhere", func(c *qt.C, p page.Page) { - c.Assert(len(p.Pages()), qt.Equals, 1) - for _, p := range p.Pages() { - c.Assert(p.SectionsPath(), qt.Equals, "/elsewhere") - } - }}, - {"post", func(c *qt.C, p page.Page) { - c.Assert(len(p.Pages()), qt.Equals, 2) - for _, p := range p.Pages() { - c.Assert(p.Section(), qt.Equals, "post") - } - }}, - {"empty1", func(c *qt.C, p page.Page) { - // > b,c - c.Assert(getPage(p, "/empty1/b"), qt.IsNil) // No _index.md page. - c.Assert(getPage(p, "/empty1/b/c"), qt.Not(qt.IsNil)) - }}, - {"empty2", func(c *qt.C, p page.Page) { - // > b,c,d where b and d have _index.md files. - b := getPage(p, "/empty2/b") - c.Assert(b, qt.Not(qt.IsNil)) - c.Assert(b.Title(), qt.Equals, "T40_-1") - - cp := getPage(p, "/empty2/b/c") - c.Assert(cp, qt.IsNil) // No _index.md - - d := getPage(p, "/empty2/b/c/d") - c.Assert(d, qt.Not(qt.IsNil)) - c.Assert(d.Title(), qt.Equals, "T41_-1") - - c.Assert(cp.Eq(d), qt.Equals, false) - c.Assert(cp.Eq(cp), qt.Equals, true) - c.Assert(cp.Eq("asdf"), qt.Equals, false) - }}, - {"empty3", func(c *qt.C, p page.Page) { - // b,c,d with regular page in b - b := getPage(p, "/empty3/b") - c.Assert(b, qt.IsNil) // No _index.md - e3 := getPage(p, "/empty3/b/empty3") - c.Assert(e3, qt.Not(qt.IsNil)) - c.Assert(e3.File().LogicalName(), qt.Equals, "empty3.md") - }}, - {"empty3", func(c *qt.C, p page.Page) { - xxx := getPage(p, "/empty3/nil") - c.Assert(xxx, qt.IsNil) - }}, - {"top", func(c *qt.C, p page.Page) { - c.Assert(p.Title(), qt.Equals, "Tops") - c.Assert(len(p.Pages()), qt.Equals, 2) - c.Assert(p.Pages()[0].File().LogicalName(), qt.Equals, "mypage2.md") - c.Assert(p.Pages()[1].File().LogicalName(), qt.Equals, "mypage3.md") - home := p.Parent() - c.Assert(home.IsHome(), qt.Equals, true) - c.Assert(len(p.Sections()), qt.Equals, 0) - c.Assert(home.CurrentSection(), qt.Equals, home) - active := home.InSection(home) - c.Assert(active, qt.Equals, true) - c.Assert(p.FirstSection(), qt.Equals, p) - c.Assert(len(p.Ancestors()), qt.Equals, 1) - }}, - {"l1", func(c *qt.C, p page.Page) { - c.Assert(p.Title(), qt.Equals, "L1s") - c.Assert(len(p.Pages()), qt.Equals, 4) // 2 pages + 2 sections - c.Assert(p.Parent().IsHome(), qt.Equals, true) - c.Assert(len(p.Sections()), qt.Equals, 2) - c.Assert(len(p.Ancestors()), qt.Equals, 1) - }}, - {"l1,l2", func(c *qt.C, p page.Page) { - c.Assert(p.Title(), qt.Equals, "T2_-1") - c.Assert(len(p.Pages()), qt.Equals, 4) // 3 pages + 1 section - c.Assert(p.Pages()[0].Parent(), qt.Equals, p) - c.Assert(p.Parent().Title(), qt.Equals, "L1s") - c.Assert(p.RelPermalink(), qt.Equals, "/l1/l2/") - c.Assert(len(p.Sections()), qt.Equals, 1) - c.Assert(len(p.Ancestors()), qt.Equals, 2) - - for _, child := range p.Pages() { - if child.IsSection() { - c.Assert(child.CurrentSection(), qt.Equals, child) - continue - } - - c.Assert(child.CurrentSection(), qt.Equals, p) - active := child.InSection(p) - - c.Assert(active, qt.Equals, true) - active = p.InSection(child) - c.Assert(active, qt.Equals, true) - active = p.InSection(getPage(p, "/")) - c.Assert(active, qt.Equals, false) - - isAncestor := p.IsAncestor(child) - c.Assert(isAncestor, qt.Equals, true) - isAncestor = child.IsAncestor(p) - c.Assert(isAncestor, qt.Equals, false) - - isDescendant := p.IsDescendant(child) - c.Assert(isDescendant, qt.Equals, false) - isDescendant = child.IsDescendant(p) - c.Assert(isDescendant, qt.Equals, true) - } - - c.Assert(p.Eq(p.CurrentSection()), qt.Equals, true) - }}, - {"l1,l2_2", func(c *qt.C, p page.Page) { - c.Assert(p.Title(), qt.Equals, "T22_-1") - c.Assert(len(p.Pages()), qt.Equals, 2) - c.Assert(p.Pages()[0].File().Path(), qt.Equals, filepath.FromSlash("l1/l2_2/page_2_2_1.md")) - c.Assert(p.Parent().Title(), qt.Equals, "L1s") - c.Assert(len(p.Sections()), qt.Equals, 0) - c.Assert(len(p.Ancestors()), qt.Equals, 2) - }}, - {"l1,l2,l3", func(c *qt.C, p page.Page) { - nilp, _ := p.GetPage("this/does/not/exist") - - c.Assert(p.Title(), qt.Equals, "T3_-1") - c.Assert(len(p.Pages()), qt.Equals, 2) - c.Assert(p.Parent().Title(), qt.Equals, "T2_-1") - c.Assert(len(p.Sections()), qt.Equals, 0) - c.Assert(len(p.Ancestors()), qt.Equals, 3) - - l1 := getPage(p, "/l1") - isDescendant := l1.IsDescendant(p) - c.Assert(isDescendant, qt.Equals, false) - isDescendant = l1.IsDescendant(nil) - c.Assert(isDescendant, qt.Equals, false) - isDescendant = nilp.IsDescendant(p) - c.Assert(isDescendant, qt.Equals, false) - isDescendant = p.IsDescendant(l1) - c.Assert(isDescendant, qt.Equals, true) - - isAncestor := l1.IsAncestor(p) - c.Assert(isAncestor, qt.Equals, true) - isAncestor = p.IsAncestor(l1) - c.Assert(isAncestor, qt.Equals, false) - c.Assert(p.FirstSection(), qt.Equals, l1) - isAncestor = p.IsAncestor(nil) - c.Assert(isAncestor, qt.Equals, false) - c.Assert(isAncestor, qt.Equals, false) - - l3 := getPage(p, "/l1/l2/l3") - c.Assert(l3.FirstSection(), qt.Equals, l1) - }}, - {"perm a,link", func(c *qt.C, p page.Page) { - c.Assert(p.Title(), qt.Equals, "T9_-1") - c.Assert(p.RelPermalink(), qt.Equals, "/perm-a/link/") - c.Assert(len(p.Pages()), qt.Equals, 4) - first := p.Pages()[0] - c.Assert(first.RelPermalink(), qt.Equals, "/perm-a/link/t1_1/") - th.assertFileContent("public/perm-a/link/t1_1/index.html", "Single|T1_1") - - last := p.Pages()[3] - c.Assert(last.RelPermalink(), qt.Equals, "/perm-a/link/t1_5/") - }}, - } - - home := s.getPageOldVersion(kinds.KindHome) - - for _, test := range tests { - tt.Run(fmt.Sprintf("sections %s", test.sections), func(c *qt.C) { - c.Parallel() - sections := strings.Split(test.sections, ",") - p := s.getPageOldVersion(kinds.KindSection, sections...) - c.Assert(p, qt.Not(qt.IsNil), qt.Commentf(fmt.Sprint(sections))) - - if p.Pages() != nil { - c.Assert(p.Data().(page.Data).Pages(), deepEqualsPages, p.Pages()) - } - c.Assert(p.Parent(), qt.Not(qt.IsNil)) - test.verify(c, p) - }) - } - - c.Assert(home, qt.Not(qt.IsNil)) - c.Assert(len(home.Ancestors()), qt.Equals, 0) - - c.Assert(len(home.Sections()), qt.Equals, 9) - c.Assert(s.Sections(), deepEqualsPages, home.Sections()) - - rootPage := s.getPageOldVersion(kinds.KindPage, "mypage.md") - c.Assert(rootPage, qt.Not(qt.IsNil)) - c.Assert(rootPage.Parent().IsHome(), qt.Equals, true) - // https://github.com/gohugoio/hugo/issues/6365 - c.Assert(rootPage.Sections(), qt.HasLen, 0) - - sectionWithSpace := s.getPageOldVersion(kinds.KindSection, "Spaces in Section") - // s.h.pageTrees.debugPrint() - c.Assert(sectionWithSpace, qt.Not(qt.IsNil)) - c.Assert(sectionWithSpace.RelPermalink(), qt.Equals, "/spaces-in-section/") - - th.assertFileContent("public/l1/l2/page/2/index.html", "L1/l2-IsActive: true", "PAG|T2_3|true") -} - func TestNextInSectionNested(t *testing.T) { t.Parallel() diff --git a/hugolib/site_test.go b/hugolib/site_test.go index 877b8ac19..8d58d7350 100644 --- a/hugolib/site_test.go +++ b/hugolib/site_test.go @@ -22,7 +22,6 @@ import ( "strings" "testing" - "github.com/gobuffalo/flect" "github.com/gohugoio/hugo/config" "github.com/gohugoio/hugo/publisher" @@ -167,110 +166,6 @@ func TestPageWithUnderScoreIndexInFilename(t *testing.T) { c.Assert(len(s.RegularPages()), qt.Equals, 1) } -// Issue #957 -func TestCrossrefs(t *testing.T) { - t.Parallel() - for _, uglyURLs := range []bool{true, false} { - for _, relative := range []bool{true, false} { - doTestCrossrefs(t, relative, uglyURLs) - } - } -} - -func doTestCrossrefs(t *testing.T, relative, uglyURLs bool) { - c := qt.New(t) - - baseURL := "http://foo/bar" - - var refShortcode string - var expectedBase string - var expectedURLSuffix string - var expectedPathSuffix string - - if relative { - refShortcode = "relref" - expectedBase = "/bar" - } else { - refShortcode = "ref" - expectedBase = baseURL - } - - if uglyURLs { - expectedURLSuffix = ".html" - expectedPathSuffix = ".html" - } else { - expectedURLSuffix = "/" - expectedPathSuffix = "/index.html" - } - - doc3Slashed := filepath.FromSlash("/sect/doc3.md") - - sources := [][2]string{ - { - filepath.FromSlash("sect/doc1.md"), - fmt.Sprintf(`Ref 2: {{< %s "sect/doc2.md" >}}`, refShortcode), - }, - // Issue #1148: Make sure that no P-tags is added around shortcodes. - { - filepath.FromSlash("sect/doc2.md"), - fmt.Sprintf(`**Ref 1:** - -{{< %s "sect/doc1.md" >}} - -THE END.`, refShortcode), - }, - // Issue #1753: Should not add a trailing newline after shortcode. - { - filepath.FromSlash("sect/doc3.md"), - fmt.Sprintf(`**Ref 1:** {{< %s "sect/doc3.md" >}}.`, refShortcode), - }, - // Issue #3703 - { - filepath.FromSlash("sect/doc4.md"), - fmt.Sprintf(`**Ref 1:** {{< %s "%s" >}}.`, refShortcode, doc3Slashed), - }, - } - - cfg, fs := newTestCfg() - - cfg.Set("baseURL", baseURL) - cfg.Set("uglyURLs", uglyURLs) - cfg.Set("verbose", true) - configs, err := loadTestConfigFromProvider(cfg) - c.Assert(err, qt.IsNil) - - for _, src := range sources { - writeSource(t, fs, filepath.Join("content", src[0]), src[1]) - } - writeSource(t, fs, filepath.Join("layouts", "_default", "single.html"), "{{.Content}}") - - s := buildSingleSite( - t, - deps.DepsCfg{ - Fs: fs, - Configs: configs, - }, - BuildCfg{}) - - c.Assert(len(s.RegularPages()), qt.Equals, 4) - - th := newTestHelper(s.conf, s.Fs, t) - - tests := []struct { - doc string - expected string - }{ - {filepath.FromSlash(fmt.Sprintf("public/sect/doc1%s", expectedPathSuffix)), fmt.Sprintf("

Ref 2: %s/sect/doc2%s

\n", expectedBase, expectedURLSuffix)}, - {filepath.FromSlash(fmt.Sprintf("public/sect/doc2%s", expectedPathSuffix)), fmt.Sprintf("

Ref 1:

\n%s/sect/doc1%s\n

THE END.

\n", expectedBase, expectedURLSuffix)}, - {filepath.FromSlash(fmt.Sprintf("public/sect/doc3%s", expectedPathSuffix)), fmt.Sprintf("

Ref 1: %s/sect/doc3%s.

\n", expectedBase, expectedURLSuffix)}, - {filepath.FromSlash(fmt.Sprintf("public/sect/doc4%s", expectedPathSuffix)), fmt.Sprintf("

Ref 1: %s/sect/doc3%s.

\n", expectedBase, expectedURLSuffix)}, - } - - for _, test := range tests { - th.assertFileContent(test.doc, test.expected) - } -} - // Issue #939 // Issue #1923 func TestShouldAlwaysHaveUglyURLs(t *testing.T) { @@ -341,24 +236,6 @@ func doTestShouldAlwaysHaveUglyURLs(t *testing.T, uglyURLs bool) { } } -// Issue #3355 -func TestShouldNotWriteZeroLengthFilesToDestination(t *testing.T) { - c := qt.New(t) - - cfg, fs := newTestCfg() - configs, err := loadTestConfigFromProvider(cfg) - c.Assert(err, qt.IsNil) - - writeSource(t, fs, filepath.Join("content", "simple.html"), "simple") - writeSource(t, fs, filepath.Join("layouts", "_default/single.html"), "{{.Content}}") - writeSource(t, fs, filepath.Join("layouts", "_default/list.html"), "") - - s := buildSingleSite(t, deps.DepsCfg{Fs: fs, Configs: configs}, BuildCfg{}) - th := newTestHelper(s.conf, s.Fs, t) - - th.assertFileNotExist(filepath.Join("public", "index.html")) -} - func TestMainSections(t *testing.T) { c := qt.New(t) for _, paramSet := range []bool{false, true} { @@ -491,88 +368,6 @@ MainSections Site method: [mysect]| }) } -// Issue #1176 -func TestSectionNaming(t *testing.T) { - for _, canonify := range []bool{true, false} { - for _, uglify := range []bool{true, false} { - for _, pluralize := range []bool{true, false} { - canonify := canonify - uglify := uglify - pluralize := pluralize - t.Run(fmt.Sprintf("canonify=%t,uglify=%t,pluralize=%t", canonify, uglify, pluralize), func(t *testing.T) { - t.Parallel() - doTestSectionNaming(t, canonify, uglify, pluralize) - }) - } - } - } -} - -func doTestSectionNaming(t *testing.T, canonify, uglify, pluralize bool) { - c := qt.New(t) - - expectedPathSuffix := func(kind string) string { - isUgly := uglify && (kind == kinds.KindPage || kind == kinds.KindTerm) - if isUgly { - return ".html" - } else { - return "/index.html" - } - } - - sources := [][2]string{ - {filepath.FromSlash("sect/doc1.html"), "doc1"}, - // Add one more page to sect to make sure sect is picked in mainSections - {filepath.FromSlash("sect/sect.html"), "sect"}, - {filepath.FromSlash("Fish and Chips/doc2.html"), "doc2"}, - {filepath.FromSlash("ラーメン/doc3.html"), "doc3"}, - } - - cfg, fs := newTestCfg() - - cfg.Set("baseURL", "http://auth/sub/") - cfg.Set("uglyURLs", uglify) - cfg.Set("pluralizeListTitles", pluralize) - cfg.Set("canonifyURLs", canonify) - - configs, err := loadTestConfigFromProvider(cfg) - c.Assert(err, qt.IsNil) - - for _, src := range sources { - writeSource(t, fs, filepath.Join("content", src[0]), src[1]) - } - - writeSource(t, fs, filepath.Join("layouts", "_default/single.html"), "{{.Content}}") - writeSource(t, fs, filepath.Join("layouts", "_default/list.html"), "{{ .Kind }}|{{.Title}}") - - s := buildSingleSite(t, deps.DepsCfg{Fs: fs, Configs: configs}, BuildCfg{}) - - c.Assert(s.MainSections(), qt.DeepEquals, []string{"sect"}) - - th := newTestHelper(s.conf, s.Fs, t) - tests := []struct { - doc string - pluralAware bool - expected string - }{ - {filepath.FromSlash(fmt.Sprintf("sect/doc1%s", expectedPathSuffix(kinds.KindPage))), false, "doc1"}, - {filepath.FromSlash(fmt.Sprintf("sect%s", expectedPathSuffix(kinds.KindSection))), true, "Sect"}, - {filepath.FromSlash(fmt.Sprintf("fish-and-chips/doc2%s", expectedPathSuffix(kinds.KindPage))), false, "doc2"}, - {filepath.FromSlash(fmt.Sprintf("fish-and-chips%s", expectedPathSuffix(kinds.KindSection))), true, "Fish and Chips"}, - {filepath.FromSlash(fmt.Sprintf("ラーメン/doc3%s", expectedPathSuffix(kinds.KindPage))), false, "doc3"}, - {filepath.FromSlash(fmt.Sprintf("ラーメン%s", expectedPathSuffix(kinds.KindSection))), true, "ラーメン"}, - } - - for _, test := range tests { - - if test.pluralAware && pluralize { - test.expected = flect.Pluralize(test.expected) - } - - th.assertFileContent(filepath.Join("public", test.doc), test.expected) - } -} - var weightedPage1 = `+++ weight = "2" title = "One" diff --git a/hugolib/site_url_test.go b/hugolib/site_url_test.go index 091251f80..feefca985 100644 --- a/hugolib/site_url_test.go +++ b/hugolib/site_url_test.go @@ -14,7 +14,6 @@ package hugolib import ( - "fmt" "path/filepath" "testing" @@ -64,59 +63,6 @@ Do not go gentle into that good night. c.Assert(ugly.RelPermalink(), qt.Equals, "/sect2/p2.html") } -func TestSectionWithURLInFrontMatter(t *testing.T) { - t.Parallel() - - c := qt.New(t) - - const st = `--- -title: Do not go gentle into that good night -url: %s ---- - -Wild men who caught and sang the sun in flight, -And learn, too late, they grieved it on its way, -Do not go gentle into that good night. - -` - - const pt = `--- -title: Wild men who caught and sang the sun in flight ---- - -Wild men who caught and sang the sun in flight, -And learn, too late, they grieved it on its way, -Do not go gentle into that good night. - -` - - cfg, fs := newTestCfg() - cfg.Set("pagination.pagerSize", 1) - th, configs := newTestHelperFromProvider(cfg, fs, t) - - writeSource(t, fs, filepath.Join("content", "sect1", "_index.md"), fmt.Sprintf(st, "/ss1/")) - writeSource(t, fs, filepath.Join("content", "sect2", "_index.md"), fmt.Sprintf(st, "/ss2/")) - - for i := range 5 { - writeSource(t, fs, filepath.Join("content", "sect1", fmt.Sprintf("p%d.md", i+1)), pt) - writeSource(t, fs, filepath.Join("content", "sect2", fmt.Sprintf("p%d.md", i+1)), pt) - } - - writeSource(t, fs, filepath.Join("layouts", "_default", "single.html"), "{{.Content}}") - writeSource(t, fs, filepath.Join("layouts", "_default", "list.html"), - "P{{.Paginator.PageNumber}}|URL: {{.Paginator.URL}}|{{ if .Paginator.HasNext }}Next: {{.Paginator.Next.URL }}{{ end }}") - - s := buildSingleSite(t, deps.DepsCfg{Fs: fs, Configs: configs}, BuildCfg{}) - - c.Assert(len(s.RegularPages()), qt.Equals, 10) - - sect1 := s.getPageOldVersion(kinds.KindSection, "sect1") - c.Assert(sect1, qt.Not(qt.IsNil)) - c.Assert(sect1.RelPermalink(), qt.Equals, "/ss1/") - th.assertFileContent(filepath.Join("public", "ss1", "index.html"), "P1|URL: /ss1/|Next: /ss1/page/2/") - th.assertFileContent(filepath.Join("public", "ss1", "page", "2", "index.html"), "P2|URL: /ss1/page/2/|Next: /ss1/page/3/") -} - func TestSectionsEntries(t *testing.T) { files := ` -- hugo.toml -- diff --git a/hugolib/template_test.go b/hugolib/template_test.go index 56b9c3f9b..5f54c8bde 100644 --- a/hugolib/template_test.go +++ b/hugolib/template_test.go @@ -15,202 +15,11 @@ package hugolib import ( "fmt" - "path/filepath" "testing" - "github.com/gohugoio/hugo/config" - "github.com/gohugoio/hugo/config/allconfig" - qt "github.com/frankban/quicktest" - "github.com/gohugoio/hugo/deps" - "github.com/gohugoio/hugo/hugofs" ) -// TODO(bep) keep this until we release v0.146.0 as a security against breaking changes, but it's rather messy and mostly duplicate of -// tests in the tplimpl package, so eventually just remove it. -func TestTemplateLookupOrder(t *testing.T) { - var ( - fs *hugofs.Fs - cfg config.Provider - th testHelper - configs *allconfig.Configs - ) - - // Variants base templates: - // 1. /-baseof., e.g. list-baseof.. - // 2. /baseof. - // 3. _default/-baseof., e.g. list-baseof.. - // 4. _default/baseof. - for _, this := range []struct { - name string - setup func(t *testing.T) - assert func(t *testing.T) - }{ - { - "Variant 1", - func(t *testing.T) { - writeSource(t, fs, filepath.Join("layouts", "section", "sect1-baseof.html"), `Base: {{block "main" .}}block{{end}}`) - writeSource(t, fs, filepath.Join("layouts", "section", "sect1.html"), `{{define "main"}}sect{{ end }}`) - }, - func(t *testing.T) { - th.assertFileContent(filepath.Join("public", "sect1", "index.html"), "Base: sect") - }, - }, - { - "Variant 2", - func(t *testing.T) { - writeSource(t, fs, filepath.Join("layouts", "baseof.html"), `Base: {{block "main" .}}block{{end}}`) - writeSource(t, fs, filepath.Join("layouts", "index.html"), `{{define "main"}}index{{ end }}`) - }, - func(t *testing.T) { - th.assertFileContent(filepath.Join("public", "index.html"), "Base: index") - }, - }, - { - "Variant 3", - func(t *testing.T) { - writeSource(t, fs, filepath.Join("layouts", "_default", "list-baseof.html"), `Base: {{block "main" .}}block{{end}}`) - writeSource(t, fs, filepath.Join("layouts", "_default", "list.html"), `{{define "main"}}list{{ end }}`) - }, - func(t *testing.T) { - th.assertFileContent(filepath.Join("public", "sect1", "index.html"), "Base: list") - }, - }, - { - "Variant 4", - func(t *testing.T) { - writeSource(t, fs, filepath.Join("layouts", "_default", "baseof.html"), `Base: {{block "main" .}}block{{end}}`) - writeSource(t, fs, filepath.Join("layouts", "_default", "list.html"), `{{define "main"}}list{{ end }}`) - }, - func(t *testing.T) { - th.assertFileContent(filepath.Join("public", "sect1", "index.html"), "Base: list") - }, - }, - { - "Variant 1, theme, use site base", - func(t *testing.T) { - cfg.Set("theme", "mytheme") - writeSource(t, fs, filepath.Join("layouts", "section", "sect1-baseof.html"), `Base: {{block "main" .}}block{{end}}`) - writeSource(t, fs, filepath.Join("themes", "mytheme", "layouts", "section", "sect-baseof.html"), `Base Theme: {{block "main" .}}block{{end}}`) - writeSource(t, fs, filepath.Join("layouts", "section", "sect1.html"), `{{define "main"}}sect{{ end }}`) - }, - func(t *testing.T) { - th.assertFileContent(filepath.Join("public", "sect1", "index.html"), "Base: sect") - }, - }, - { - "Variant 1, theme, use theme base", - func(t *testing.T) { - cfg.Set("theme", "mytheme") - writeSource(t, fs, filepath.Join("themes", "mytheme", "layouts", "section", "sect1-baseof.html"), `Base Theme: {{block "main" .}}block{{end}}`) - writeSource(t, fs, filepath.Join("layouts", "section", "sect1.html"), `{{define "main"}}sect{{ end }}`) - }, - func(t *testing.T) { - th.assertFileContent(filepath.Join("public", "sect1", "index.html"), "Base Theme: sect") - }, - }, - { - "Variant 4, theme, use site base", - func(t *testing.T) { - cfg.Set("theme", "mytheme") - writeSource(t, fs, filepath.Join("layouts", "_default", "baseof.html"), `Base: {{block "main" .}}block{{end}}`) - writeSource(t, fs, filepath.Join("themes", "mytheme", "layouts", "_default", "baseof.html"), `Base Theme: {{block "main" .}}block{{end}}`) - writeSource(t, fs, filepath.Join("themes", "mytheme", "layouts", "_default", "list.html"), `{{define "main"}}list{{ end }}`) - writeSource(t, fs, filepath.Join("themes", "mytheme", "layouts", "index.html"), `{{define "main"}}index{{ end }}`) - }, - func(t *testing.T) { - th.assertFileContent(filepath.Join("public", "sect1", "index.html"), "Base: list") - th.assertFileContent(filepath.Join("public", "index.html"), "Base: index") // Issue #3505 - }, - }, - { - "Variant 4, theme, use themes base", - func(t *testing.T) { - cfg.Set("theme", "mytheme") - writeSource(t, fs, filepath.Join("themes", "mytheme", "layouts", "_default", "baseof.html"), `Base Theme: {{block "main" .}}block{{end}}`) - writeSource(t, fs, filepath.Join("themes", "mytheme", "layouts", "_default", "list.html"), `{{define "main"}}list{{ end }}`) - }, - func(t *testing.T) { - th.assertFileContent(filepath.Join("public", "sect1", "index.html"), "Base Theme: list") - }, - }, - { - // Issue #3116 - "Test section list and single template selection", - func(t *testing.T) { - cfg.Set("theme", "mytheme") - - writeSource(t, fs, filepath.Join("layouts", "_default", "baseof.html"), `Base: {{block "main" .}}block{{end}}`) - - // Both single and list template in /SECTION/ - writeSource(t, fs, filepath.Join("themes", "mytheme", "layouts", "sect1", "list.html"), `sect list`) - writeSource(t, fs, filepath.Join("themes", "mytheme", "layouts", "_default", "list.html"), `default list`) - writeSource(t, fs, filepath.Join("themes", "mytheme", "layouts", "sect1", "single.html"), `sect single`) - writeSource(t, fs, filepath.Join("themes", "mytheme", "layouts", "_default", "single.html"), `default single`) - - // sect2 with list template in /section - writeSource(t, fs, filepath.Join("themes", "mytheme", "layouts", "section", "sect2.html"), `sect2 list`) - }, - func(t *testing.T) { - th.assertFileContent(filepath.Join("public", "sect1", "index.html"), "sect list") - th.assertFileContent(filepath.Join("public", "sect1", "page1", "index.html"), "sect single") - th.assertFileContent(filepath.Join("public", "sect2", "index.html"), "sect2 list") - }, - }, - { - // Issue #2995 - "Test section list and single template selection with base template", - func(t *testing.T) { - writeSource(t, fs, filepath.Join("layouts", "_default", "baseof.html"), `Base Default: {{block "main" .}}block{{end}}`) - writeSource(t, fs, filepath.Join("layouts", "sect1", "baseof.html"), `Base Sect1: {{block "main" .}}block{{end}}`) - writeSource(t, fs, filepath.Join("layouts", "section", "sect2-baseof.html"), `Base Sect2: {{block "main" .}}block{{end}}`) - - // Both single and list + base template in /SECTION/ - writeSource(t, fs, filepath.Join("layouts", "sect1", "list.html"), `{{define "main"}}sect1 list{{ end }}`) - writeSource(t, fs, filepath.Join("layouts", "_default", "list.html"), `{{define "main"}}default list{{ end }}`) - writeSource(t, fs, filepath.Join("layouts", "sect1", "single.html"), `{{define "main"}}sect single{{ end }}`) - writeSource(t, fs, filepath.Join("layouts", "_default", "single.html"), `{{define "main"}}default single{{ end }}`) - - // sect2 with list template in /section - writeSource(t, fs, filepath.Join("layouts", "section", "sect2.html"), `{{define "main"}}sect2 list{{ end }}`) - }, - func(t *testing.T) { - th.assertFileContent(filepath.Join("public", "sect1", "index.html"), "Base Sect1", "sect1 list") - th.assertFileContent(filepath.Join("public", "sect1", "page1", "index.html"), "Base Sect1", "sect single") - th.assertFileContent(filepath.Join("public", "sect2", "index.html"), "Base Sect2", "sect2 list") - - // Note that this will get the default base template and not the one in /sect2 -- because there are no - // single template defined in /sect2. - th.assertFileContent(filepath.Join("public", "sect2", "page2", "index.html"), "Base Default", "default single") - }, - }, - } { - - if this.name != "Variant 1" { - continue - } - t.Run(this.name, func(t *testing.T) { - // TODO(bep) there are some function vars need to pull down here to enable => t.Parallel() - cfg, fs = newTestCfg() - this.setup(t) - th, configs = newTestHelperFromProvider(cfg, fs, t) - - for i := 1; i <= 3; i++ { - writeSource(t, fs, filepath.Join("content", fmt.Sprintf("sect%d", i), fmt.Sprintf("page%d.md", i)), `--- -title: Template test ---- -Some content -`) - } - - buildSingleSite(t, deps.DepsCfg{Fs: fs, Configs: configs}, BuildCfg{}) - // s.TemplateStore.PrintDebug("", 0, os.Stdout) - this.assert(t) - }) - - } -} - // https://github.com/gohugoio/hugo/issues/4895 func TestTemplateBOM(t *testing.T) { b := newTestSitesBuilder(t).WithSimpleConfigFile() diff --git a/hugolib/testhelpers_test.go b/hugolib/testhelpers_test.go index 2fa3d5634..bfd9b8826 100644 --- a/hugolib/testhelpers_test.go +++ b/hugolib/testhelpers_test.go @@ -38,8 +38,6 @@ import ( "github.com/spf13/afero" "github.com/spf13/cast" - "github.com/gohugoio/hugo/helpers" - "github.com/gohugoio/hugo/resources/resource" qt "github.com/frankban/quicktest" @@ -844,57 +842,6 @@ func (s *sitesBuilder) NpmInstall() hexec.Runner { return command } -func newTestHelperFromProvider(cfg config.Provider, fs *hugofs.Fs, t testing.TB) (testHelper, *allconfig.Configs) { - res, err := allconfig.LoadConfig(allconfig.ConfigSourceDescriptor{ - Flags: cfg, - Fs: fs.Source, - }) - if err != nil { - t.Fatal(err) - } - return newTestHelper(res.Base, fs, t), res -} - -func newTestHelper(cfg *allconfig.Config, fs *hugofs.Fs, t testing.TB) testHelper { - return testHelper{ - Cfg: cfg, - Fs: fs, - C: qt.New(t), - } -} - -type testHelper struct { - Cfg *allconfig.Config - Fs *hugofs.Fs - *qt.C -} - -func (th testHelper) assertFileContent(filename string, matches ...string) { - th.Helper() - filename = th.replaceDefaultContentLanguageValue(filename) - content := readWorkingDir(th, th.Fs, filename) - for _, match := range matches { - match = th.replaceDefaultContentLanguageValue(match) - th.Assert(strings.Contains(content, match), qt.Equals, true, qt.Commentf(match+" not in: \n"+content)) - } -} - -func (th testHelper) assertFileNotExist(filename string) { - exists, err := helpers.Exists(filename, th.Fs.PublishDir) - th.Assert(err, qt.IsNil) - th.Assert(exists, qt.Equals, false) -} - -func (th testHelper) replaceDefaultContentLanguageValue(value string) string { - defaultInSubDir := th.Cfg.DefaultContentLanguageInSubdir - replace := th.Cfg.DefaultContentLanguage + "/" - - if !defaultInSubDir { - value = strings.Replace(value, replace, "", 1) - } - return value -} - func loadTestConfigFromProvider(cfg config.Provider) (*allconfig.Configs, error) { workingDir := cfg.GetString("workingDir") fs := afero.NewMemMapFs() @@ -905,7 +852,7 @@ func loadTestConfigFromProvider(cfg config.Provider) (*allconfig.Configs, error) return res, err } -func newTestCfg(withConfig ...func(cfg config.Provider) error) (config.Provider, *hugofs.Fs) { +func newTestCfg() (config.Provider, *hugofs.Fs) { mm := afero.NewMemMapFs() cfg := config.New() cfg.Set("defaultContentLanguageInSubdir", false) @@ -916,33 +863,6 @@ func newTestCfg(withConfig ...func(cfg config.Provider) error) (config.Provider, return cfg, fs } -func newTestSitesFromConfig(t testing.TB, afs afero.Fs, tomlConfig string, layoutPathContentPairs ...string) (testHelper, *HugoSites) { - if len(layoutPathContentPairs)%2 != 0 { - t.Fatalf("Layouts must be provided in pairs") - } - - c := qt.New(t) - - writeToFs(t, afs, filepath.Join("content", ".gitkeep"), "") - writeToFs(t, afs, "config.toml", tomlConfig) - - cfg, err := allconfig.LoadConfig(allconfig.ConfigSourceDescriptor{Fs: afs}) - c.Assert(err, qt.IsNil) - - fs := hugofs.NewFrom(afs, cfg.LoadingInfo.BaseConfig) - th := newTestHelper(cfg.Base, fs, t) - - for i := 0; i < len(layoutPathContentPairs); i += 2 { - writeSource(t, fs, layoutPathContentPairs[i], layoutPathContentPairs[i+1]) - } - - h, err := NewHugoSites(deps.DepsCfg{Fs: fs, Configs: cfg}) - - c.Assert(err, qt.IsNil) - - return th, h -} - // TODO(bep) replace these with the builder func buildSingleSite(t testing.TB, depsCfg deps.DepsCfg, buildCfg BuildCfg) *Site { t.Helper() @@ -983,14 +903,6 @@ func writeSourcesToSource(t *testing.T, base string, fs *hugofs.Fs, sources ...[ } } -func getPage(in page.Page, ref string) page.Page { - p, err := in.GetPage(ref) - if err != nil { - panic(err) - } - return p -} - func content(c resource.ContentProvider) string { cc, err := c.Content(context.Background()) if err != nil {