github.com/goplusjs/gopherjs@v1.2.6-0.20211206034512-f187917453b8/compiler/natives/src/testing/example.go (about)

     1  // +build js
     2  
     3  package testing
     4  
     5  import (
     6  	"fmt"
     7  	"os"
     8  	"strings"
     9  	"time"
    10  )
    11  
    12  func runExample(eg InternalExample) (ok bool) {
    13  	if *chatty {
    14  		fmt.Printf("=== RUN   %s\n", eg.Name)
    15  	}
    16  
    17  	// Capture stdout.
    18  	stdout := os.Stdout
    19  	w, err := tempFile("." + eg.Name + ".stdout.")
    20  	if err != nil {
    21  		fmt.Fprintln(os.Stderr, err)
    22  		os.Exit(1)
    23  	}
    24  	os.Stdout = w
    25  
    26  	start := time.Now()
    27  	ok = true
    28  
    29  	// Clean up in a deferred call so we can recover if the example panics.
    30  	defer func() {
    31  		dstr := fmtDuration(time.Now().Sub(start))
    32  
    33  		// Close file, restore stdout, get output.
    34  		w.Close()
    35  		os.Stdout = stdout
    36  		out, readFileErr := readFile(w.Name())
    37  		_ = os.Remove(w.Name())
    38  		if readFileErr != nil {
    39  			fmt.Fprintf(os.Stderr, "testing: reading stdout file: %v\n", readFileErr)
    40  			os.Exit(1)
    41  		}
    42  
    43  		var fail string
    44  		err := recover()
    45  		got := strings.TrimSpace(out)
    46  		want := strings.TrimSpace(eg.Output)
    47  		if eg.Unordered {
    48  			if sortLines(got) != sortLines(want) && err == nil {
    49  				fail = fmt.Sprintf("got:\n%s\nwant (unordered):\n%s\n", out, eg.Output)
    50  			}
    51  		} else {
    52  			if got != want && err == nil {
    53  				fail = fmt.Sprintf("got:\n%s\nwant:\n%s\n", got, want)
    54  			}
    55  		}
    56  		if fail != "" || err != nil {
    57  			fmt.Printf("--- FAIL: %s (%s)\n%s", eg.Name, dstr, fail)
    58  			ok = false
    59  		} else if *chatty {
    60  			fmt.Printf("--- PASS: %s (%s)\n", eg.Name, dstr)
    61  		}
    62  		if err != nil {
    63  			panic(err)
    64  		}
    65  	}()
    66  
    67  	// Run example.
    68  	eg.F()
    69  	return
    70  }