1package ownable23import (4 "testing"56 "gno.land/p/nt/testutils/v0"7 "gno.land/p/nt/uassert/v0"8 "gno.land/p/nt/urequire/v0"9)1011var (12 alice = testutils.TestAddress("alice")13 bob = testutils.TestAddress("bob")14)1516func TestNewWithAddress(cur realm, t *testing.T) {17 o := NewWithAddress(alice)1819 got := o.Owner()20 uassert.Equal(t, got, alice)21}2223func TestTransferOwnership(cur realm, t *testing.T) {24 testing.SetRealm(testing.NewUserRealm(alice))25 o := NewWithAddress(alice)26 func(cur realm) {27 err := o.TransferOwnership(0, cur, bob)28 urequire.NoError(t, err)29 }(cross(cur))3031 got := o.Owner()32 uassert.Equal(t, got, bob)33}3435func TestTransferOwnershipUnauthorized(cur realm, t *testing.T) {36 o := NewWithAddress(alice)3738 testing.SetRealm(testing.NewUserRealm(bob))39 func(cur realm) {40 uassert.ErrorContains(t, o.TransferOwnership(0, cur, bob), ErrUnauthorized.Error())41 }(cross(cur))42}4344func TestDropOwnership(cur realm, t *testing.T) {45 testing.SetRealm(testing.NewUserRealm(alice))46 o := NewWithAddress(alice)47 func(cur realm) {48 err := o.DropOwnership(0, cur)49 urequire.NoError(t, err, "DropOwnership failed")50 }(cross(cur))5152 owner := o.Owner()53 uassert.Empty(t, owner, "owner should be empty")54}5556func TestDropOwnershipUnauthorized(cur realm, t *testing.T) {57 o := NewWithAddress(alice)5859 testing.SetRealm(testing.NewUserRealm(bob))60 func(cur realm) {61 uassert.ErrorContains(t, o.DropOwnership(0, cur), ErrUnauthorized.Error())62 }(cross(cur))63}6465func TestOwnedBy(cur realm, t *testing.T) {66 o := NewWithAddress(alice)67 uassert.True(t, o.OwnedBy(alice))68 uassert.False(t, o.OwnedBy(bob))69}7071func TestAssertOwnedBy(cur realm, t *testing.T) {72 o := NewWithAddress(alice)7374 // Should not panic.75 o.AssertOwnedBy(alice)7677 uassert.PanicsWithMessage(t, cur, ErrUnauthorized.Error(), func() {78 o.AssertOwnedBy(bob)79 })80}8182func TestErrInvalidAddress(cur realm, t *testing.T) {83 testing.SetRealm(testing.NewUserRealm(alice))84 o := NewWithAddress(alice)85 func(cur realm) {86 err := o.TransferOwnership(0, cur, "")87 uassert.ErrorContains(t, err, ErrInvalidAddress.Error())8889 err = o.TransferOwnership(0, cur, "10000000001000000000100000000010000000001000000000")90 uassert.ErrorContains(t, err, ErrInvalidAddress.Error())91 }(cross(cur))92}9394func TestNilReceiver(cur realm, t *testing.T) {95 var o *Ownable9697 owner := o.Owner()98 if owner != address("") {99 t.Errorf("expected empty address but got %v", owner)100 }101102 isOwner := o.OwnedBy(alice)103 uassert.False(t, isOwner)104105 defer func() {106 r := recover()107 if r == nil {108 t.Error("expected panic but got none")109 }110 if r != ErrUnauthorized {111 t.Errorf("expected ErrUnauthorized but got %v", r)112 }113 }()114 o.AssertOwnedBy(alice)115}116Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.