tests.gno

1.99 Kb ยท 116 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	counter++
 14}
 15
 16func Counter() int {
 17	return counter
 18}
 19
 20func CurrentRealmPath() string {
 21	return std.CurrentRealm().PkgPath()
 22}
 23
 24var initOriginCaller = std.OriginCaller()
 25
 26func InitOriginCaller() std.Address {
 27	return initOriginCaller
 28}
 29
 30func CallAssertOriginCall() {
 31	std.AssertOriginCall()
 32}
 33
 34func CallIsOriginCall() bool {
 35	return std.PreviousRealm().IsUser()
 36}
 37
 38func CallSubtestsAssertOriginCall() {
 39	rsubtests.CallAssertOriginCall()
 40}
 41
 42func CallSubtestsIsOriginCall() bool {
 43	return rsubtests.CallIsOriginCall()
 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(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() {
 78	gTestNode1 = &TestNode{Name: "first"}
 79	gTestNode2 = &TestNode{Name: "second", Child: &TestNode{Name: "second's child"}}
 80}
 81
 82func ModTestNodes() {
 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() std.Realm {
 95	return std.PreviousRealm()
 96}
 97
 98func GetRSubtestsPreviousRealm() std.Realm {
 99	return rsubtests.GetPreviousRealm()
100}
101
102func Exec(fn func()) {
103	fn()
104}
105
106func IsCallerSubPath() bool {
107	return nestedpkg.IsCallerSubPath()
108}
109
110func IsCallerParentPath() bool {
111	return nestedpkg.IsCallerParentPath()
112}
113
114func HasCallerSameNamespace() bool {
115	return nestedpkg.IsSameNamespace()
116}