b.AssertRenderCountContent(1)
}
+func TestRebuiEditUnmarshaledYamlFileInLeafBundle(t *testing.T) {
+ files := `
+-- hugo.toml --
+baseURL = "https://example.com"
+disableLiveReload = true
+disableKinds = ["taxonomy", "term", "sitemap", "robotsTXT", "404", "rss"]
+-- content/mybundle/index.md --
+-- content/mybundle/mydata.yml --
+foo: bar
+-- layouts/_default/single.html --
+MyData: {{ .Resources.Get "mydata.yml" | transform.Unmarshal }}|
+`
+ b := TestRunning(t, files)
+
+ b.AssertFileContent("public/mybundle/index.html", "MyData: map[foo:bar]")
+
+ b.EditFileReplaceAll("content/mybundle/mydata.yml", "bar", "bar edited").Build()
+
+ b.AssertFileContent("public/mybundle/index.html", "MyData: map[foo:bar edited]")
+}
+
func TestRebuildEditTextFileInHomeBundle(t *testing.T) {
b := TestRunning(t, rebuildFilesSimple)
b.AssertFileContent("public/index.html", "Home Content.")
GetFunc(ctx context.Context, tmpl Preparer, name string) (reflect.Value, reflect.Value, bool)
GetMethod(ctx context.Context, tmpl Preparer, receiver reflect.Value, name string) (method reflect.Value, firstArg reflect.Value)
GetMapValue(ctx context.Context, tmpl Preparer, receiver, key reflect.Value) (reflect.Value, bool)
+ OnCalled(ctx context.Context, tmpl Preparer, name string, args []reflect.Value, result reflect.Value)
}
// Executer executes a given template.
s.at(node)
s.errorf("error calling %s: %w", name, err)
}
- return unwrap(v)
+ vv := unwrap(v)
+
+ // Added for Hugo
+ if s.helper != nil {
+ s.helper.OnCalled(s.ctx, s.prep, name, argv, vv)
+ }
+
+ return vv
}
func isTrue(val reflect.Value) (truth, ok bool) {
return m, reflect.ValueOf("v2")
}
+func (e *execHelper) OnCalled(ctx context.Context, tmpl Preparer, name string, args []reflect.Value, returnValue reflect.Value) {
+}
+
func TestTemplateExecutor(t *testing.T) {
c := qt.New(t)
return fn, zero
}
+func (t *templateExecHelper) OnCalled(ctx context.Context, tmpl texttemplate.Preparer, name string, args []reflect.Value, result reflect.Value) {
+ if !t.running {
+ return
+ }
+
+ // This switch is mostly for speed.
+ switch name {
+ case "Unmarshal":
+ default:
+ return
+ }
+ idm := tpl.Context.GetDependencyManagerInCurrentScope(ctx)
+ if idm == nil {
+ return
+ }
+
+ for _, arg := range args {
+ identity.WalkIdentitiesShallow(arg.Interface(), func(level int, id identity.Identity) bool {
+ idm.AddIdentity(id)
+ return false
+ })
+ }
+}
+
func (t *templateExecHelper) trackDependencies(ctx context.Context, tmpl texttemplate.Preparer, name string, receiver reflect.Value) context.Context {
if tmpl == nil {
panic("must provide a template")