Mercurial > hg > CbC > CbC_gcc
view libgo/go/testing/run_example.go @ 157:dafe684d005c
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:08:54 +0900 |
parents | 1830386684a0 |
children |
line wrap: on
line source
// Copyright 2019 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 !js // TODO(@musiol, @odeke-em): re-unify this entire file back into // example.go when js/wasm gets an os.Pipe implementation // and no longer needs this separation. package testing import ( "fmt" "io" "os" "strings" "time" ) func runExample(eg InternalExample) (ok bool) { if *chatty { fmt.Printf("=== RUN %s\n", eg.Name) } // Capture stdout. stdout := os.Stdout r, w, err := os.Pipe() if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } os.Stdout = w outC := make(chan string) go func() { var buf strings.Builder _, err := io.Copy(&buf, r) r.Close() if err != nil { fmt.Fprintf(os.Stderr, "testing: copying pipe: %v\n", err) os.Exit(1) } outC <- buf.String() }() start := time.Now() // Clean up in a deferred call so we can recover if the example panics. defer func() { timeSpent := time.Since(start) // Close pipe, restore stdout, get output. w.Close() os.Stdout = stdout out := <-outC err := recover() ok = eg.processRunResult(out, timeSpent, err) }() // Run example. eg.F() return }