...

Source file src/github.com/dsoprea/go-utility/v2/testing/redirect_tty_test.go

Documentation: github.com/dsoprea/go-utility/v2/testing

     1  package ritesting
     2  
     3  import (
     4  	"bytes"
     5  	"io"
     6  	"os"
     7  	"testing"
     8  
     9  	"github.com/dsoprea/go-logging"
    10  )
    11  
    12  func TestRedirectTty(t *testing.T) {
    13  	if rtty != nil {
    14  		t.Fatalf("rtty global is not nil")
    15  	}
    16  
    17  	originalStdin := os.Stdin
    18  	originalStdout := os.Stdout
    19  	originalStderr := os.Stderr
    20  
    21  	RedirectTty()
    22  
    23  	if rtty == nil {
    24  		t.Fatalf("rtty is nil after redirect.")
    25  	}
    26  
    27  	if rtty.originalStdin != originalStdin {
    28  		t.Fatalf("Captured STDIN is not correct.")
    29  	} else if rtty.originalStdout != originalStdout {
    30  		t.Fatalf("Captured STDOUT is not correct.")
    31  	} else if rtty.originalStderr != originalStderr {
    32  		t.Fatalf("Captured STDERR is not correct.")
    33  	}
    34  
    35  	// Load test data.
    36  
    37  	testStdinData := []byte("test input")
    38  
    39  	_, err := rtty.newStdinWriter.Write(testStdinData)
    40  	log.PanicIf(err)
    41  
    42  	testStdoutData := []byte("test stdout output")
    43  
    44  	_, err = os.Stdout.Write(testStdoutData)
    45  	log.PanicIf(err)
    46  
    47  	testStderrData := []byte("test stderr output")
    48  
    49  	_, err = os.Stderr.Write(testStderrData)
    50  	log.PanicIf(err)
    51  
    52  	// Validate.
    53  
    54  	stdinBuffer := make([]byte, len(testStdinData))
    55  	_, err = io.ReadFull(os.Stdin, stdinBuffer)
    56  	log.PanicIf(err)
    57  
    58  	if bytes.Equal(stdinBuffer, testStdinData) != true {
    59  		t.Fatalf("STDIN data not correct.")
    60  	}
    61  
    62  	stdoutBuffer := make([]byte, len(testStdoutData))
    63  	_, err = io.ReadFull(rtty.newStdoutReader, stdoutBuffer)
    64  	log.PanicIf(err)
    65  
    66  	if bytes.Equal(stdoutBuffer, testStdoutData) != true {
    67  		t.Fatalf("STDOUT data not correct.")
    68  	}
    69  
    70  	stderrBuffer := make([]byte, len(testStderrData))
    71  	_, err = io.ReadFull(rtty.newStderrReader, stderrBuffer)
    72  	log.PanicIf(err)
    73  
    74  	if bytes.Equal(stderrBuffer, testStderrData) != true {
    75  		t.Fatalf("STDERR data not correct.")
    76  	}
    77  
    78  	RestoreTty()
    79  
    80  	if os.Stdin != originalStdin {
    81  		t.Fatalf("Restored STDIN is not correct.")
    82  	} else if os.Stdout != originalStdout {
    83  		t.Fatalf("Restored STDOUT is not correct.")
    84  	} else if os.Stderr != originalStderr {
    85  		t.Fatalf("Restored STDERR is not correct.")
    86  	}
    87  }
    88  
    89  func TestRestoreTty(t *testing.T) {
    90  	if rtty != nil {
    91  		t.Fatalf("rtty global is not nil")
    92  	}
    93  
    94  	originalStdin := os.Stdin
    95  	originalStdout := os.Stdout
    96  	originalStderr := os.Stderr
    97  
    98  	RedirectTty()
    99  
   100  	if rtty == nil {
   101  		t.Fatalf("rtty is nil after redirect.")
   102  	}
   103  
   104  	if rtty.originalStdin != originalStdin {
   105  		t.Fatalf("Captured STDIN is not correct.")
   106  	} else if rtty.originalStdout != originalStdout {
   107  		t.Fatalf("Captured STDOUT is not correct.")
   108  	} else if rtty.originalStderr != originalStderr {
   109  		t.Fatalf("Captured STDERR is not correct.")
   110  	}
   111  
   112  	RestoreTty()
   113  
   114  	if os.Stdin != originalStdin {
   115  		t.Fatalf("Restored STDIN is not correct.")
   116  	} else if os.Stdout != originalStdout {
   117  		t.Fatalf("Restored STDOUT is not correct.")
   118  	} else if os.Stderr != originalStderr {
   119  		t.Fatalf("Restored STDERR is not correct.")
   120  	}
   121  }
   122  
   123  func TestRestoreAndDumpTty(t *testing.T) {
   124  	if rtty != nil {
   125  		t.Fatalf("rtty global is not nil")
   126  	}
   127  
   128  	originalStdin := os.Stdin
   129  	originalStdout := os.Stdout
   130  	originalStderr := os.Stderr
   131  
   132  	RedirectTty()
   133  
   134  	if rtty == nil {
   135  		t.Fatalf("rtty is nil after redirect.")
   136  	}
   137  
   138  	if rtty.originalStdin != originalStdin {
   139  		t.Fatalf("Captured STDIN is not correct.")
   140  	} else if rtty.originalStdout != originalStdout {
   141  		t.Fatalf("Captured STDOUT is not correct.")
   142  	} else if rtty.originalStderr != originalStderr {
   143  		t.Fatalf("Captured STDERR is not correct.")
   144  	}
   145  
   146  	RestoreAndDumpTty()
   147  
   148  	if os.Stdin != originalStdin {
   149  		t.Fatalf("Restored STDIN is not correct.")
   150  	} else if os.Stdout != originalStdout {
   151  		t.Fatalf("Restored STDOUT is not correct.")
   152  	} else if os.Stderr != originalStderr {
   153  		t.Fatalf("Restored STDERR is not correct.")
   154  	}
   155  }
   156  
   157  func TestStdinWriter(t *testing.T) {
   158  	RedirectTty()
   159  
   160  	defer RestoreTty()
   161  
   162  	if StdinWriter() != rtty.newStdinWriter {
   163  		t.Fatalf("Not correct resource.")
   164  	}
   165  }
   166  
   167  func TestStdoutReader(t *testing.T) {
   168  	RedirectTty()
   169  
   170  	defer RestoreTty()
   171  
   172  	if StdoutReader() != rtty.newStdoutReader {
   173  		t.Fatalf("Not correct resource.")
   174  	}
   175  }
   176  
   177  func TestStderrReader(t *testing.T) {
   178  	RedirectTty()
   179  
   180  	defer RestoreTty()
   181  
   182  	if StderrReader() != rtty.newStderrReader {
   183  		t.Fatalf("Not correct resource.")
   184  	}
   185  }
   186  
   187  func TestIsTtyRedirected(t *testing.T) {
   188  	if IsTtyRedirected() != false {
   189  		t.Fatalf("Incorrect initial state.")
   190  	}
   191  
   192  	RedirectTty()
   193  
   194  	if IsTtyRedirected() != true {
   195  		t.Fatalf("Incorrect redirected state.")
   196  	}
   197  
   198  	RestoreTty()
   199  
   200  	if IsTtyRedirected() != false {
   201  		t.Fatalf("Incorrect final state.")
   202  	}
   203  }
   204  

View as plain text