1package definition_test23import (4 "chain"5 "chain/runtime"6 "testing"78 "gno.land/p/nt/testutils/v0"9 "gno.land/p/nt/uassert/v0"10 "gno.land/r/akkadia/beta/admin"11 "gno.land/r/akkadia/beta/definition"12)1314func TestExternalDefinitionsAndAdminRun(cur realm, t *testing.T) {15 caller := testutils.TestAddress("definitionExternal")16 testing.SetOriginCaller(admin.GetAdmin())17 testing.SetRealm(testing.NewUserRealm(admin.GetAdmin()))18 admin.TransferAdmin(cross(cur), caller)19 testing.SetOriginCaller(caller)20 testing.SetRealm(testing.NewUserRealm(caller))21 admin.AcceptAdmin(cross(cur))22 testing.SetOriginSend(chain.Coins{})23 testing.SetRealm(runtime.NewRealm(caller, "gno.land/e/"+caller.String()+"/run"))24 definition.SetDefinitions(cross(cur), "x", "name=before")25 value, found := definition.GetField("x", "name")["value"]26 uassert.True(t, found)27 uassert.Equal(t, "before", value)2829 // A forged code path with the admin address still is not a user call/run.30 testing.SetRealm(runtime.NewRealm(caller, "gno.land/r/example/forged_definition_admin"))31 uassert.AbortsWithMessage(t, cur, "direct user call or run required", func() {32 definition.DeleteAll(cross(cur))33 })34 uassert.AbortsWithMessage(t, cur, "direct user call or run required", func() {35 definition.SetDefinitions(cross(cur), "x", "name=forged")36 })37 value, _ = definition.GetField("x", "name")["value"]38 uassert.Equal(t, "before", value)3940 testing.SetRealm(runtime.NewRealm(caller, "gno.land/e/"+caller.String()+"/run"))41 definition.DeleteAll(cross(cur))42 uassert.Equal(t, len(definition.Get("x")), 0)43 definition.SetDefinitions(cross(cur), "x", "fresh=value")44 _, found = definition.GetField("x", "name")["value"]45 uassert.False(t, found)46 value, found = definition.GetField("x", "fresh")["value"]47 uassert.True(t, found)48 uassert.Equal(t, "value", value)49}50DeleteAll(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string})
Get(key string) []map[string]string
GetField(key string, fieldKey string) map[string]string
GetKeyCount() int
ListKeys(page int, count int) []string
Render(path string) string
SetDefinitions(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, keys string, values string)
Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.
vm/qrender output, sanitized (docs/render-security.md) and displayed in an empty-sandbox iframe — scripts, forms and popups cannot run. Links stay inert in-preview; right-click to open.