shithub: hugo

ref: 74b55fc7c87f2887c42ce8626cb461fee5d7b907
dir: /hugolib/site_show_plan_test.go/

View raw version
package hugolib

import (
	"bytes"
	"github.com/spf13/hugo/source"
	"github.com/spf13/hugo/target"
	"testing"
)

var fakeSource = []struct {
	name    string
	content []byte
}{
	{"foo/bar/file.md", []byte(SIMPLE_PAGE)},
}

type inMemorySource struct {
}

func (i inMemorySource) Files() (files []*source.File) {
	files = make([]*source.File, len(fakeSource))
	for i, fake := range fakeSource {
		files[i] = &source.File{
			Name:     fake.name,
			Contents: bytes.NewReader(fake.content),
		}
	}
	return
}

func checkShowPlanExpected(t *testing.T, s *Site, expected string) {
	out := new(bytes.Buffer)
	if err := s.ShowPlan(out); err != nil {
		t.Fatalf("ShowPlan unexpectedly returned an error: %s", err)
	}
	got := out.String()
	if got != expected {
		t.Errorf("ShowPlan expected:\n%q\ngot\n%q", expected, got)
	}
}

func TestDegenerateNoFiles(t *testing.T) {
	checkShowPlanExpected(t, new(Site), "No source files provided.\n")
}

func TestDegenerateNoTarget(t *testing.T) {
	s := &Site{Source: new(inMemorySource)}
	must(s.CreatePages())
	expected := "foo/bar/file.md\n canonical => !no target specified!\n"
	checkShowPlanExpected(t, s, expected)
}

func TestFileTarget(t *testing.T) {
	s := &Site{
		Source: new(inMemorySource),
		Target: new(target.Filesystem),
	}
	must(s.CreatePages())
	checkShowPlanExpected(t, s, "foo/bar/file.md\n canonical => foo/bar/file/index.html\n")
}

func TestFileTargetUgly(t *testing.T) {
	s := &Site{
		Target: &target.Filesystem{UglyUrls: true},
		Source: new(inMemorySource),
	}
	s.CreatePages()
	expected := "foo/bar/file.md\n canonical => foo/bar/file.html\n"
	checkShowPlanExpected(t, s, expected)
}

func TestFileTargetPublishDir(t *testing.T) {
	s := &Site{
		Target: &target.Filesystem{PublishDir: "../public"},
		Source: new(inMemorySource),
	}

	must(s.CreatePages())
	expected := "foo/bar/file.md\n canonical => ../public/foo/bar/file/index.html\n"
	checkShowPlanExpected(t, s, expected)
}