github.com/prattmic/llgo-embedded@v0.0.0-20150820070356-41cfecea0e1e/third_party/liner/race_test.go (about)

     1  // +build race
     2  
     3  package liner
     4  
     5  import (
     6  	"io/ioutil"
     7  	"os"
     8  	"sync"
     9  	"testing"
    10  )
    11  
    12  func TestWriteHistory(t *testing.T) {
    13  	oldout := os.Stdout
    14  	defer func() { os.Stdout = oldout }()
    15  	oldin := os.Stdout
    16  	defer func() { os.Stdin = oldin }()
    17  
    18  	newinr, newinw, err := os.Pipe()
    19  	if err != nil {
    20  		t.Fatal(err)
    21  	}
    22  	os.Stdin = newinr
    23  	newoutr, newoutw, err := os.Pipe()
    24  	if err != nil {
    25  		t.Fatal(err)
    26  	}
    27  	defer newoutr.Close()
    28  	os.Stdout = newoutw
    29  
    30  	var wait sync.WaitGroup
    31  	wait.Add(1)
    32  	s := NewLiner()
    33  	go func() {
    34  		s.AppendHistory("foo")
    35  		s.AppendHistory("bar")
    36  		s.Prompt("")
    37  		wait.Done()
    38  	}()
    39  
    40  	s.WriteHistory(ioutil.Discard)
    41  
    42  	newinw.Close()
    43  	wait.Wait()
    44  }