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}