...

Source file src/github.com/moby/term/term_test.go

Documentation: github.com/moby/term

     1  //go:build !windows
     2  // +build !windows
     3  
     4  package term
     5  
     6  import (
     7  	"os"
     8  	"reflect"
     9  	"testing"
    10  
    11  	cpty "github.com/creack/pty"
    12  )
    13  
    14  func newTTYForTest(t *testing.T) *os.File {
    15  	t.Helper()
    16  	pty, tty, err := cpty.Open()
    17  	if err != nil {
    18  		t.Fatalf("error creating pty: %v", err)
    19  	} else {
    20  		t.Cleanup(func() {
    21  			_ = pty.Close()
    22  			_ = tty.Close()
    23  		})
    24  	}
    25  
    26  	return pty
    27  }
    28  
    29  func newTempFile(t *testing.T) *os.File {
    30  	t.Helper()
    31  	tmpFile, err := os.CreateTemp(t.TempDir(), "temp")
    32  	if err != nil {
    33  		t.Fatalf("error creating tempfile: %v", err)
    34  	} else {
    35  		t.Cleanup(func() { _ = tmpFile.Close() })
    36  	}
    37  	return tmpFile
    38  }
    39  
    40  func TestGetWinsize(t *testing.T) {
    41  	tty := newTTYForTest(t)
    42  	winSize, err := GetWinsize(tty.Fd())
    43  	if err != nil {
    44  		t.Error(err)
    45  	}
    46  	if winSize == nil {
    47  		t.Fatal("winSize is nil")
    48  	}
    49  
    50  	newSize := Winsize{Width: 200, Height: 200, x: winSize.x, y: winSize.y}
    51  	err = SetWinsize(tty.Fd(), &newSize)
    52  	if err != nil {
    53  		t.Fatal(err)
    54  	}
    55  	winSize, err = GetWinsize(tty.Fd())
    56  	if err != nil {
    57  		t.Fatal(err)
    58  	}
    59  	if !reflect.DeepEqual(*winSize, newSize) {
    60  		t.Fatalf("expected: %+v, got: %+v", newSize, *winSize)
    61  	}
    62  }
    63  
    64  func TestSetWinsize(t *testing.T) {
    65  	tty := newTTYForTest(t)
    66  	winSize, err := GetWinsize(tty.Fd())
    67  	if err != nil {
    68  		t.Fatal(err)
    69  	}
    70  	if winSize == nil {
    71  		t.Fatal("winSize is nil")
    72  	}
    73  	newSize := Winsize{Width: 200, Height: 200, x: winSize.x, y: winSize.y}
    74  	err = SetWinsize(tty.Fd(), &newSize)
    75  	if err != nil {
    76  		t.Fatal(err)
    77  	}
    78  	winSize, err = GetWinsize(tty.Fd())
    79  	if err != nil {
    80  		t.Fatal(err)
    81  	}
    82  	if !reflect.DeepEqual(*winSize, newSize) {
    83  		t.Fatalf("expected: %+v, got: %+v", newSize, *winSize)
    84  	}
    85  }
    86  
    87  func TestGetFdInfo(t *testing.T) {
    88  	tty := newTTYForTest(t)
    89  	inFd, isTerminal := GetFdInfo(tty)
    90  	if inFd != tty.Fd() {
    91  		t.Errorf("expected: %d, got: %d", tty.Fd(), inFd)
    92  	}
    93  	if !isTerminal {
    94  		t.Error("expected isTerminal to be true")
    95  	}
    96  	tmpFile := newTempFile(t)
    97  	inFd, isTerminal = GetFdInfo(tmpFile)
    98  	if inFd != tmpFile.Fd() {
    99  		t.Errorf("expected: %d, got: %d", tty.Fd(), inFd)
   100  	}
   101  	if isTerminal {
   102  		t.Error("expected isTerminal to be false")
   103  	}
   104  }
   105  
   106  func TestIsTerminal(t *testing.T) {
   107  	tty := newTTYForTest(t)
   108  	isTerminal := IsTerminal(tty.Fd())
   109  	if !isTerminal {
   110  		t.Fatalf("expected isTerminal to be true")
   111  	}
   112  	tmpFile := newTempFile(t)
   113  	isTerminal = IsTerminal(tmpFile.Fd())
   114  	if isTerminal {
   115  		t.Fatalf("expected isTerminal to be false")
   116  	}
   117  }
   118  
   119  func TestSaveState(t *testing.T) {
   120  	tty := newTTYForTest(t)
   121  	state, err := SaveState(tty.Fd())
   122  	if err != nil {
   123  		t.Error(err)
   124  	}
   125  	if state == nil {
   126  		t.Fatal("state is nil")
   127  	}
   128  	tty = newTTYForTest(t)
   129  	err = RestoreTerminal(tty.Fd(), state)
   130  	if err != nil {
   131  		t.Fatal(err)
   132  	}
   133  }
   134  
   135  func TestDisableEcho(t *testing.T) {
   136  	tty := newTTYForTest(t)
   137  	state, err := SetRawTerminal(tty.Fd())
   138  	defer RestoreTerminal(tty.Fd(), state)
   139  	if err != nil {
   140  		t.Error(err)
   141  	}
   142  	if state == nil {
   143  		t.Fatal("state is nil")
   144  	}
   145  	err = DisableEcho(tty.Fd(), state)
   146  	if err != nil {
   147  		t.Fatal(err)
   148  	}
   149  }
   150  

View as plain text