• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2012 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package main
6
7import (
8	"fmt"
9	"os"
10)
11
12func main() {
13	if len(os.Args) != 2 {
14		fatal("usage: callback testname")
15	}
16	switch os.Args[1] {
17	default:
18		fatal("unknown test %q", os.Args[1])
19	case "Call":
20		testCall()
21	case "Callback":
22		testCallback()
23	}
24	println("OK")
25}
26
27func fatal(f string, args ...any) {
28	fmt.Fprintln(os.Stderr, fmt.Sprintf(f, args...))
29	os.Exit(1)
30}
31
32type GoCallback struct{}
33
34func (p *GoCallback) Run() string {
35	return "GoCallback.Run"
36}
37
38func testCall() {
39	c := NewCaller()
40	cb := NewCallback()
41
42	c.SetCallback(cb)
43	s := c.Call()
44	if s != "Callback::run" {
45		fatal("unexpected string from Call: %q", s)
46	}
47	c.DelCallback()
48}
49
50func testCallback() {
51	c := NewCaller()
52	cb := NewDirectorCallback(&GoCallback{})
53	c.SetCallback(cb)
54	s := c.Call()
55	if s != "GoCallback.Run" {
56		fatal("unexpected string from Call with callback: %q", s)
57	}
58	c.DelCallback()
59	DeleteDirectorCallback(cb)
60}
61