mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-16 20:53:59 +02:00
@@ -118,7 +118,6 @@ See my [About](/about/) page for details.
|
||||
`
|
||||
|
||||
func getBenchmarkSiteNewTestCases() []siteBenchmarkTestcase {
|
||||
|
||||
pageContentWithCategory := func(size int, category string) string {
|
||||
return getBenchmarkTestDataPageContentForMarkdown(size, category, benchmarkMarkdownSnippets)
|
||||
}
|
||||
@@ -132,40 +131,41 @@ baseURL = "https://example.com"
|
||||
`
|
||||
|
||||
benchmarks := []siteBenchmarkTestcase{
|
||||
{"Bundle with image", func(b testing.TB) *sitesBuilder {
|
||||
sb := newTestSitesBuilder(b).WithConfigFile("toml", config)
|
||||
sb.WithContent("content/blog/mybundle/index.md", pageContent(1))
|
||||
sb.WithSunset("content/blog/mybundle/sunset1.jpg")
|
||||
{
|
||||
"Bundle with image", func(b testing.TB) *sitesBuilder {
|
||||
sb := newTestSitesBuilder(b).WithConfigFile("toml", config)
|
||||
sb.WithContent("content/blog/mybundle/index.md", pageContent(1))
|
||||
sb.WithSunset("content/blog/mybundle/sunset1.jpg")
|
||||
|
||||
return sb
|
||||
},
|
||||
return sb
|
||||
},
|
||||
func(s *sitesBuilder) {
|
||||
s.AssertFileContent("public/blog/mybundle/index.html", "/blog/mybundle/sunset1.jpg")
|
||||
s.CheckExists("public/blog/mybundle/sunset1.jpg")
|
||||
|
||||
},
|
||||
},
|
||||
{"Bundle with JSON file", func(b testing.TB) *sitesBuilder {
|
||||
sb := newTestSitesBuilder(b).WithConfigFile("toml", config)
|
||||
sb.WithContent("content/blog/mybundle/index.md", pageContent(1))
|
||||
sb.WithContent("content/blog/mybundle/mydata.json", `{ "hello": "world" }`)
|
||||
{
|
||||
"Bundle with JSON file", func(b testing.TB) *sitesBuilder {
|
||||
sb := newTestSitesBuilder(b).WithConfigFile("toml", config)
|
||||
sb.WithContent("content/blog/mybundle/index.md", pageContent(1))
|
||||
sb.WithContent("content/blog/mybundle/mydata.json", `{ "hello": "world" }`)
|
||||
|
||||
return sb
|
||||
},
|
||||
return sb
|
||||
},
|
||||
func(s *sitesBuilder) {
|
||||
s.AssertFileContent("public/blog/mybundle/index.html", "Resources: application/json: /blog/mybundle/mydata.json")
|
||||
s.CheckExists("public/blog/mybundle/mydata.json")
|
||||
|
||||
},
|
||||
},
|
||||
{"Tags and categories", func(b testing.TB) *sitesBuilder {
|
||||
sb := newTestSitesBuilder(b).WithConfigFile("toml", `
|
||||
{
|
||||
"Tags and categories", func(b testing.TB) *sitesBuilder {
|
||||
sb := newTestSitesBuilder(b).WithConfigFile("toml", `
|
||||
title = "Tags and Cats"
|
||||
baseURL = "https://example.com"
|
||||
|
||||
`)
|
||||
|
||||
const pageTemplate = `
|
||||
const pageTemplate = `
|
||||
---
|
||||
title: "Some tags and cats"
|
||||
categories: ["caGR", "cbGR"]
|
||||
@@ -175,50 +175,51 @@ tags: ["taGR", "tbGR"]
|
||||
Some content.
|
||||
|
||||
`
|
||||
for i := 1; i <= 100; i++ {
|
||||
content := strings.Replace(pageTemplate, "GR", strconv.Itoa(i/3), -1)
|
||||
sb.WithContent(fmt.Sprintf("content/page%d.md", i), content)
|
||||
}
|
||||
for i := 1; i <= 100; i++ {
|
||||
content := strings.Replace(pageTemplate, "GR", strconv.Itoa(i/3), -1)
|
||||
sb.WithContent(fmt.Sprintf("content/page%d.md", i), content)
|
||||
}
|
||||
|
||||
return sb
|
||||
},
|
||||
return sb
|
||||
},
|
||||
func(s *sitesBuilder) {
|
||||
s.AssertFileContent("public/page3/index.html", "/page3/|Permalink: https://example.com/page3/")
|
||||
s.AssertFileContent("public/tags/ta3/index.html", "|ta3|")
|
||||
},
|
||||
},
|
||||
{"Canonify URLs", func(b testing.TB) *sitesBuilder {
|
||||
sb := newTestSitesBuilder(b).WithConfigFile("toml", `
|
||||
{
|
||||
"Canonify URLs", func(b testing.TB) *sitesBuilder {
|
||||
sb := newTestSitesBuilder(b).WithConfigFile("toml", `
|
||||
title = "Canon"
|
||||
baseURL = "https://example.com"
|
||||
canonifyURLs = true
|
||||
|
||||
`)
|
||||
for i := 1; i <= 100; i++ {
|
||||
sb.WithContent(fmt.Sprintf("content/page%d.md", i), pageContent(i))
|
||||
}
|
||||
for i := 1; i <= 100; i++ {
|
||||
sb.WithContent(fmt.Sprintf("content/page%d.md", i), pageContent(i))
|
||||
}
|
||||
|
||||
return sb
|
||||
},
|
||||
return sb
|
||||
},
|
||||
func(s *sitesBuilder) {
|
||||
s.AssertFileContent("public/page8/index.html", "https://example.com/about/")
|
||||
},
|
||||
},
|
||||
|
||||
{"Deep content tree", func(b testing.TB) *sitesBuilder {
|
||||
return getBenchmarkSiteDeepContent(b)
|
||||
},
|
||||
{
|
||||
"Deep content tree", func(b testing.TB) *sitesBuilder {
|
||||
return getBenchmarkSiteDeepContent(b)
|
||||
},
|
||||
func(s *sitesBuilder) {
|
||||
s.CheckExists("public/blog/mybundle/index.html")
|
||||
s.Assert(len(s.H.Sites), qt.Equals, 4)
|
||||
s.Assert(len(s.H.Sites[0].RegularPages()), qt.Equals, len(s.H.Sites[1].RegularPages()))
|
||||
s.Assert(len(s.H.Sites[0].RegularPages()), qt.Equals, 30)
|
||||
|
||||
},
|
||||
},
|
||||
{"Many HTML templates", func(b testing.TB) *sitesBuilder {
|
||||
|
||||
pageTemplateTemplate := `
|
||||
{
|
||||
"Many HTML templates", func(b testing.TB) *sitesBuilder {
|
||||
pageTemplateTemplate := `
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
@@ -243,7 +244,7 @@ canonifyURLs = true
|
||||
</html>
|
||||
`
|
||||
|
||||
sb := newTestSitesBuilder(b).WithConfigFile("toml", `
|
||||
sb := newTestSitesBuilder(b).WithConfigFile("toml", `
|
||||
baseURL = "https://example.com"
|
||||
|
||||
[languages]
|
||||
@@ -262,37 +263,36 @@ contentDir="content/sv"
|
||||
|
||||
`)
|
||||
|
||||
createContent := func(dir, name string) {
|
||||
sb.WithContent(filepath.Join("content", dir, name), pageContent(1))
|
||||
}
|
||||
createContent := func(dir, name string) {
|
||||
sb.WithContent(filepath.Join("content", dir, name), pageContent(1))
|
||||
}
|
||||
|
||||
for _, lang := range []string{"en", "fr", "no", "sv"} {
|
||||
sb.WithTemplatesAdded(fmt.Sprintf("_default/single.%s.html", lang), pageTemplateTemplate)
|
||||
sb.WithTemplatesAdded(fmt.Sprintf("_default/list.%s.html", lang), pageTemplateTemplate)
|
||||
for _, lang := range []string{"en", "fr", "no", "sv"} {
|
||||
sb.WithTemplatesAdded(fmt.Sprintf("_default/single.%s.html", lang), pageTemplateTemplate)
|
||||
sb.WithTemplatesAdded(fmt.Sprintf("_default/list.%s.html", lang), pageTemplateTemplate)
|
||||
|
||||
for level := 1; level <= 5; level++ {
|
||||
sectionDir := path.Join(lang, strings.Repeat("section/", level))
|
||||
createContent(sectionDir, "_index.md")
|
||||
for i := 1; i <= 3; i++ {
|
||||
leafBundleDir := path.Join(sectionDir, fmt.Sprintf("bundle%d", i))
|
||||
createContent(leafBundleDir, "index.md")
|
||||
for level := 1; level <= 5; level++ {
|
||||
sectionDir := path.Join(lang, strings.Repeat("section/", level))
|
||||
createContent(sectionDir, "_index.md")
|
||||
for i := 1; i <= 3; i++ {
|
||||
leafBundleDir := path.Join(sectionDir, fmt.Sprintf("bundle%d", i))
|
||||
createContent(leafBundleDir, "index.md")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sb
|
||||
},
|
||||
return sb
|
||||
},
|
||||
func(s *sitesBuilder) {
|
||||
s.CheckExists("public/blog/mybundle/index.html")
|
||||
s.Assert(len(s.H.Sites), qt.Equals, 4)
|
||||
s.Assert(len(s.H.Sites[0].RegularPages()), qt.Equals, len(s.H.Sites[1].RegularPages()))
|
||||
s.Assert(len(s.H.Sites[0].RegularPages()), qt.Equals, 15)
|
||||
|
||||
},
|
||||
},
|
||||
{"Page collections", func(b testing.TB) *sitesBuilder {
|
||||
|
||||
pageTemplateTemplate := `
|
||||
{
|
||||
"Page collections", func(b testing.TB) *sitesBuilder {
|
||||
pageTemplateTemplate := `
|
||||
{{ if .IsNode }}
|
||||
{{ len .Paginator.Pages }}
|
||||
{{ end }}
|
||||
@@ -308,7 +308,7 @@ contentDir="content/sv"
|
||||
{{ with .Prev }}Prev: {{ .RelPermalink }}{{ end }}
|
||||
`
|
||||
|
||||
sb := newTestSitesBuilder(b).WithConfigFile("toml", `
|
||||
sb := newTestSitesBuilder(b).WithConfigFile("toml", `
|
||||
baseURL = "https://example.com"
|
||||
|
||||
[languages]
|
||||
@@ -327,57 +327,55 @@ contentDir="content/sv"
|
||||
|
||||
`)
|
||||
|
||||
sb.WithTemplates("index.html", pageTemplateTemplate)
|
||||
sb.WithTemplates("_default/single.html", pageTemplateTemplate)
|
||||
sb.WithTemplates("_default/list.html", pageTemplateTemplate)
|
||||
sb.WithTemplates("index.html", pageTemplateTemplate)
|
||||
sb.WithTemplates("_default/single.html", pageTemplateTemplate)
|
||||
sb.WithTemplates("_default/list.html", pageTemplateTemplate)
|
||||
|
||||
r := rand.New(rand.NewSource(99))
|
||||
r := rand.New(rand.NewSource(99))
|
||||
|
||||
createContent := func(dir, name string) {
|
||||
var content string
|
||||
if strings.Contains(name, "_index") {
|
||||
content = pageContent(1)
|
||||
createContent := func(dir, name string) {
|
||||
var content string
|
||||
if strings.Contains(name, "_index") {
|
||||
content = pageContent(1)
|
||||
} else {
|
||||
content = pageContentWithCategory(1, fmt.Sprintf("category%d", r.Intn(5)+1))
|
||||
}
|
||||
|
||||
} else {
|
||||
content = pageContentWithCategory(1, fmt.Sprintf("category%d", r.Intn(5)+1))
|
||||
sb.WithContent(filepath.Join("content", dir, name), content)
|
||||
}
|
||||
|
||||
sb.WithContent(filepath.Join("content", dir, name), content)
|
||||
}
|
||||
|
||||
createBundledFiles := func(dir string) {
|
||||
sb.WithContent(filepath.Join("content", dir, "data.json"), `{ "hello": "world" }`)
|
||||
for i := 1; i <= 3; i++ {
|
||||
sb.WithContent(filepath.Join("content", dir, fmt.Sprintf("page%d.md", i)), pageContent(1))
|
||||
}
|
||||
}
|
||||
|
||||
for _, lang := range []string{"en", "fr", "no", "sv"} {
|
||||
for level := 1; level <= r.Intn(5)+1; level++ {
|
||||
sectionDir := path.Join(lang, strings.Repeat("section/", level))
|
||||
createContent(sectionDir, "_index.md")
|
||||
createBundledFiles(sectionDir)
|
||||
for i := 1; i <= r.Intn(20)+1; i++ {
|
||||
leafBundleDir := path.Join(sectionDir, fmt.Sprintf("bundle%d", i))
|
||||
createContent(leafBundleDir, "index.md")
|
||||
createBundledFiles(path.Join(leafBundleDir, "assets1"))
|
||||
createBundledFiles(path.Join(leafBundleDir, "assets1", "assets2"))
|
||||
createBundledFiles := func(dir string) {
|
||||
sb.WithContent(filepath.Join("content", dir, "data.json"), `{ "hello": "world" }`)
|
||||
for i := 1; i <= 3; i++ {
|
||||
sb.WithContent(filepath.Join("content", dir, fmt.Sprintf("page%d.md", i)), pageContent(1))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sb
|
||||
},
|
||||
for _, lang := range []string{"en", "fr", "no", "sv"} {
|
||||
for level := 1; level <= r.Intn(5)+1; level++ {
|
||||
sectionDir := path.Join(lang, strings.Repeat("section/", level))
|
||||
createContent(sectionDir, "_index.md")
|
||||
createBundledFiles(sectionDir)
|
||||
for i := 1; i <= r.Intn(20)+1; i++ {
|
||||
leafBundleDir := path.Join(sectionDir, fmt.Sprintf("bundle%d", i))
|
||||
createContent(leafBundleDir, "index.md")
|
||||
createBundledFiles(path.Join(leafBundleDir, "assets1"))
|
||||
createBundledFiles(path.Join(leafBundleDir, "assets1", "assets2"))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sb
|
||||
},
|
||||
func(s *sitesBuilder) {
|
||||
s.CheckExists("public/blog/mybundle/index.html")
|
||||
s.Assert(len(s.H.Sites), qt.Equals, 4)
|
||||
s.Assert(len(s.H.Sites[0].RegularPages()), qt.Equals, 26)
|
||||
|
||||
},
|
||||
},
|
||||
{"List terms", func(b testing.TB) *sitesBuilder {
|
||||
|
||||
pageTemplateTemplate := `
|
||||
{
|
||||
"List terms", func(b testing.TB) *sitesBuilder {
|
||||
pageTemplateTemplate := `
|
||||
<ul>
|
||||
{{ range (.GetTerms "categories") }}
|
||||
<li><a href="{{ .Permalink }}">{{ .LinkTitle }}</a></li>
|
||||
@@ -385,46 +383,44 @@ contentDir="content/sv"
|
||||
</ul>
|
||||
`
|
||||
|
||||
sb := newTestSitesBuilder(b).WithConfigFile("toml", `
|
||||
sb := newTestSitesBuilder(b).WithConfigFile("toml", `
|
||||
baseURL = "https://example.com"
|
||||
`)
|
||||
|
||||
sb.WithTemplates("_default/single.html", pageTemplateTemplate)
|
||||
sb.WithTemplates("_default/single.html", pageTemplateTemplate)
|
||||
|
||||
r := rand.New(rand.NewSource(99))
|
||||
r := rand.New(rand.NewSource(99))
|
||||
|
||||
createContent := func(dir, name string) {
|
||||
var content string
|
||||
if strings.Contains(name, "_index") {
|
||||
content = pageContent(1)
|
||||
} else {
|
||||
content = pageContentWithCategory(1, fmt.Sprintf("category%d", r.Intn(5)+1))
|
||||
sb.WithContent(filepath.Join("content", dir, name), content)
|
||||
createContent := func(dir, name string) {
|
||||
var content string
|
||||
if strings.Contains(name, "_index") {
|
||||
content = pageContent(1)
|
||||
} else {
|
||||
content = pageContentWithCategory(1, fmt.Sprintf("category%d", r.Intn(5)+1))
|
||||
sb.WithContent(filepath.Join("content", dir, name), content)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for level := 1; level <= r.Intn(5)+1; level++ {
|
||||
sectionDir := path.Join(strings.Repeat("section/", level))
|
||||
createContent(sectionDir, "_index.md")
|
||||
for i := 1; i <= r.Intn(33); i++ {
|
||||
leafBundleDir := path.Join(sectionDir, fmt.Sprintf("bundle%d", i))
|
||||
createContent(leafBundleDir, "index.md")
|
||||
for level := 1; level <= r.Intn(5)+1; level++ {
|
||||
sectionDir := path.Join(strings.Repeat("section/", level))
|
||||
createContent(sectionDir, "_index.md")
|
||||
for i := 1; i <= r.Intn(33); i++ {
|
||||
leafBundleDir := path.Join(sectionDir, fmt.Sprintf("bundle%d", i))
|
||||
createContent(leafBundleDir, "index.md")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sb
|
||||
},
|
||||
return sb
|
||||
},
|
||||
func(s *sitesBuilder) {
|
||||
s.AssertFileContent("public/section/bundle8/index.html", ` <li><a href="https://example.com/categories/category1/">category1</a></li>`)
|
||||
s.Assert(len(s.H.Sites), qt.Equals, 1)
|
||||
s.Assert(len(s.H.Sites[0].RegularPages()), qt.Equals, 35)
|
||||
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return benchmarks
|
||||
|
||||
}
|
||||
|
||||
// Run the benchmarks below as tests. Mostly useful when adding new benchmark
|
||||
@@ -440,7 +436,6 @@ func TestBenchmarkSiteNew(b *testing.T) {
|
||||
b.Fatal(err)
|
||||
}
|
||||
bm.check(s)
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -465,7 +460,6 @@ Edited!!`, p.Title()))
|
||||
// We could probably optimize that case, but it's not trivial.
|
||||
b.Assert(int(counters.contentRenderCounter), qt.Equals, 4)
|
||||
b.AssertFileContent("public"+p.RelPermalink()+"index.html", "Edited!!")
|
||||
|
||||
}
|
||||
|
||||
func BenchmarkSiteNew(b *testing.B) {
|
||||
|
Reference in New Issue
Block a user