summaryrefslogtreecommitdiff
path: root/misc/cgo/test/issue4029.go
diff options
context:
space:
mode:
authorMichael Stapelberg <stapelberg@debian.org>2013-03-04 21:27:36 +0100
committerMichael Stapelberg <michael@stapelberg.de>2013-03-04 21:27:36 +0100
commit04b08da9af0c450d645ab7389d1467308cfc2db8 (patch)
treedb247935fa4f2f94408edc3acd5d0d4f997aa0d8 /misc/cgo/test/issue4029.go
parent917c5fb8ec48e22459d77e3849e6d388f93d3260 (diff)
downloadgolang-04b08da9af0c450d645ab7389d1467308cfc2db8.tar.gz
Imported Upstream version 1.1~hg20130304upstream/1.1_hg20130304
Diffstat (limited to 'misc/cgo/test/issue4029.go')
-rw-r--r--misc/cgo/test/issue4029.go60
1 files changed, 60 insertions, 0 deletions
diff --git a/misc/cgo/test/issue4029.go b/misc/cgo/test/issue4029.go
new file mode 100644
index 000000000..7495d38fe
--- /dev/null
+++ b/misc/cgo/test/issue4029.go
@@ -0,0 +1,60 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build !windows
+
+package cgotest
+
+/*
+#include <dlfcn.h>
+#cgo linux LDFLAGS: -ldl
+*/
+import "C"
+
+import (
+ "fmt"
+ "testing"
+)
+
+//export IMPIsOpaque
+func IMPIsOpaque() {
+ fmt.Println("isOpaque")
+}
+
+//export IMPInitWithFrame
+func IMPInitWithFrame() {
+ fmt.Println("IInitWithFrame")
+}
+
+//export IMPDrawRect
+func IMPDrawRect() {
+ fmt.Println("drawRect:")
+}
+
+//export IMPWindowResize
+func IMPWindowResize() {
+ fmt.Println("windowDidResize:")
+}
+
+func test4029(t *testing.T) {
+ loadThySelf(t, "IMPWindowResize")
+ loadThySelf(t, "IMPDrawRect")
+ loadThySelf(t, "IMPInitWithFrame")
+ loadThySelf(t, "IMPIsOpaque")
+}
+
+func loadThySelf(t *testing.T, symbol string) {
+ this_process := C.dlopen(nil, C.RTLD_NOW)
+ if this_process == nil {
+ t.Fatal("dlopen:", C.GoString(C.dlerror()))
+ }
+ defer C.dlclose(this_process)
+
+ symbol_address := C.dlsym(this_process, C.CString(symbol))
+ if symbol_address == nil {
+ t.Fatal("dlsym:", C.GoString(C.dlerror()))
+ } else {
+ t.Log(symbol, symbol_address)
+ }
+}