master sewn/kohai / ui / editor_test.go
  1package ui
  2
  3import "testing"
  4
  5var hell = Editor{
  6	text: []editorLine{{
  7		runes:    []rune{'h', 'e', 'l', 'l'},
  8		clusters: []int{0, 1, 2, 3, 4},
  9	}},
 10	textWidth: []int{0, 1, 2, 3, 4},
 11	cursorIdx: 4,
 12	offsetIdx: 0,
 13	width:     5,
 14}
 15
 16func assertEditorEq(t *testing.T, actual, expected Editor) {
 17	if len(actual.text) != len(expected.text) {
 18		t.Errorf("expected text len to be %d, got %d\n", len(expected.text), len(actual.text))
 19	} else {
 20		for i := 0; i < len(actual.text[0].clusters); i++ {
 21			a := actual.text[0].clusters[i]
 22			e := expected.text[0].clusters[i]
 23
 24			if a != e {
 25				t.Errorf("expected cluster #%d to be '%c', got '%c'\n", i, e, a)
 26			}
 27		}
 28		for i := 0; i < len(actual.text[0].runes); i++ {
 29			a := actual.text[0].runes[i]
 30			e := expected.text[0].runes[i]
 31
 32			if a != e {
 33				t.Errorf("expected rune #%d to be '%c', got '%c'\n", i, e, a)
 34			}
 35		}
 36	}
 37
 38	if len(actual.textWidth) != len(expected.textWidth) {
 39		t.Errorf("expected textWidth len to be %d, got %d\n", len(expected.textWidth), len(actual.textWidth))
 40	} else {
 41		for i := 0; i < len(actual.textWidth); i++ {
 42			a := actual.textWidth[i]
 43			e := expected.textWidth[i]
 44
 45			if a != e {
 46				t.Errorf("expected width #%d to be %d, got %d\n", i, e, a)
 47			}
 48		}
 49	}
 50
 51	if actual.cursorIdx != expected.cursorIdx {
 52		t.Errorf("expected cursorIdx to be %d, got %d\n", expected.cursorIdx, actual.cursorIdx)
 53	}
 54
 55	if actual.offsetIdx != expected.offsetIdx {
 56		t.Errorf("expected offsetIdx to be %d, got %d\n", expected.offsetIdx, actual.offsetIdx)
 57	}
 58
 59	if actual.width != expected.width {
 60		t.Errorf("expected width to be %d, got %d\n", expected.width, actual.width)
 61	}
 62}
 63
 64func TestOneLetter(t *testing.T) {
 65	e := NewEditor(&UI{})
 66	e.Resize(5)
 67	e.PutRune('h')
 68	assertEditorEq(t, e, Editor{
 69		text: []editorLine{{
 70			runes:    []rune{'h'},
 71			clusters: []int{0, 1},
 72		}},
 73		textWidth: []int{0, 1},
 74		cursorIdx: 1,
 75		offsetIdx: 0,
 76		width:     5,
 77	})
 78}
 79
 80func TestFourLetters(t *testing.T) {
 81	e := NewEditor(&UI{})
 82	e.Resize(5)
 83	e.PutRune('h')
 84	e.PutRune('e')
 85	e.PutRune('l')
 86	e.PutRune('l')
 87	assertEditorEq(t, e, hell)
 88}
 89
 90func TestOneLeft(t *testing.T) {
 91	e := NewEditor(&UI{})
 92	e.Resize(5)
 93	e.PutRune('h')
 94	e.PutRune('l')
 95	e.Left()
 96	e.PutRune('e')
 97	e.PutRune('l')
 98	e.Right()
 99	assertEditorEq(t, e, hell)
100}
101
102func TestOneRem(t *testing.T) {
103	e := NewEditor(&UI{})
104	e.Resize(5)
105	e.PutRune('h')
106	e.PutRune('l')
107	e.RemCluster()
108	e.PutRune('e')
109	e.PutRune('l')
110	e.PutRune('l')
111	assertEditorEq(t, e, hell)
112}
113
114func TestLeftAndRem(t *testing.T) {
115	e := NewEditor(&UI{})
116	e.Resize(5)
117	e.PutRune('h')
118	e.PutRune('l')
119	e.PutRune('e')
120	e.Left()
121	e.RemCluster()
122	e.Right()
123	e.PutRune('l')
124	e.PutRune('l')
125	assertEditorEq(t, e, hell)
126}