summaryrefslogtreecommitdiffstats
path: root/hugolib/pagebundler_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'hugolib/pagebundler_test.go')
-rw-r--r--hugolib/pagebundler_test.go384
1 files changed, 244 insertions, 140 deletions
diff --git a/hugolib/pagebundler_test.go b/hugolib/pagebundler_test.go
index 79e0a107d..f5a6d9a84 100644
--- a/hugolib/pagebundler_test.go
+++ b/hugolib/pagebundler_test.go
@@ -16,18 +16,18 @@ package hugolib
import (
"os"
"path"
- "runtime"
+ "regexp"
"strings"
"testing"
+ "github.com/gohugoio/hugo/hugofs"
+
"github.com/gohugoio/hugo/common/loggers"
"github.com/gohugoio/hugo/resources/page"
- "github.com/gohugoio/hugo/helpers"
-
"io"
- "github.com/spf13/afero"
+ "github.com/gohugoio/hugo/htesting"
"github.com/gohugoio/hugo/media"
@@ -36,7 +36,6 @@ import (
"fmt"
"github.com/gohugoio/hugo/deps"
- "github.com/gohugoio/hugo/hugofs"
"github.com/spf13/viper"
"github.com/stretchr/testify/require"
@@ -54,8 +53,11 @@ func TestPageBundlerSiteRegular(t *testing.T) {
if baseURLPathId == "" {
baseURLPathId = "NONE"
}
+ ugly := ugly
+ canonify := canonify
t.Run(fmt.Sprintf("ugly=%t,canonify=%t,path=%s", ugly, canonify, baseURLPathId),
func(t *testing.T) {
+ t.Parallel()
baseURL := baseBaseURL + baseURLPath
relURLBase := baseURLPath
if canonify {
@@ -65,14 +67,12 @@ func TestPageBundlerSiteRegular(t *testing.T) {
fs, cfg := newTestBundleSources(t)
cfg.Set("baseURL", baseURL)
cfg.Set("canonifyURLs", canonify)
- assert.NoError(loadDefaultSettingsFor(cfg))
- assert.NoError(loadLanguageSettings(cfg, nil))
cfg.Set("permalinks", map[string]string{
"a": ":sections/:filename",
"b": ":year/:slug/",
"c": ":sections/:slug",
- "": ":filename/",
+ "/": ":filename/",
})
cfg.Set("outputFormats", map[string]interface{}{
@@ -92,9 +92,11 @@ func TestPageBundlerSiteRegular(t *testing.T) {
cfg.Set("uglyURLs", ugly)
- s := buildSingleSite(t, deps.DepsCfg{Logger: loggers.NewErrorLogger(), Fs: fs, Cfg: cfg}, BuildCfg{})
+ b := newTestSitesBuilderFromDepsCfg(t, deps.DepsCfg{Logger: loggers.NewErrorLogger(), Fs: fs, Cfg: cfg}).WithNothingAdded()
+
+ b.Build(BuildCfg{})
- th := testHelper{s.Cfg, s.Fs, t}
+ s := b.H.Sites[0]
assert.Len(s.RegularPages(), 8)
@@ -127,22 +129,22 @@ func TestPageBundlerSiteRegular(t *testing.T) {
// Check both output formats
rel, filename := relFilename("/a/1/", "index.html")
- th.assertFileContent(filepath.Join("/work/public", filename),
+ b.AssertFileContent(filepath.Join("/work/public", filename),
"TheContent",
"Single RelPermalink: "+rel,
)
rel, filename = relFilename("/cpath/a/1/", "cindex.html")
- th.assertFileContent(filepath.Join("/work/public", filename),
+ b.AssertFileContent(filepath.Join("/work/public", filename),
"TheContent",
"Single RelPermalink: "+rel,
)
- th.assertFileContent(filepath.FromSlash("/work/public/images/hugo-logo.png"), "content")
+ b.AssertFileContent(filepath.FromSlash("/work/public/images/hugo-logo.png"), "content")
// This should be just copied to destination.
- th.assertFileContent(filepath.FromSlash("/work/public/assets/pic1.png"), "content")
+ b.AssertFileContent(filepath.FromSlash("/work/public/assets/pic1.png"), "content")
leafBundle1 := s.getPage(page.KindPage, "b/my-bundle/index.md")
assert.NotNil(leafBundle1)
@@ -159,8 +161,8 @@ func TestPageBundlerSiteRegular(t *testing.T) {
assert.NotNil(rootBundle)
assert.True(rootBundle.Parent().IsHome())
if !ugly {
- th.assertFileContent(filepath.FromSlash("/work/public/root/index.html"), "Single RelPermalink: "+relURLBase+"/root/")
- th.assertFileContent(filepath.FromSlash("/work/public/cpath/root/cindex.html"), "Single RelPermalink: "+relURLBase+"/cpath/root/")
+ b.AssertFileContent(filepath.FromSlash("/work/public/root/index.html"), "Single RelPermalink: "+relURLBase+"/root/")
+ b.AssertFileContent(filepath.FromSlash("/work/public/cpath/root/cindex.html"), "Single RelPermalink: "+relURLBase+"/cpath/root/")
}
leafBundle2 := s.getPage(page.KindPage, "a/b/index.md")
@@ -172,6 +174,7 @@ func TestPageBundlerSiteRegular(t *testing.T) {
assert.Len(pageResources, 2)
firstPage := pageResources[0].(page.Page)
secondPage := pageResources[1].(page.Page)
+
assert.Equal(filepath.FromSlash("/work/base/b/my-bundle/1.md"), firstPage.File().Filename(), secondPage.File().Filename())
assert.Contains(content(firstPage), "TheContent")
assert.Equal(6, len(leafBundle1.Resources()))
@@ -201,17 +204,17 @@ func TestPageBundlerSiteRegular(t *testing.T) {
}
if ugly {
- th.assertFileContent("/work/public/2017/pageslug.html",
+ b.AssertFileContent("/work/public/2017/pageslug.html",
relPermalinker("Single RelPermalink: %s/2017/pageslug.html"),
permalinker("Single Permalink: %s/2017/pageslug.html"),
relPermalinker("Sunset RelPermalink: %s/2017/pageslug/sunset1.jpg"),
permalinker("Sunset Permalink: %s/2017/pageslug/sunset1.jpg"))
} else {
- th.assertFileContent("/work/public/2017/pageslug/index.html",
+ b.AssertFileContent("/work/public/2017/pageslug/index.html",
relPermalinker("Sunset RelPermalink: %s/2017/pageslug/sunset1.jpg"),
permalinker("Sunset Permalink: %s/2017/pageslug/sunset1.jpg"))
- th.assertFileContent("/work/public/cpath/2017/pageslug/cindex.html",
+ b.AssertFileContent("/work/public/cpath/2017/pageslug/cindex.html",
relPermalinker("Single RelPermalink: %s/cpath/2017/pageslug/"),
relPermalinker("Short Sunset RelPermalink: %s/cpath/2017/pageslug/sunset2.jpg"),
relPermalinker("Sunset RelPermalink: %s/cpath/2017/pageslug/sunset1.jpg"),
@@ -219,15 +222,15 @@ func TestPageBundlerSiteRegular(t *testing.T) {
)
}
- th.assertFileContent(filepath.FromSlash("/work/public/2017/pageslug/c/logo.png"), "content")
- th.assertFileContent(filepath.FromSlash("/work/public/cpath/2017/pageslug/c/logo.png"), "content")
- th.assertFileNotExist("/work/public/cpath/cpath/2017/pageslug/c/logo.png")
+ b.AssertFileContent(filepath.FromSlash("/work/public/2017/pageslug/c/logo.png"), "content")
+ b.AssertFileContent(filepath.FromSlash("/work/public/cpath/2017/pageslug/c/logo.png"), "content")
+ assert.False(b.CheckExists("/work/public/cpath/cpath/2017/pageslug/c/logo.png"))
// Custom media type defined in site config.
assert.Len(leafBundle1.Resources().ByType("bepsays"), 1)
if ugly {
- th.assertFileContent(filepath.FromSlash("/work/public/2017/pageslug.html"),
+ b.AssertFileContent(filepath.FromSlash("/work/public/2017/pageslug.html"),
"TheContent",
relPermalinker("Sunset RelPermalink: %s/2017/pageslug/sunset1.jpg"),
permalinker("Sunset Permalink: %s/2017/pageslug/sunset1.jpg"),
@@ -245,19 +248,19 @@ func TestPageBundlerSiteRegular(t *testing.T) {
)
// https://github.com/gohugoio/hugo/issues/5882
- th.assertFileContent(
+ b.AssertFileContent(
filepath.FromSlash("/work/public/2017/pageslug.html"), "0: Page RelPermalink: |")
- th.assertFileContent(filepath.FromSlash("/work/public/cpath/2017/pageslug.html"), "TheContent")
+ b.AssertFileContent(filepath.FromSlash("/work/public/cpath/2017/pageslug.html"), "TheContent")
// 은행
- th.assertFileContent(filepath.FromSlash("/work/public/c/은행/logo-은행.png"), "은행 PNG")
+ b.AssertFileContent(filepath.FromSlash("/work/public/c/은행/logo-은행.png"), "은행 PNG")
} else {
- th.assertFileContent(filepath.FromSlash("/work/public/2017/pageslug/index.html"), "TheContent")
- th.assertFileContent(filepath.FromSlash("/work/public/cpath/2017/pageslug/cindex.html"), "TheContent")
- th.assertFileContent(filepath.FromSlash("/work/public/2017/pageslug/index.html"), "Single Title")
- th.assertFileContent(filepath.FromSlash("/work/public/root/index.html"), "Single Title")
+ b.AssertFileContent(filepath.FromSlash("/work/public/2017/pageslug/index.html"), "TheContent")
+ b.AssertFileContent(filepath.FromSlash("/work/public/cpath/2017/pageslug/cindex.html"), "TheContent")
+ b.AssertFileContent(filepath.FromSlash("/work/public/2017/pageslug/index.html"), "Single Title")
+ b.AssertFileContent(filepath.FromSlash("/work/public/root/index.html"), "Single Title")
}
@@ -272,25 +275,26 @@ func TestPageBundlerSiteMultilingual(t *testing.T) {
t.Parallel()
for _, ugly := range []bool{false, true} {
+ ugly := ugly
t.Run(fmt.Sprintf("ugly=%t", ugly),
func(t *testing.T) {
-
+ t.Parallel()
assert := require.New(t)
fs, cfg := newTestBundleSourcesMultilingual(t)
cfg.Set("uglyURLs", ugly)
- assert.NoError(loadDefaultSettingsFor(cfg))
- assert.NoError(loadLanguageSettings(cfg, nil))
- sites, err := NewHugoSites(deps.DepsCfg{Fs: fs, Cfg: cfg})
- assert.NoError(err)
- assert.Equal(2, len(sites.Sites))
+ b := newTestSitesBuilderFromDepsCfg(t, deps.DepsCfg{Fs: fs, Cfg: cfg}).WithNothingAdded()
+ b.Build(BuildCfg{SkipRender: true})
- assert.NoError(sites.Build(BuildCfg{}))
+ sites := b.H
+
+ assert.Equal(2, len(sites.Sites))
s := sites.Sites[0]
assert.Equal(8, len(s.RegularPages()))
assert.Equal(16, len(s.Pages()))
+ //dumpPages(s.AllPages()...)
assert.Equal(31, len(s.AllPages()))
bundleWithSubPath := s.getPage(page.KindPage, "lb/index")
@@ -358,15 +362,12 @@ func TestMultilingualDisableLanguage(t *testing.T) {
fs, cfg := newTestBundleSourcesMultilingual(t)
cfg.Set("disableLanguages", []string{"nn"})
- assert.NoError(loadDefaultSettingsFor(cfg))
- assert.NoError(loadLanguageSettings(cfg, nil))
+ b := newTestSitesBuilderFromDepsCfg(t, deps.DepsCfg{Fs: fs, Cfg: cfg}).WithNothingAdded()
+ b.Build(BuildCfg{})
+ sites := b.H
- sites, err := NewHugoSites(deps.DepsCfg{Fs: fs, Cfg: cfg})
- assert.NoError(err)
assert.Equal(1, len(sites.Sites))
- assert.NoError(sites.Build(BuildCfg{}))
-
s := sites.Sites[0]
assert.Equal(8, len(s.RegularPages()))
@@ -383,20 +384,98 @@ func TestMultilingualDisableLanguage(t *testing.T) {
}
func TestPageBundlerSiteWitSymbolicLinksInContent(t *testing.T) {
- if runtime.GOOS == "windows" && os.Getenv("CI") == "" {
- t.Skip("Skip TestPageBundlerSiteWitSymbolicLinksInContent as os.Symlink needs administrator rights on Windows")
- }
+ skipSymlink(t)
+
+ wd, _ := os.Getwd()
+ defer func() {
+ os.Chdir(wd)
+ }()
assert := require.New(t)
- ps, clean, workDir := newTestBundleSymbolicSources(t)
+ // We need to use the OS fs for this.
+ cfg := viper.New()
+ fs := hugofs.NewFrom(hugofs.Os, cfg)
+
+ workDir, clean, err := htesting.CreateTempDir(hugofs.Os, "hugosym")
+ assert.NoError(err)
+
+ contentDirName := "content"
+
+ contentDir := filepath.Join(workDir, contentDirName)
+ assert.NoError(os.MkdirAll(filepath.Join(contentDir, "a"), 0777))
+
+ for i := 1; i <= 3; i++ {
+ assert.NoError(os.MkdirAll(filepath.Join(workDir, fmt.Sprintf("symcontent%d", i)), 0777))
+ }
+
+ assert.NoError(os.MkdirAll(filepath.Join(workDir, "symcontent2", "a1"), 0777))
+
+ // Symlinked sections inside content.
+ os.Chdir(contentDir)
+ for i := 1; i <= 3; i++ {
+ assert.NoError(os.Symlink(filepath.FromSlash(fmt.Sprintf(("../symcontent%d"), i)), fmt.Sprintf("symbolic%d", i)))
+ }
+
+ assert.NoError(os.Chdir(filepath.Join(contentDir, "a")))
+
+ // Create a symlink to one single content file
+ assert.NoError(os.Symlink(filepath.FromSlash("../../symcontent2/a1/page.md"), "page_s.md"))
+
+ assert.NoError(os.Chdir(filepath.FromSlash("../../symcontent3")))
+
+ // Create a circular symlink. Will print some warnings.
+ assert.NoError(os.Symlink(filepath.Join("..", contentDirName), filepath.FromSlash("circus")))
+
+ assert.NoError(os.Chdir(workDir))
+
defer clean()
- cfg := ps.Cfg
- fs := ps.Fs
+ cfg.Set("workingDir", workDir)
+ cfg.Set("contentDir", contentDirName)
+ cfg.Set("baseURL", "https://example.com")
+
+ layout := `{{ .Title }}|{{ .Content }}`
+ pageContent := `---
+slug: %s
+date: 2017-10-09
+---
+
+TheContent.
+`
+
+ b := newTestSitesBuilderFromDepsCfg(t, deps.DepsCfg{
+ Fs: fs,
+ Cfg: cfg,
+ })
- s := buildSingleSite(t, deps.DepsCfg{Fs: fs, Cfg: cfg, Logger: loggers.NewErrorLogger()}, BuildCfg{})
+ b.WithTemplates(
+ "_default/single.html", layout,
+ "_default/list.html", layout,
+ )
- th := testHelper{s.Cfg, s.Fs, t}
+ b.WithContent(
+ "a/regular.md", fmt.Sprintf(pageContent, "a1"),
+ )
+
+ b.WithSourceFile(
+ "symcontent1/s1.md", fmt.Sprintf(pageContent, "s1"),
+ "symcontent1/s2.md", fmt.Sprintf(pageContent, "s2"),
+ // Regular files inside symlinked folder.
+ "symcontent1/s1.md", fmt.Sprintf(pageContent, "s1"),
+ "symcontent1/s2.md", fmt.Sprintf(pageContent, "s2"),
+
+ // A bundle
+ "symcontent2/a1/index.md", fmt.Sprintf(pageContent, ""),
+ "symcontent2/a1/page.md", fmt.Sprintf(pageContent, "page"),
+ "symcontent2/a1/logo.png", "image",
+
+ // Assets
+ "symcontent3/s1.png", "image",
+ "symcontent3/s2.png", "image",
+ )
+
+ b.Build(BuildCfg{})
+ s := b.H.Sites[0]
assert.Equal(7, len(s.RegularPages()))
a1Bundle := s.getPage(page.KindPage, "symbolic2/a1/index.md")
@@ -404,9 +483,9 @@ func TestPageBundlerSiteWitSymbolicLinksInContent(t *testing.T) {
assert.Equal(2, len(a1Bundle.Resources()))
assert.Equal(1, len(a1Bundle.Resources().ByType(pageResourceType)))
- th.assertFileContent(filepath.FromSlash(workDir+"/public/a/page/index.html"), "TheContent")
- th.assertFileContent(filepath.FromSlash(workDir+"/public/symbolic1/s1/index.html"), "TheContent")
- th.assertFileContent(filepath.FromSlash(workDir+"/public/symbolic2/a1/index.html"), "TheContent")
+ b.AssertFileContent(filepath.FromSlash(workDir+"/public/a/page/index.html"), "TheContent")
+ b.AssertFileContent(filepath.FromSlash(workDir+"/public/symbolic1/s1/index.html"), "TheContent")
+ b.AssertFileContent(filepath.FromSlash(workDir+"/public/symbolic2/a1/index.html"), "TheContent")
}
@@ -576,7 +655,7 @@ Single content.
}
func newTestBundleSources(t *testing.T) (*hugofs.Fs, *viper.Viper) {
- cfg, fs := newTestCfg()
+ cfg, fs := newTestCfgBasic()
assert := require.New(t)
workDir := "/work"
@@ -743,7 +822,7 @@ Content for 은행.
}
func newTestBundleSourcesMultilingual(t *testing.T) (*hugofs.Fs, *viper.Viper) {
- cfg, fs := newTestCfg()
+ cfg, fs := newTestCfgBasic()
workDir := "/work"
cfg.Set("workingDir", workDir)
@@ -825,90 +904,6 @@ TheContent.
return fs, cfg
}
-func newTestBundleSymbolicSources(t *testing.T) (*helpers.PathSpec, func(), string) {
- assert := require.New(t)
- // We need to use the OS fs for this.
- cfg := viper.New()
- fs := hugofs.NewFrom(hugofs.Os, cfg)
- fs.Destination = &afero.MemMapFs{}
- loadDefaultSettingsFor(cfg)
-
- workDir, clean, err := createTempDir("hugosym")
- assert.NoError(err)
-
- contentDir := "base"
- cfg.Set("workingDir", workDir)
- cfg.Set("contentDir", contentDir)
- cfg.Set("baseURL", "https://example.com")
-
- if err := loadLanguageSettings(cfg, nil); err != nil {
- t.Fatal(err)
- }
-
- layout := `{{ .Title }}|{{ .Content }}`
- pageContent := `---
-slug: %s
-date: 2017-10-09
----
-
-TheContent.
-`
-
- fs.Source.MkdirAll(filepath.Join(workDir, "layouts", "_default"), 0777)
- fs.Source.MkdirAll(filepath.Join(workDir, contentDir), 0777)
- fs.Source.MkdirAll(filepath.Join(workDir, contentDir, "a"), 0777)
- for i := 1; i <= 3; i++ {
- fs.Source.MkdirAll(filepath.Join(workDir, fmt.Sprintf("symcontent%d", i)), 0777)
-
- }
- fs.Source.MkdirAll(filepath.Join(workDir, "symcontent2", "a1"), 0777)
-
- writeSource(t, fs, filepath.Join(workDir, "layouts", "_default", "single.html"), layout)
- writeSource(t, fs, filepath.Join(workDir, "layouts", "_default", "list.html"), layout)
-
- writeSource(t, fs, filepath.Join(workDir, contentDir, "a", "regular.md"), fmt.Sprintf(pageContent, "a1"))
-
- // Regular files inside symlinked folder.
- writeSource(t, fs, filepath.Join(workDir, "symcontent1", "s1.md"), fmt.Sprintf(pageContent, "s1"))
- writeSource(t, fs, filepath.Join(workDir, "symcontent1", "s2.md"), fmt.Sprintf(pageContent, "s2"))
-
- // A bundle
- writeSource(t, fs, filepath.Join(workDir, "symcontent2", "a1", "index.md"), fmt.Sprintf(pageContent, ""))
- writeSource(t, fs, filepath.Join(workDir, "symcontent2", "a1", "page.md"), fmt.Sprintf(pageContent, "page"))
- writeSource(t, fs, filepath.Join(workDir, "symcontent2", "a1", "logo.png"), "image")
-
- // Assets
- writeSource(t, fs, filepath.Join(workDir, "symcontent3", "s1.png"), "image")
- writeSource(t, fs, filepath.Join(workDir, "symcontent3", "s2.png"), "image")
-
- wd, _ := os.Getwd()
- defer func() {
- os.Chdir(wd)
- }()
- // Symlinked sections inside content.
- os.Chdir(filepath.Join(workDir, contentDir))
- for i := 1; i <= 3; i++ {
- assert.NoError(os.Symlink(filepath.FromSlash(fmt.Sprintf(("../symcontent%d"), i)), fmt.Sprintf("symbolic%d", i)))
- }
-
- os.Chdir(filepath.Join(workDir, contentDir, "a"))
-
- // Create a symlink to one single content file
- assert.NoError(os.Symlink(filepath.FromSlash("../../symcontent2/a1/page.md"), "page_s.md"))
-
- os.Chdir(filepath.FromSlash("../../symcontent3"))
-
- // Create a circular symlink. Will print some warnings.
- assert.NoError(os.Symlink(filepath.Join("..", contentDir), filepath.FromSlash("circus")))
-
- os.Chdir(workDir)
- assert.NoError(err)
-
- ps, _ := helpers.NewPathSpec(fs, cfg)
-
- return ps, clean, workDir
-}
-
// https://github.com/gohugoio/hugo/issues/5858
func TestBundledResourcesWhenMultipleOutputFormats(t *testing.T) {
t.Parallel()
@@ -971,3 +966,112 @@ slug: %s
assert.True(b.CheckExists("public/about/services2/this-is-another-slug/index.html"))
}
+
+func TestBundleMisc(t *testing.T) {
+ config := `
+baseURL = "https://example.com"
+defaultContentLanguage = "en"
+defaultContentLanguageInSubdir = true
+ignoreFiles = ["README\\.md", "content/en/ignore"]
+
+[Languages]
+[Languages.en]
+weight = 99999
+contentDir = "content/en"
+[Languages.nn]
+weight = 20
+contentDir = "content/nn"
+[Languages.sv]
+weight = 30
+contentDir = "content/sv"
+[Languages.nb]
+weight = 40
+contentDir = "content/nb"
+
+`
+
+ const pageContent = `---
+title: %q
+---
+`
+ createPage := func(s string) string {
+ return fmt.Sprintf(pageContent, s)
+ }
+
+ b := newTestSitesBuilder(t).WithConfigFile("toml", config)
+ b.WithLogger(loggers.NewWarningLogger())
+
+ b.WithTemplates("_default/list.html", `{{ range .Site.Pages }}
+{{ .Kind }}|{{ .Path }}|{{ with .CurrentSection }}CurrentSection: {{ .Path }}{{ end }}|{{ .RelPermalink }}{{ end }}
+`)
+
+ b.WithTemplates("_default/single.html", `Single: {{ .Title }}`)
+
+ b.WithContent("en/sect1/sect2/_index.md", createPage("en: Sect 2"))
+ b.WithContent("en/sect1/sect2/page.md", createPage("en: Page"))
+ b.WithContent("en/sect1/sect2/data-branch.json", "mydata")
+ b.WithContent("nn/sect1/sect2/page.md", createPage("nn: Page"))
+ b.WithContent("nn/sect1/sect2/data-branch.json", "my nn data")
+
+ // En only
+ b.WithContent("en/enonly/myen.md", createPage("en: Page"))
+ b.WithContent("en/enonly/myendata.json", "mydata")
+
+ // Leaf
+
+ b.WithContent("nn/b1/index.md", createPage("nn: leaf"))
+ b.WithContent("en/b1/index.md", createPage("en: leaf"))
+ b.WithContent("sv/b1/index.md", createPage("sv: leaf"))
+ b.WithContent("nb/b1/index.md", createPage("nb: leaf"))
+
+ // Should be ignored
+ b.WithContent("en/ignore/page.md", createPage("en: ignore"))
+ b.WithContent("en/README.md", createPage("en: ignore"))
+
+ // Both leaf and branch bundle in same dir
+ b.WithContent("en/b2/index.md", `---
+slug: leaf
+---
+`)
+ b.WithContent("en/b2/_index.md", createPage("en: branch"))
+
+ b.WithContent("en/b1/data1.json", "en: data")
+ b.WithContent("sv/b1/data1.json", "sv: data")
+ b.WithContent("sv/b1/data2.json", "sv: data2")
+ b.WithContent("nb/b1/data2.json", "nb: data2")
+
+ b.Build(BuildCfg{})
+
+ b.AssertFileContent("public/en/index.html",
+ filepath.FromSlash("section|sect1/sect2/_index.md|CurrentSection: sect1/sect2/_index.md"),
+ "myen.md|CurrentSection: enonly")
+
+ b.AssertFileContentFn("public/en/index.html", func(s string) bool {
+ // Check ignored files
+ return !regexp.MustCompile("README|ignore").MatchString(s)
+
+ })
+
+ b.AssertFileContent("public/nn/index.html", filepath.FromSlash("page|sect1/sect2/page.md|CurrentSection: sect1"))
+ b.AssertFileContentFn("public/nn/index.html", func(s string) bool {
+ return !strings.Contains(s, "enonly")
+
+ })
+
+ // Check order of inherited data file
+ b.AssertFileContent("public/nb/b1/data1.json", "en: data") // Default content
+ b.AssertFileContent("public/nn/b1/data2.json", "sv: data") // First match
+
+ b.AssertFileContent("public/en/enonly/myen/index.html", "Single: en: Page")
+ b.AssertFileContent("public/en/enonly/myendata.json", "mydata")
+
+ assert := require.New(t)
+ assert.False(b.CheckExists("public/sv/enonly/myen/index.html"))
+
+ // Both leaf and branch bundle in same dir
+ // We log a warning about it, but we keep both.
+ b.AssertFileContent("public/en/b2/index.html",
+ "/en/b2/leaf/",
+ filepath.FromSlash("section|sect1/sect2/_index.md|CurrentSection: sect1/sect2/_index.md"))
+
+}