package document import "testing" func TestNewRow(t *testing.T) { str := "abcdefg" row := newRow(str) got := string(row.chars) want := str if got != want { t.Errorf("Row chars not equal to original string. Row: %q, String: %q", row, str) } } func TestRowSize(t *testing.T) { str := "abcdefg" row := newRow(str) got := row.Size() want := 7 if got != want { t.Errorf("Row size not equal to number of runes in original string") } } func TestRenderSize(t *testing.T) { str := "\tabcdefg" row := newRow(str) row.update() got := row.RenderSize() want := 11 if got != want { t.Errorf("Row rsize not equal to number of runes in original string") } } type insertRune struct { initial string ch rune at int } var insertRuneTests = []insertRune{ {"abde", 'c', 2}, {"bcde", 'a', 0}, {"abcd", 'e', 4}, {"abcd", 'e', 17}, {"abcd", 'e', -2}, } func TestInsertRune(t *testing.T) { for _, test := range insertRuneTests { row := newRow(test.initial) row.insertRune(test.ch, test.at) if row.Size() != 5 { t.Errorf("Row size after inserting rune at index [%d] is %d, should be %d", test.at, row.Size(), 5) } got := row.toString() want := "abcde" if got != want { t.Errorf("Row after update is '%s', should be '%s'", got, want) } } }