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}