mirror of
				https://github.com/gohugoio/hugo.git
				synced 2024-05-11 05:54:58 +00:00 
			
		
		
		
	hugolib: Test cleaning #1
This commit is contained in:
		@@ -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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user