1package namereg23import (4 "testing"56 "gno.land/p/nt/uassert/v0"78 susers "gno.land/r/sys/users"9)1011// Canonicalize is now a delegating shim to susers.Canonicalize; verify12// the local export and the upstream produce the same output for the13// rules namereg/v0 cares about.14func TestCanonicalize_DelegatesToSusers(cur realm, t *testing.T) {15 cases := []string{16 "",17 "a",18 "alice",19 "vitalik",20 "vital1k",21 "balloon",22 "already-canonical",23 "xyz123",24 "nym-foolbar000",25 "nym-foolbar001",26 }27 for _, in := range cases {28 uassert.Equal(t, susers.Canonicalize(in), Canonicalize(in),29 "namereg.Canonicalize must match susers.Canonicalize")30 }31}3233func TestReservedSet_BuiltFromBlacklist(cur realm, t *testing.T) {34 // Sanity: every entry from reservedNames AND its `+s` form must be35 // in the canonicalized lookup.36 for _, n := range reservedNames {37 _, gotBare := reservedSet[Canonicalize(n)]38 uassert.True(t, gotBare,39 "reservedSet missing canonical(%q)", n)4041 _, gotPlural := reservedSet[Canonicalize(n+"s")]42 uassert.True(t, gotPlural,43 "reservedSet missing canonical(%q+s)", n)44 }45}4647func TestIsReserved_LiteralAndCanonical(cur realm, t *testing.T) {48 // Literal entry must be reserved.49 uassert.True(t, IsReserved("admin"), "admin should be reserved")5051 // `blogs` covered via `blog`+s rule (blog is in reservedNames).52 uassert.True(t, IsReserved("blogs"), "blogs covered by blog+s")5354 // l-substituted: `blog` canonicalizes to `biog`. Both forms blocked55 // because we canonicalize the candidate before lookup.56 uassert.True(t, IsReserved("biog"), "canonical(blog)=biog also blocked")5758 // 1-substituted under the new susers.Canonicalize rules: `1` → `i`.59 // `b1og` canonicalizes to `biog`, same as `blog`. Confirms the shim60 // picks up the broader rule set.61 uassert.True(t, IsReserved("b1og"), "1→i variant also blocked")6263 // Non-reserved stem should not be flagged.64 uassert.False(t, IsReserved("zulufoxtrot"), "zulufoxtrot is not reserved")6566 // Identity passthrough.67 uassert.True(t, IsReserved("tendermint"))68}69Canonicalize(s string) string
IsPaused() bool
IsReserved(stem string) bool
NewSetPausedExecutor(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}, newPausedValue bool) struct{title string; description string; executor gno.land/r/gov/dao.Executor; filter gno.land/r/gov/dao.Filter}
ProposeDeleteUser(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}, addr string, reason string) struct{title string; description string; executor gno.land/r/gov/dao.Executor; filter gno.land/r/gov/dao.Filter}
ProposeNewName(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}, addr string, newName string) struct{title string; description string; executor gno.land/r/gov/dao.Executor; filter gno.land/r/gov/dao.Filter}
ProposeNewRegisterPrice(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}, newPrice int64) struct{title string; description string; executor gno.land/r/gov/dao.Executor; filter gno.land/r/gov/dao.Filter}
Register(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}, username string)
Render(path string) string
RenderLatestUsersWidget(num int) string
ValidateNymFormat(username string) interface {Error func() 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.