github.com/bdarnell/errcheck@v0.0.0-20150224205548-d278a1ad0695/main_test.go (about)

     1  package main
     2  
     3  import (
     4  	"bytes"
     5  	"io"
     6  	"os"
     7  	"strings"
     8  	"testing"
     9  )
    10  
    11  func TestMain(t *testing.T) {
    12  	saveStderr := os.Stderr
    13  	saveStdout := os.Stdout
    14  	saveCwd, err := os.Getwd()
    15  	if err != nil {
    16  		t.Errorf("Cannot receive current directory: %v", err)
    17  	}
    18  
    19  	r, w, err := os.Pipe()
    20  	if err != nil {
    21  		t.Errorf("Cannot create pipe: %v", err)
    22  	}
    23  
    24  	os.Stderr = w
    25  	os.Stdout = w
    26  
    27  	bufChannel := make(chan string)
    28  
    29  	go func() {
    30  		buf := new(bytes.Buffer)
    31  		_, err = io.Copy(buf, r)
    32  		r.Close()
    33  		if err != nil {
    34  			t.Errorf("Cannot copy to buffer: %v", err)
    35  		}
    36  
    37  		bufChannel <- buf.String()
    38  	}()
    39  
    40  	exitCode := mainCmd([]string{"cmd name", "github.com/kisielk/errcheck/testdata"})
    41  
    42  	w.Close()
    43  
    44  	os.Stderr = saveStderr
    45  	os.Stdout = saveStdout
    46  	os.Chdir(saveCwd)
    47  
    48  	out := <-bufChannel
    49  
    50  	if exitCode != exitUncheckedError {
    51  		t.Errorf("Exit code is %d, expected %d", exitCode, exitUncheckedError)
    52  	}
    53  
    54  	expectUnchecked := 9
    55  	if got := strings.Count(out, "UNCHECKED"); got != expectUnchecked {
    56  		t.Errorf("Got %d UNCHECKED errors, expected %d in:\n%s", got, expectUnchecked, out)
    57  	}
    58  }