diff options
author | Sven Dowideit <SvenDowideit@home.org.au> | 2015-09-09 10:03:38 +1000 |
---|---|---|
committer | Steve Francia <steve.francia@gmail.com> | 2016-01-01 15:23:11 -0500 |
commit | 0f6b334b6715253b030c4e783b88e911b6e53e56 (patch) | |
tree | f1b4bdfdc25f28531d84819a21407e1695096964 /hugolib/site_test.go | |
parent | b78f13b0414fd5006237c0e7cdaa0f8cc8034bff (diff) |
Source file based relative linking
ala GitHub repository markdown for both md files and non-md files
Signed-off-by: Sven Dowideit <SvenDowideit@home.org.au>
Diffstat (limited to 'hugolib/site_test.go')
-rw-r--r-- | hugolib/site_test.go | 215 |
1 files changed, 206 insertions, 9 deletions
diff --git a/hugolib/site_test.go b/hugolib/site_test.go index d99fadf52..15cdc02d8 100644 --- a/hugolib/site_test.go +++ b/hugolib/site_test.go @@ -14,7 +14,6 @@ package hugolib import ( - "bitbucket.org/pkg/inflect" "bytes" "fmt" "html/template" @@ -23,6 +22,8 @@ import ( "strings" "testing" + "bitbucket.org/pkg/inflect" + "github.com/spf13/afero" "github.com/spf13/hugo/helpers" "github.com/spf13/hugo/hugofs" @@ -1026,26 +1027,30 @@ func findPage(site *Site, f string) *Page { return nil } -func TestRefLinking(t *testing.T) { - viper.Reset() - defer viper.Reset() - +func setupLinkingMockSite(t *testing.T) *Site { hugofs.DestinationFS = new(afero.MemMapFs) sources := []source.ByteSource{ {filepath.FromSlash("index.md"), []byte("")}, {filepath.FromSlash("rootfile.md"), []byte("")}, + {filepath.FromSlash("root-image.png"), []byte("")}, {filepath.FromSlash("level2/2-root.md"), []byte("")}, {filepath.FromSlash("level2/index.md"), []byte("")}, {filepath.FromSlash("level2/common.md"), []byte("")}, - {filepath.FromSlash("level2b/2b-root.md"), []byte("")}, - {filepath.FromSlash("level2b/index.md"), []byte("")}, - {filepath.FromSlash("level2b/common.md"), []byte("")}, + +// {filepath.FromSlash("level2b/2b-root.md"), []byte("")}, +// {filepath.FromSlash("level2b/index.md"), []byte("")}, +// {filepath.FromSlash("level2b/common.md"), []byte("")}, + + {filepath.FromSlash("level2/2-image.png"), []byte("")}, + {filepath.FromSlash("level2/common.png"), []byte("")}, {filepath.FromSlash("level2/level3/3-root.md"), []byte("")}, {filepath.FromSlash("level2/level3/index.md"), []byte("")}, {filepath.FromSlash("level2/level3/common.md"), []byte("")}, + {filepath.FromSlash("level2/level3/3-image.png"), []byte("")}, + {filepath.FromSlash("level2/level3/common.png"), []byte("")}, } site := &Site{ @@ -1064,7 +1069,13 @@ func TestRefLinking(t *testing.T) { viper.Set("PluralizeListTitles", false) viper.Set("CanonifyURLs", false) - // END init mock site + return site +} + +func TestRefLinking(t *testing.T) { + viper.Reset() + defer viper.Reset() + site := setupLinkingMockSite(t) currentPage := findPage(site, "level2/level3/index.md") if currentPage == nil { @@ -1084,3 +1095,189 @@ func TestRefLinking(t *testing.T) { } // TODO: and then the failure cases. } + +func TestSourceRelativeLinksing(t *testing.T) { + viper.Reset() + defer viper.Reset() + site := setupLinkingMockSite(t) + + type resultMap map[string]string + + okresults := map[string]resultMap{ + "index.md": map[string]string{ + "/docs/rootfile.md": "/rootfile/", + "/docs/index.md": "/", + "rootfile.md": "/rootfile/", + "index.md": "/", + "level2/2-root.md": "/level2/2-root/", + "level2/index.md": "/level2/", + "/docs/level2/2-root.md": "/level2/2-root/", + "/docs/level2/index.md": "/level2/", + "level2/level3/3-root.md": "/level2/level3/3-root/", + "level2/level3/index.md": "/level2/level3/", + "/docs/level2/level3/3-root.md": "/level2/level3/3-root/", + "/docs/level2/level3/index.md": "/level2/level3/", + "/docs/level2/2-root/": "/level2/2-root/", + "/docs/level2/": "/level2/", + "/docs/level2/2-root": "/level2/2-root/", + "/docs/level2": "/level2/", + "/level2/2-root/": "/level2/2-root/", + "/level2/": "/level2/", + "/level2/2-root": "/level2/2-root/", + "/level2": "/level2/", + }, "rootfile.md": map[string]string{ + "/docs/rootfile.md": "/rootfile/", + "/docs/index.md": "/", + "rootfile.md": "/rootfile/", + "index.md": "/", + "level2/2-root.md": "/level2/2-root/", + "level2/index.md": "/level2/", + "/docs/level2/2-root.md": "/level2/2-root/", + "/docs/level2/index.md": "/level2/", + "level2/level3/3-root.md": "/level2/level3/3-root/", + "level2/level3/index.md": "/level2/level3/", + "/docs/level2/level3/3-root.md": "/level2/level3/3-root/", + "/docs/level2/level3/index.md": "/level2/level3/", + }, "level2/2-root.md": map[string]string{ + "../rootfile.md": "/rootfile/", + "../index.md": "/", + "/docs/rootfile.md": "/rootfile/", + "/docs/index.md": "/", + "2-root.md": "/level2/2-root/", + "index.md": "/level2/", + "../level2/2-root.md": "/level2/2-root/", + "../level2/index.md": "/level2/", + "./2-root.md": "/level2/2-root/", + "./index.md": "/level2/", + "/docs/level2/index.md": "/level2/", + "/docs/level2/2-root.md": "/level2/2-root/", + "level3/3-root.md": "/level2/level3/3-root/", + "level3/index.md": "/level2/level3/", + "../level2/level3/index.md": "/level2/level3/", + "../level2/level3/3-root.md": "/level2/level3/3-root/", + "/docs/level2/level3/index.md": "/level2/level3/", + "/docs/level2/level3/3-root.md": "/level2/level3/3-root/", + }, "level2/index.md": map[string]string{ + "../rootfile.md": "/rootfile/", + "../index.md": "/", + "/docs/rootfile.md": "/rootfile/", + "/docs/index.md": "/", + "2-root.md": "/level2/2-root/", + "index.md": "/level2/", + "../level2/2-root.md": "/level2/2-root/", + "../level2/index.md": "/level2/", + "./2-root.md": "/level2/2-root/", + "./index.md": "/level2/", + "/docs/level2/index.md": "/level2/", + "/docs/level2/2-root.md": "/level2/2-root/", + "level3/3-root.md": "/level2/level3/3-root/", + "level3/index.md": "/level2/level3/", + "../level2/level3/index.md": "/level2/level3/", + "../level2/level3/3-root.md": "/level2/level3/3-root/", + "/docs/level2/level3/index.md": "/level2/level3/", + "/docs/level2/level3/3-root.md": "/level2/level3/3-root/", + }, "level2/level3/3-root.md": map[string]string{ + "../../rootfile.md": "/rootfile/", + "../../index.md": "/", + "/docs/rootfile.md": "/rootfile/", + "/docs/index.md": "/", + "../2-root.md": "/level2/2-root/", + "../index.md": "/level2/", + "/docs/level2/2-root.md": "/level2/2-root/", + "/docs/level2/index.md": "/level2/", + "3-root.md": "/level2/level3/3-root/", + "index.md": "/level2/level3/", + "./3-root.md": "/level2/level3/3-root/", + "./index.md": "/level2/level3/", + // "../level2/level3/3-root.md": "/level2/level3/3-root/", + // "../level2/level3/index.md": "/level2/level3/", + "/docs/level2/level3/3-root.md": "/level2/level3/3-root/", + "/docs/level2/level3/index.md": "/level2/level3/", + }, "level2/level3/index.md": map[string]string{ + "../../rootfile.md": "/rootfile/", + "../../index.md": "/", + "/docs/rootfile.md": "/rootfile/", + "/docs/index.md": "/", + "../2-root.md": "/level2/2-root/", + "../index.md": "/level2/", + "/docs/level2/2-root.md": "/level2/2-root/", + "/docs/level2/index.md": "/level2/", + "3-root.md": "/level2/level3/3-root/", + "index.md": "/level2/level3/", + "./3-root.md": "/level2/level3/3-root/", + "./index.md": "/level2/level3/", + // "../level2/level3/3-root.md": "/level2/level3/3-root/", + // "../level2/level3/index.md": "/level2/level3/", + "/docs/level2/level3/3-root.md": "/level2/level3/3-root/", + "/docs/level2/level3/index.md": "/level2/level3/", + }, + } + + for currentFile, results := range okresults { + currentPage := findPage(site, currentFile) + if currentPage == nil { + t.Fatalf("failed to find current page in site") + } + for link, url := range results { + if out, err := site.Info.githubLink(link, currentPage, true); err != nil || out != url { + t.Errorf("Expected %s to resolve to (%s), got (%s) - error: %s", link, url, out, err) + } else { + //t.Logf("tested ok %s maps to %s", link, out) + } + } + } + // TODO: and then the failure cases. + // "https://docker.com": "", + // site_test.go:1094: Expected https://docker.com to resolve to (), got () - error: Not a plain filepath link (https://docker.com) + +} + +func TestGitHubFileLinking(t *testing.T) { + viper.Reset() + defer viper.Reset() + site := setupLinkingMockSite(t) + + type resultMap map[string]string + + okresults := map[string]resultMap{ + "index.md": map[string]string{ + "/root-image.png": "/root-image.png", + "root-image.png": "/root-image.png", + }, "rootfile.md": map[string]string{ + "/root-image.png": "/root-image.png", + }, "level2/2-root.md": map[string]string{ + "/root-image.png": "/root-image.png", + "common.png": "/level2/common.png", + }, "level2/index.md": map[string]string{ + "/root-image.png": "/root-image.png", + "common.png": "/level2/common.png", + "./common.png": "/level2/common.png", + }, "level2/level3/3-root.md": map[string]string{ + "/root-image.png": "/root-image.png", + "common.png": "/level2/level3/common.png", + "../common.png": "/level2/common.png", + }, "level2/level3/index.md": map[string]string{ + "/root-image.png": "/root-image.png", + "common.png": "/level2/level3/common.png", + "../common.png": "/level2/common.png", + }, + } + + for currentFile, results := range okresults { + currentPage := findPage(site, currentFile) + if currentPage == nil { + t.Fatalf("failed to find current page in site") + } + for link, url := range results { + if out, err := site.Info.githubFileLink(link, currentPage, false); err != nil || out != url { + t.Errorf("Expected %s to resolve to (%s), got (%s) - error: %s", link, url, out, err) + } else { + //t.Logf("tested ok %s maps to %s", link, out) + } + } + } + // TODO: and then the failure cases. + // "https://docker.com": "", + // site_test.go:1094: Expected https://docker.com to resolve to (), got () - error: Not a plain filepath link (https://docker.com) + +} |