| // 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. |
| |
| package main |
| |
| import ( |
| "fmt" |
| "os" |
| ) |
| |
| func main() { |
| if len(os.Args) != 2 { |
| fatal("usage: callback testname") |
| } |
| switch os.Args[1] { |
| default: |
| fatal("unknown test %q", os.Args[1]) |
| case "Call": |
| testCall() |
| case "Callback": |
| testCallback() |
| } |
| println("OK") |
| } |
| |
| func fatal(f string, args ...any) { |
| fmt.Fprintln(os.Stderr, fmt.Sprintf(f, args...)) |
| os.Exit(1) |
| } |
| |
| type GoCallback struct{} |
| |
| func (p *GoCallback) Run() string { |
| return "GoCallback.Run" |
| } |
| |
| func testCall() { |
| c := NewCaller() |
| cb := NewCallback() |
| |
| c.SetCallback(cb) |
| s := c.Call() |
| if s != "Callback::run" { |
| fatal("unexpected string from Call: %q", s) |
| } |
| c.DelCallback() |
| } |
| |
| func testCallback() { |
| c := NewCaller() |
| cb := NewDirectorCallback(&GoCallback{}) |
| c.SetCallback(cb) |
| s := c.Call() |
| if s != "GoCallback.Run" { |
| fatal("unexpected string from Call with callback: %q", s) |
| } |
| c.DelCallback() |
| DeleteDirectorCallback(cb) |
| } |