"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 (
 }
 
 func doTestShortcodeCrossrefs(t *testing.T, relative bool) {
+       testCommonResetState()
+       viper.Set("baseURL", baseURL)
+
        var refShortcode string
        var expectedBase string
 
 
        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)
        }
 }
 
        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