read_rune_test.go 1.2 KB

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