tests.gno

2.29 Kb ยท 155 lines
  1package tests
  2
  3import (
  4	"std"
  5
  6	"gno.land/p/demo/nestedpkg"
  7	rsubtests "gno.land/r/demo/tests/subtests"
  8)
  9
 10var counter int
 11
 12func IncCounter() {
 13	crossing()
 14
 15	counter++
 16}
 17
 18func Counter() int {
 19	crossing()
 20
 21	return counter
 22}
 23
 24func CurrentRealmPath() string {
 25	crossing()
 26
 27	return std.CurrentRealm().PkgPath()
 28}
 29
 30var initOriginCaller = std.OriginCaller()
 31
 32func InitOriginCaller() std.Address {
 33	crossing()
 34
 35	return initOriginCaller
 36}
 37
 38func CallAssertOriginCall() {
 39	crossing()
 40
 41	std.AssertOriginCall()
 42}
 43
 44func CallIsOriginCall() bool {
 45	crossing()
 46
 47	return std.PreviousRealm().IsUser()
 48}
 49
 50func CallSubtestsAssertOriginCall() {
 51	crossing()
 52
 53	cross(rsubtests.CallAssertOriginCall)()
 54}
 55
 56func CallSubtestsIsOriginCall() bool {
 57	crossing()
 58
 59	return cross(rsubtests.CallIsOriginCall)()
 60}
 61
 62//----------------------------------------
 63// Test structure to ensure cross-realm modification is prevented.
 64
 65type TestRealmObject struct {
 66	Field string
 67}
 68
 69var TestRealmObjectValue TestRealmObject
 70
 71func ModifyTestRealmObject(t *TestRealmObject) {
 72	crossing()
 73
 74	t.Field += "_modified"
 75}
 76
 77func (t *TestRealmObject) Modify() {
 78	t.Field += "_modified"
 79}
 80
 81//----------------------------------------
 82// Test helpers to test a particular realm bug.
 83
 84type TestNode struct {
 85	Name  string
 86	Child *TestNode
 87}
 88
 89var (
 90	gTestNode1 *TestNode
 91	gTestNode2 *TestNode
 92	gTestNode3 *TestNode
 93)
 94
 95func InitTestNodes() {
 96	crossing()
 97
 98	gTestNode1 = &TestNode{Name: "first"}
 99	gTestNode2 = &TestNode{Name: "second", Child: &TestNode{Name: "second's child"}}
100}
101
102func ModTestNodes() {
103	crossing()
104
105	tmp := &TestNode{}
106	tmp.Child = gTestNode2.Child
107	gTestNode3 = tmp // set to new-real
108	// gTestNode1 = tmp.Child // set back to original is-real
109	gTestNode3 = nil // delete.
110}
111
112func PrintTestNodes() {
113	println(gTestNode2.Child.Name)
114}
115
116func GetPreviousRealm() std.Realm {
117	crossing()
118
119	return std.PreviousRealm()
120}
121
122func GetRSubtestsPreviousRealm() std.Realm {
123	crossing()
124
125	return cross(rsubtests.GetPreviousRealm)()
126}
127
128func Exec(fn func()) {
129	// no realm switching.
130	fn()
131}
132
133func ExecSwitch(fn func()) {
134	crossing()
135
136	fn()
137}
138
139func IsCallerSubPath() bool {
140	crossing()
141
142	return nestedpkg.IsCallerSubPath()
143}
144
145func IsCallerParentPath() bool {
146	crossing()
147
148	return nestedpkg.IsCallerParentPath()
149}
150
151func HasCallerSameNamespace() bool {
152	crossing()
153
154	return nestedpkg.IsSameNamespace()
155}