github.com/markusbkk/elvish@v0.0.0-20231204143114-91dc52438621/pkg/cli/term/read_rune_test.go (about)

     1  //go:build !windows && !plan9
     2  // +build !windows,!plan9
     3  
     4  package term
     5  
     6  import "testing"
     7  
     8  // TODO(xiaq): Do not depend on Unix for this test.
     9  
    10  var contents = []string{
    11  	"English",
    12  	"Ελληνικά",
    13  	"你好 こんにちは",
    14  	"𐌰𐌱",
    15  }
    16  
    17  func TestReadRune(t *testing.T) {
    18  	for _, content := range contents {
    19  		t.Run(content, func(t *testing.T) {
    20  			rd, w, cleanup := setupFileReader()
    21  			defer cleanup()
    22  
    23  			w.Write([]byte(content))
    24  			for _, wantRune := range content {
    25  				r, err := readRune(rd, 0)
    26  				if r != wantRune {
    27  					t.Errorf("got rune %q, want %q", r, wantRune)
    28  				}
    29  				if err != nil {
    30  					t.Errorf("got err %v, want nil", err)
    31  				}
    32  			}
    33  		})
    34  	}
    35  }
    36  
    37  func TestReadRune_ErrorAtFirstByte(t *testing.T) {
    38  	rd, _, cleanup := setupFileReader()
    39  	defer cleanup()
    40  
    41  	r, err := readRune(rd, 0)
    42  	if r != '\ufffd' {
    43  		t.Errorf("got rune %q, want %q", r, '\ufffd')
    44  	}
    45  	if err == nil {
    46  		t.Errorf("got err %v, want non-nil", err)
    47  	}
    48  }
    49  
    50  func TestReadRune_ErrorAtNonFirstByte(t *testing.T) {
    51  	rd, w, cleanup := setupFileReader()
    52  	defer cleanup()
    53  
    54  	w.Write([]byte{0xe4})
    55  
    56  	r, err := readRune(rd, 0)
    57  	if r != '\ufffd' {
    58  		t.Errorf("got rune %q, want %q", r, '\ufffd')
    59  	}
    60  	if err == nil {
    61  		t.Errorf("got err %v, want non-nil", err)
    62  	}
    63  }