diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2022-04-18 10:37:58 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2022-04-18 19:17:27 +0200 |
commit | 9b352f04a385703084f7bb116e830e63ac262bc2 (patch) | |
tree | 05a01727b2cf87979e2ad9ffe8ba0cfaddd1601f /commands/hugo_test.go | |
parent | e66e2e9ce5f2036174ecb114b96761ad023d95a1 (diff) |
Fix syncing of /static regression
As introduced in Hugo `v0.76.1`.
And add a proper test for it.
Fixes #9794
Closes #9788
Diffstat (limited to 'commands/hugo_test.go')
-rw-r--r-- | commands/hugo_test.go | 126 |
1 files changed, 116 insertions, 10 deletions
diff --git a/commands/hugo_test.go b/commands/hugo_test.go index aca3de2fd..bdad25cfc 100644 --- a/commands/hugo_test.go +++ b/commands/hugo_test.go @@ -14,32 +14,138 @@ package commands import ( + "bytes" + "fmt" + "math/rand" + "path/filepath" + "strings" "testing" qt "github.com/frankban/quicktest" + "github.com/gohugoio/hugo/hugofs" + "github.com/spf13/afero" + "golang.org/x/tools/txtar" ) // Issue #5662 func TestHugoWithContentDirOverride(t *testing.T) { + t.Parallel() c := qt.New(t) - hugoCmd := newCommandsBuilder().addAll().build() - cmd := hugoCmd.getCommand() + files := ` +-- config.toml -- +baseURL = "https://example.org" +title = "Hugo Commands" +-- mycontent/p1.md -- +--- +title: "P1" +--- +-- layouts/_default/single.html -- +Page: {{ .Title }}| - contentDir := "contentOverride" +` + s := newTestHugoCmdBuilder(c, files, []string{"-c", "mycontent"}).Build() + s.AssertFileContent("public/p1/index.html", `Page: P1|`) - cfgStr := ` +} -baseURL = "https://example.org" -title = "Hugo Commands" +// Issue #9794 +func TestHugoStaticFilesMultipleStaticAndManyFolders(t *testing.T) { + t.Parallel() + c := qt.New(t) -contentDir = "thisdoesnotexist" + files := ` +-- config.toml -- +baseURL = "https://example.org" +theme = "mytheme" +-- layouts/index.html -- +Home. ` - dir := createSimpleTestSite(t, testSiteConfig{configTOML: cfgStr, contentDir: contentDir}) + const ( + numDirs = 33 + numFilesMax = 12 + ) + + r := rand.New(rand.NewSource(32)) + + for i := 0; i < numDirs; i++ { + for j := 0; j < r.Intn(numFilesMax); j++ { + if j%3 == 0 { + files += fmt.Sprintf("-- themes/mytheme/static/d%d/f%d.txt --\nHellot%d-%d\n", i, j, i, j) + files += fmt.Sprintf("-- themes/mytheme/static/d%d/ft%d.txt --\nHellot%d-%d\n", i, j, i, j) + } + files += fmt.Sprintf("-- static/d%d/f%d.txt --\nHello%d-%d\n", i, j, i, j) + } + } - cmd.SetArgs([]string{"-s=" + dir, "-c=" + contentDir}) + r = rand.New(rand.NewSource(32)) + + s := newTestHugoCmdBuilder(c, files, []string{"-c", "mycontent"}).Build() + for i := 0; i < numDirs; i++ { + for j := 0; j < r.Intn(numFilesMax); j++ { + if j%3 == 0 { + if j%3 == 0 { + s.AssertFileContent(fmt.Sprintf("public/d%d/ft%d.txt", i, j), fmt.Sprintf("Hellot%d-%d", i, j)) + } + s.AssertFileContent(fmt.Sprintf("public/d%d/f%d.txt", i, j), fmt.Sprintf("Hello%d-%d", i, j)) + } + } + } + +} + +type testHugoCmdBuilder struct { + *qt.C + + fs afero.Fs + dir string + files string + args []string +} + +func newTestHugoCmdBuilder(c *qt.C, files string, args []string) *testHugoCmdBuilder { + s := &testHugoCmdBuilder{C: c, files: files, args: args} + s.dir = s.TempDir() + s.fs = afero.NewBasePathFs(hugofs.Os, s.dir) + + return s +} + +func (s *testHugoCmdBuilder) Build() *testHugoCmdBuilder { + data := txtar.Parse([]byte(s.files)) + + for _, f := range data.Files { + filename := filepath.Clean(f.Name) + data := bytes.TrimSuffix(f.Data, []byte("\n")) + s.Assert(s.fs.MkdirAll(filepath.Dir(filename), 0777), qt.IsNil) + s.Assert(afero.WriteFile(s.fs, filename, data, 0666), qt.IsNil) + } + + hugoCmd := newCommandsBuilder().addAll().build() + cmd := hugoCmd.getCommand() + args := append(s.args, "-s="+s.dir, "--quiet") + cmd.SetArgs(args) _, err := cmd.ExecuteC() - c.Assert(err, qt.IsNil) + s.Assert(err, qt.IsNil) + + return s +} + +func (s *testHugoCmdBuilder) AssertFileContent(filename string, matches ...string) { + s.Helper() + data, err := afero.ReadFile(s.fs, filename) + s.Assert(err, qt.IsNil) + content := strings.TrimSpace(string(data)) + for _, m := range matches { + lines := strings.Split(m, "\n") + for _, match := range lines { + match = strings.TrimSpace(match) + if match == "" || strings.HasPrefix(match, "#") { + continue + } + s.Assert(content, qt.Contains, match, qt.Commentf(m)) + } + } } |