diff --git a/hugolib/embedded_shortcodes_test.go b/hugolib/embedded_shortcodes_test.go index cebef0b8b..7dda21d41 100644 --- a/hugolib/embedded_shortcodes_test.go +++ b/hugolib/embedded_shortcodes_test.go @@ -19,11 +19,13 @@ import ( "os" "path/filepath" "regexp" + "strings" "testing" "github.com/spf13/hugo/helpers" "github.com/spf13/hugo/tpl" "github.com/spf13/viper" + "github.com/stretchr/testify/require" ) const ( @@ -37,6 +39,9 @@ func TestShortcodeCrossrefs(t *testing.T) { } func doTestShortcodeCrossrefs(t *testing.T, relative bool) { + testCommonResetState() + viper.Set("baseURL", baseURL) + var refShortcode string var expectedBase string @@ -50,21 +55,20 @@ func doTestShortcodeCrossrefs(t *testing.T, relative bool) { path := filepath.FromSlash("blog/post.md") in := fmt.Sprintf(`{{< %s "%s" >}}`, refShortcode, path) + + writeSource(t, "content/"+path, simplePageWithURL+": "+in) + expected := fmt.Sprintf(`%s/simple/url/`, expectedBase) - templ := tpl.New() - p, _ := pageFromString(simplePageWithURL, path) - p.Node.Site = newSiteInfoDefaultLanguage( - helpers.SanitizeURLKeepTrailingSlash(baseURL), - p) + sites, err := newHugoSitesDefaultLanguage() + require.NoError(t, err) - output, err := HandleShortcodes(in, p, templ) + require.NoError(t, sites.Build(BuildCfg{})) + require.Len(t, sites.Sites[0].Pages, 1) - if err != nil { - t.Fatal("Handle shortcode error", err) - } + output := string(sites.Sites[0].Pages[0].Content) - if output != expected { + if !strings.Contains(output, expected) { t.Errorf("Got\n%q\nExpected\n%q", output, expected) } } diff --git a/hugolib/site.go b/hugolib/site.go index cfbe75f70..8ae3cd16f 100644 --- a/hugolib/site.go +++ b/hugolib/site.go @@ -247,16 +247,7 @@ func (s *SiteInfo) refLink(ref string, page *Page, relative bool) (string, error var link string if refURL.Path != "" { - // We may be in a shortcode and a not finished site, so look it the - // "raw page" collection. - // This works, but it also means AllPages and Pages will be empty for other - // shortcode use, which may be a slap in the face for many. - // TODO(bep) ml move shortcode handling to a "pre-render" handler, which also - // will fix a few other problems. - for _, page := range []*Page(*s.rawAllPages) { - if !page.shouldBuild() { - continue - } + for _, page := range []*Page(*s.AllPages) { refPath := filepath.FromSlash(refURL.Path) if page.Source.Path() == refPath || page.Source.LogicalName() == refPath { target = page