mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
hugolib: Test cleaning #1
This commit is contained in:
parent
af67ad8af1
commit
debd3663dd
6 changed files with 479 additions and 585 deletions
|
@ -19,12 +19,7 @@ import (
|
|||
"strings"
|
||||
"testing"
|
||||
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"github.com/gohugoio/hugo/deps"
|
||||
jww "github.com/spf13/jwalterweatherman"
|
||||
|
||||
"fmt"
|
||||
"runtime"
|
||||
|
@ -327,7 +322,7 @@ func doTestDataDirImpl(t *testing.T, dd dataDir, expected interface{}, configKey
|
|||
}
|
||||
|
||||
var (
|
||||
logger = jww.NewNotepad(jww.LevelWarn, jww.LevelWarn, os.Stdout, ioutil.Discard, t.Name(), log.Ldate|log.Ltime)
|
||||
logger = newErrorLogger()
|
||||
depsCfg = deps.DepsCfg{Fs: fs, Cfg: cfg, Logger: logger}
|
||||
)
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,21 +1,21 @@
|
|||
package hugolib
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/spf13/afero"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestMultihosts(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var multiSiteTOMLConfigTemplate = `
|
||||
assert := require.New(t)
|
||||
|
||||
var configTemplate = `
|
||||
paginate = 1
|
||||
disablePathToLower = true
|
||||
defaultContentLanguage = "{{ .DefaultContentLanguage }}"
|
||||
defaultContentLanguageInSubdir = {{ .DefaultContentLanguageInSubdir }}
|
||||
defaultContentLanguage = "fr"
|
||||
defaultContentLanguageInSubdir = false
|
||||
staticDir = ["s1", "s2"]
|
||||
|
||||
[permalinks]
|
||||
|
@ -48,18 +48,12 @@ languageName = "Nynorsk"
|
|||
|
||||
`
|
||||
|
||||
siteConfig := testSiteConfig{Running: true, Fs: afero.NewMemMapFs(), DefaultContentLanguage: "fr", DefaultContentLanguageInSubdir: false}
|
||||
sites := createMultiTestSites(t, siteConfig, multiSiteTOMLConfigTemplate)
|
||||
fs := sites.Fs
|
||||
th := testHelper{sites.Cfg, fs, t}
|
||||
assert := require.New(t)
|
||||
cfg := BuildCfg{}
|
||||
err := sites.Build(cfg)
|
||||
assert.NoError(err)
|
||||
b := newMultiSiteTestDefaultBuilder(t).WithConfig("toml", configTemplate)
|
||||
b.CreateSites().Build(BuildCfg{})
|
||||
|
||||
th.assertFileContent("public/en/sect/doc1-slug/index.html", "Hello")
|
||||
b.AssertFileContent("public/en/sect/doc1-slug/index.html", "Hello")
|
||||
|
||||
s1 := sites.Sites[0]
|
||||
s1 := b.H.Sites[0]
|
||||
|
||||
assert.Equal([]string{"s1", "s2", "ens1", "ens2"}, s1.StaticDirs())
|
||||
|
||||
|
@ -78,26 +72,26 @@ languageName = "Nynorsk"
|
|||
assert.NotNil(pageWithURLInFrontMatter)
|
||||
assert.Equal("/superbob", pageWithURLInFrontMatter.URL())
|
||||
assert.Equal("/docs/superbob/", pageWithURLInFrontMatter.RelPermalink())
|
||||
th.assertFileContent("public/en/superbob/index.html", "doc3|Hello|en")
|
||||
b.AssertFileContent("public/en/superbob/index.html", "doc3|Hello|en")
|
||||
|
||||
// check alias:
|
||||
th.assertFileContent("public/en/al/alias1/index.html", `content="0; url=https://example.com/docs/superbob/"`)
|
||||
th.assertFileContent("public/en/al/alias2/index.html", `content="0; url=https://example.com/docs/superbob/"`)
|
||||
b.AssertFileContent("public/en/al/alias1/index.html", `content="0; url=https://example.com/docs/superbob/"`)
|
||||
b.AssertFileContent("public/en/al/alias2/index.html", `content="0; url=https://example.com/docs/superbob/"`)
|
||||
|
||||
s2 := sites.Sites[1]
|
||||
s2 := b.H.Sites[1]
|
||||
assert.Equal([]string{"s1", "s2", "frs1", "frs2"}, s2.StaticDirs())
|
||||
|
||||
s2h := s2.getPage(KindHome)
|
||||
assert.Equal("https://example.fr/", s2h.Permalink())
|
||||
|
||||
th.assertFileContentStraight("public/fr/index.html", "French Home Page")
|
||||
th.assertFileContentStraight("public/en/index.html", "Default Home Page")
|
||||
b.AssertFileContent("public/fr/index.html", "French Home Page")
|
||||
b.AssertFileContent("public/en/index.html", "Default Home Page")
|
||||
|
||||
// Check paginators
|
||||
th.assertFileContent("public/en/page/1/index.html", `refresh" content="0; url=https://example.com/docs/"`)
|
||||
th.assertFileContent("public/nn/page/1/index.html", `refresh" content="0; url=https://example.no/"`)
|
||||
th.assertFileContent("public/en/sect/page/2/index.html", "List Page 2", "Hello", "https://example.com/docs/sect/", "\"/docs/sect/page/3/")
|
||||
th.assertFileContent("public/fr/sect/page/2/index.html", "List Page 2", "Bonjour", "https://example.fr/sect/")
|
||||
b.AssertFileContent("public/en/page/1/index.html", `refresh" content="0; url=https://example.com/docs/"`)
|
||||
b.AssertFileContent("public/nn/page/1/index.html", `refresh" content="0; url=https://example.no/"`)
|
||||
b.AssertFileContent("public/en/sect/page/2/index.html", "List Page 2", "Hello", "https://example.com/docs/sect/", "\"/docs/sect/page/3/")
|
||||
b.AssertFileContent("public/fr/sect/page/2/index.html", "List Page 2", "Bonjour", "https://example.fr/sect/")
|
||||
|
||||
// Check bundles
|
||||
|
||||
|
@ -108,7 +102,7 @@ languageName = "Nynorsk"
|
|||
logoEn := bundleEn.Resources.GetByPrefix("logo")
|
||||
require.NotNil(t, logoEn)
|
||||
require.Equal(t, "/docs/bundles/b1/logo.png", logoEn.RelPermalink())
|
||||
require.Contains(t, readFileFromFs(t, fs.Destination, filepath.FromSlash("public/en/bundles/b1/logo.png")), "PNG Data")
|
||||
b.AssertFileContent("public/en/bundles/b1/logo.png", "PNG Data")
|
||||
|
||||
bundleFr := s2.getPage(KindPage, "bundles/b1/index.md")
|
||||
require.NotNil(t, bundleFr)
|
||||
|
@ -117,6 +111,6 @@ languageName = "Nynorsk"
|
|||
logoFr := bundleFr.Resources.GetByPrefix("logo")
|
||||
require.NotNil(t, logoFr)
|
||||
require.Equal(t, "/bundles/b1/logo.png", logoFr.RelPermalink())
|
||||
require.Contains(t, readFileFromFs(t, fs.Destination, filepath.FromSlash("public/fr/bundles/b1/logo.png")), "PNG Data")
|
||||
b.AssertFileContent("public/fr/bundles/b1/logo.png", "PNG Data")
|
||||
|
||||
}
|
||||
|
|
|
@ -88,7 +88,7 @@ func TestPageBundlerCaptureSymlinks(t *testing.T) {
|
|||
sourceSpec := source.NewSourceSpec(cfg, fs)
|
||||
|
||||
fileStore := &storeFilenames{}
|
||||
logger := newWarningLogger()
|
||||
logger := newErrorLogger()
|
||||
c := newCapturer(logger, sourceSpec, fileStore, nil, filepath.Join(workDir, contentDir))
|
||||
|
||||
assert.NoError(c.capture())
|
||||
|
|
|
@ -301,7 +301,7 @@ func TestPageBundlerSiteWitSymbolicLinksInContent(t *testing.T) {
|
|||
assert := require.New(t)
|
||||
cfg, fs, workDir := newTestBundleSymbolicSources(t)
|
||||
|
||||
s := buildSingleSite(t, deps.DepsCfg{Fs: fs, Cfg: cfg, Logger: newWarningLogger()}, BuildCfg{})
|
||||
s := buildSingleSite(t, deps.DepsCfg{Fs: fs, Cfg: cfg, Logger: newErrorLogger()}, BuildCfg{})
|
||||
|
||||
th := testHelper{s.Cfg, s.Fs, t}
|
||||
|
||||
|
|
|
@ -4,9 +4,11 @@ import (
|
|||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"bytes"
|
||||
"fmt"
|
||||
"regexp"
|
||||
"strings"
|
||||
"text/template"
|
||||
|
||||
jww "github.com/spf13/jwalterweatherman"
|
||||
|
||||
|
@ -24,6 +26,7 @@ import (
|
|||
"log"
|
||||
|
||||
"github.com/gohugoio/hugo/hugofs"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
|
@ -34,8 +37,14 @@ type sitesBuilder struct {
|
|||
Fs *hugofs.Fs
|
||||
T testing.TB
|
||||
|
||||
// Aka the Hugo server mode.
|
||||
running bool
|
||||
|
||||
H *HugoSites
|
||||
|
||||
// Default toml
|
||||
configFormat string
|
||||
|
||||
// We will add some default if not set.
|
||||
templatesAdded bool
|
||||
i18nAdded bool
|
||||
|
@ -47,11 +56,31 @@ func newTestSitesBuilder(t testing.TB) *sitesBuilder {
|
|||
v := viper.New()
|
||||
fs := hugofs.NewMem(v)
|
||||
|
||||
return &sitesBuilder{T: t, Fs: fs}
|
||||
return &sitesBuilder{T: t, Fs: fs, configFormat: "toml"}
|
||||
}
|
||||
|
||||
func (s *sitesBuilder) WithTOMLConfig(conf string) *sitesBuilder {
|
||||
writeSource(s.T, s.Fs, "config.toml", conf)
|
||||
func (s *sitesBuilder) Running() *sitesBuilder {
|
||||
s.running = true
|
||||
return s
|
||||
}
|
||||
|
||||
func (s *sitesBuilder) WithConfigTemplate(data interface{}, format, configTemplate string) *sitesBuilder {
|
||||
if format == "" {
|
||||
format = "toml"
|
||||
}
|
||||
|
||||
templ, err := template.New("test").Parse(configTemplate)
|
||||
if err != nil {
|
||||
s.T.Fatal("Template parse failed:", err)
|
||||
}
|
||||
var b bytes.Buffer
|
||||
templ.Execute(&b, data)
|
||||
return s.WithConfig(format, b.String())
|
||||
}
|
||||
|
||||
func (s *sitesBuilder) WithConfig(format, conf string) *sitesBuilder {
|
||||
writeSource(s.T, s.Fs, "config."+format, conf)
|
||||
s.configFormat = format
|
||||
return s
|
||||
}
|
||||
|
||||
|
@ -113,12 +142,19 @@ paginatePath = "side"
|
|||
lag = "lag"
|
||||
`
|
||||
|
||||
return s.WithTOMLConfig(defaultMultiSiteConfig)
|
||||
return s.WithConfig("toml", defaultMultiSiteConfig)
|
||||
|
||||
}
|
||||
|
||||
func (s *sitesBuilder) WithContent(filenameContent ...string) *sitesBuilder {
|
||||
s.contentAdded = true
|
||||
return s.WithContentAdded(filenameContent...)
|
||||
}
|
||||
|
||||
func (s *sitesBuilder) WithContentAdded(filenameContent ...string) *sitesBuilder {
|
||||
if len(filenameContent)%2 != 0 {
|
||||
s.Fatalf("expect filenameContent in pairs")
|
||||
}
|
||||
for i := 0; i < len(filenameContent); i += 2 {
|
||||
filename, content := filenameContent[i], filenameContent[i+1]
|
||||
writeSource(s.T, s.Fs, filepath.Join("content", filename), content)
|
||||
|
@ -127,7 +163,14 @@ func (s *sitesBuilder) WithContent(filenameContent ...string) *sitesBuilder {
|
|||
}
|
||||
|
||||
func (s *sitesBuilder) WithTemplates(filenameContent ...string) *sitesBuilder {
|
||||
if len(filenameContent)%2 != 0 {
|
||||
s.Fatalf("expect filenameContent in pairs")
|
||||
}
|
||||
s.templatesAdded = true
|
||||
return s.WithTemplatesAdded(filenameContent...)
|
||||
}
|
||||
|
||||
func (s *sitesBuilder) WithTemplatesAdded(filenameContent ...string) *sitesBuilder {
|
||||
for i := 0; i < len(filenameContent); i += 2 {
|
||||
filename, content := filenameContent[i], filenameContent[i+1]
|
||||
writeSource(s.T, s.Fs, filepath.Join("layouts", filename), content)
|
||||
|
@ -150,14 +193,14 @@ func (s *sitesBuilder) CreateSites() *sitesBuilder {
|
|||
}
|
||||
|
||||
if s.Cfg == nil {
|
||||
cfg, err := LoadConfig(s.Fs.Source, "", "config.toml")
|
||||
cfg, err := LoadConfig(s.Fs.Source, "", "config."+s.configFormat)
|
||||
if err != nil {
|
||||
s.T.Fatalf("Failed to load config: %s", err)
|
||||
}
|
||||
s.Cfg = cfg
|
||||
}
|
||||
|
||||
sites, err := NewHugoSites(deps.DepsCfg{Fs: s.Fs, Cfg: s.Cfg})
|
||||
sites, err := NewHugoSites(deps.DepsCfg{Fs: s.Fs, Cfg: s.Cfg, Running: s.running})
|
||||
if err != nil {
|
||||
s.T.Fatalf("Failed to create sites: %s", err)
|
||||
}
|
||||
|
@ -243,11 +286,22 @@ date: "2018-02-28"
|
|||
writeSource(t, fs, filepath.FromSlash("content/sect/doc1.nn.md"), contentTemplate)
|
||||
}
|
||||
|
||||
func (s *sitesBuilder) Fatalf(format string, args ...interface{}) {
|
||||
Fatalf(s.T, format, args...)
|
||||
}
|
||||
|
||||
func Fatalf(t testing.TB, format string, args ...interface{}) {
|
||||
trace := strings.Join(assert.CallerInfo(), "\n\r\t\t\t")
|
||||
format = format + "\n%s"
|
||||
args = append(args, trace)
|
||||
t.Fatalf(format, args...)
|
||||
}
|
||||
|
||||
func (s *sitesBuilder) AssertFileContent(filename string, matches ...string) {
|
||||
content := readDestination(s.T, s.Fs, filename)
|
||||
for _, match := range matches {
|
||||
if !strings.Contains(content, match) {
|
||||
s.T.Fatalf("No match for %q in content for %s\n%q", match, filename, content)
|
||||
s.Fatalf("No match for %q in content for %s\n%q", match, filename, content)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -257,7 +311,7 @@ func (s *sitesBuilder) AssertFileContentRe(filename string, matches ...string) {
|
|||
for _, match := range matches {
|
||||
r := regexp.MustCompile(match)
|
||||
if !r.MatchString(content) {
|
||||
s.T.Fatalf("No match for %q in content for %s\n%q", match, filename, content)
|
||||
s.Fatalf("No match for %q in content for %s\n%q", match, filename, content)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -277,14 +331,6 @@ func (th testHelper) assertFileContent(filename string, matches ...string) {
|
|||
}
|
||||
}
|
||||
|
||||
// TODO(bep) better name for this. It does no magic replacements depending on defaultontentLanguageInSubDir.
|
||||
func (th testHelper) assertFileContentStraight(filename string, matches ...string) {
|
||||
content := readDestination(th.T, th.Fs, filename)
|
||||
for _, match := range matches {
|
||||
require.True(th.T, strings.Contains(content, match), fmt.Sprintf("File no match for\n%q in\n%q:\n%s", strings.Replace(match, "%", "%%", -1), filename, strings.Replace(content, "%", "%%", -1)))
|
||||
}
|
||||
}
|
||||
|
||||
func (th testHelper) assertFileContentRegexp(filename string, matches ...string) {
|
||||
filename = th.replaceDefaultContentLanguageValue(filename)
|
||||
content := readDestination(th.T, th.Fs, filename)
|
||||
|
@ -359,14 +405,14 @@ func newTestSite(t testing.TB, configKeyValues ...interface{}) *Site {
|
|||
s, err := NewSiteForCfg(d)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create Site: %s", err)
|
||||
Fatalf(t, "Failed to create Site: %s", err)
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
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")
|
||||
Fatalf(t, "Layouts must be provided in pairs")
|
||||
}
|
||||
|
||||
writeToFs(t, afs, "config.toml", tomlConfig)
|
||||
|
|
Loading…
Reference in a new issue