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}