1
2
3
4
5
6
7
8
9
10 package cgotest
11
12
24 import "C"
25
26 import (
27 "testing"
28 "unsafe"
29 )
30
31 var callbacks int
32
33
34 func IMPIsOpaque() {
35 callbacks++
36 }
37
38
39 func IMPInitWithFrame() {
40 callbacks++
41 }
42
43
44 func IMPDrawRect() {
45 callbacks++
46 }
47
48
49 func IMPWindowResize() {
50 callbacks++
51 }
52
53 func test4029(t *testing.T) {
54 loadThySelf(t, "IMPWindowResize")
55 loadThySelf(t, "IMPDrawRect")
56 loadThySelf(t, "IMPInitWithFrame")
57 loadThySelf(t, "IMPIsOpaque")
58 if callbacks != 4 {
59 t.Errorf("got %d callbacks, expected 4", callbacks)
60 }
61 }
62
63 func loadThySelf(t *testing.T, symbol string) {
64 this_process := C.dlopen4029(nil, C.RTLD_NOW)
65 if this_process == 0 {
66 t.Error("dlopen:", C.GoString(C.dlerror()))
67 return
68 }
69 defer C.dlclose4029(this_process)
70
71 symCStr := C.CString(symbol)
72 defer C.free(unsafe.Pointer(symCStr))
73 symbol_address := C.dlsym4029(this_process, symCStr)
74 if symbol_address == 0 {
75 t.Error("dlsym:", C.GoString(C.dlerror()))
76 return
77 }
78 t.Log(symbol, symbol_address)
79 C.call4029(symbol_address)
80 }
81
View as plain text