tests.gno
2.22 Kb ยท 121 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(cur realm) {
13 counter++
14}
15
16func Counter(cur realm) int {
17 return counter
18}
19
20func CurrentRealmPath(cur realm) string {
21 return std.CurrentRealm().PkgPath()
22}
23
24var initOriginCaller = std.OriginCaller()
25
26func InitOriginCaller(cur realm) std.Address {
27 return initOriginCaller
28}
29
30func CallAssertOriginCall(cur realm) {
31 std.AssertOriginCall()
32}
33
34func CallIsOriginCall(cur realm) bool {
35 return std.PreviousRealm().IsUser()
36}
37
38func CallSubtestsAssertOriginCall(cur realm) {
39 rsubtests.CallAssertOriginCall(cross)
40}
41
42func CallSubtestsIsOriginCall(cur realm) bool {
43 return rsubtests.CallIsOriginCall(cross)
44}
45
46//----------------------------------------
47// Test structure to ensure cross-realm modification is prevented.
48
49type TestRealmObject struct {
50 Field string
51}
52
53var TestRealmObjectValue TestRealmObject
54
55func ModifyTestRealmObject(cur realm, t *TestRealmObject) {
56 t.Field += "_modified"
57}
58
59func (t *TestRealmObject) Modify() {
60 t.Field += "_modified"
61}
62
63//----------------------------------------
64// Test helpers to test a particular realm bug.
65
66type TestNode struct {
67 Name string
68 Child *TestNode
69}
70
71var (
72 gTestNode1 *TestNode
73 gTestNode2 *TestNode
74 gTestNode3 *TestNode
75)
76
77func InitTestNodes(cur realm) {
78 gTestNode1 = &TestNode{Name: "first"}
79 gTestNode2 = &TestNode{Name: "second", Child: &TestNode{Name: "second's child"}}
80}
81
82func ModTestNodes(cur realm) {
83 tmp := &TestNode{}
84 tmp.Child = gTestNode2.Child
85 gTestNode3 = tmp // set to new-real
86 // gTestNode1 = tmp.Child // set back to original is-real
87 gTestNode3 = nil // delete.
88}
89
90func PrintTestNodes() {
91 println(gTestNode2.Child.Name)
92}
93
94func GetPreviousRealm(cur realm) std.Realm {
95 return std.PreviousRealm()
96}
97
98func GetRSubtestsPreviousRealm(cur realm) std.Realm {
99 return rsubtests.GetPreviousRealm(cross)
100}
101
102func Exec(fn func()) {
103 // no realm switching.
104 fn()
105}
106
107func ExecSwitch(cur realm, fn func()) {
108 fn()
109}
110
111func IsCallerSubPath(cur realm) bool {
112 return nestedpkg.IsCallerSubPath()
113}
114
115func IsCallerParentPath(cur realm) bool {
116 return nestedpkg.IsCallerParentPath()
117}
118
119func HasCallerSameNamespace(cur realm) bool {
120 return nestedpkg.IsSameNamespace()
121}