A gap buffer implementation in Go.
at main 233 lines 5.6 kB view raw
1// SPDX-FileCopyrightText: Copyright 2024 Roland Csaszar 2// SPDX-License-Identifier: MIT 3// 4// Project: go-gap-buffer 5// File: gap-buffer_test.go 6// Date: 07.Feb.2024 7// 8// ============================================================================= 9 10// Black-box testing of the gap buffer library. 11package gapbuffer_test 12 13import ( 14 "testing" 15 16 gapbuffer "codeberg.org/Release-Candidate/go-gap-buffer" 17 "github.com/stretchr/testify/assert" 18) 19 20// ============================================================================== 21// Simple Sanity Checks 22 23func TestEmpty(t *testing.T) { 24 t.Parallel() 25 26 gb := gapbuffer.New() 27 strLen := gb.StringLength() 28 29 assert.Empty(t, gb.String(), "Error, empty gap buffer isn't empty!") 30 assert.Equal(t, 0, strLen, "Error checking string length!") 31} 32 33func TestInitial(t *testing.T) { 34 t.Parallel() 35 36 gb := gapbuffer.NewStr("Hello World!") 37 l, r := gb.StringPair() 38 strLen := gb.StringLength() 39 40 assert.Equal(t, "Hello World!", l, "Error, left part isn't 'Hello World!'!") 41 assert.Empty(t, r, "Error, right part isn't empty!") 42 assert.Equal(t, len(l)+len(r), strLen, "Error checking string length!") 43} 44 45func TestMoveLeft(t *testing.T) { 46 t.Parallel() 47 48 gapBuffer := gapbuffer.NewStr("Hello World!") 49 gapBuffer.LeftMv() 50 gapBuffer.LeftMv() 51 gapBuffer.LeftMv() 52 gapBuffer.LeftMv() 53 gapBuffer.LeftMv() 54 gapBuffer.LeftMv() 55 l, r := gapBuffer.StringPair() 56 strLen := gapBuffer.StringLength() 57 58 assert.Equal(t, "Hello ", l, "Error, left part isn't 'Hello '!") 59 assert.Equal(t, "World!", r, "Error, right part isn't 'World!'!") 60 assert.Equal(t, len(l)+len(r), strLen, "Error checking string length!") 61} 62 63func TestDeleteLeft(t *testing.T) { 64 t.Parallel() 65 66 gapBuf := gapbuffer.NewStr("Hello World!") 67 gapBuf.LeftDel() 68 gapBuf.LeftDel() 69 gapBuf.LeftDel() 70 gapBuf.LeftDel() 71 gapBuf.LeftDel() 72 gapBuf.LeftDel() 73 gapBuf.LeftDel() 74 l, r := gapBuf.StringPair() 75 strLen := gapBuf.StringLength() 76 77 assert.Equal(t, "Hello", l, "Error, left part isn't 'Hello'!") 78 assert.Empty(t, r, "Error, right part isn't empty!") 79 assert.Equal(t, len(l)+len(r), strLen, "Error checking string length!") 80} 81 82func TestDeleteRight(t *testing.T) { 83 t.Parallel() 84 85 gapBuf := gapbuffer.NewStr("Hello World!") 86 gapBuf.LeftMv() 87 gapBuf.LeftMv() 88 gapBuf.LeftMv() 89 gapBuf.LeftMv() 90 gapBuf.LeftMv() 91 gapBuf.LeftMv() 92 gapBuf.LeftMv() 93 gapBuf.RightDel() 94 gapBuf.RightDel() 95 gapBuf.RightDel() 96 gapBuf.RightDel() 97 gapBuf.RightDel() 98 gapBuf.RightDel() 99 gapBuf.RightDel() 100 gapBuf.RightDel() 101 l, r := gapBuf.StringPair() 102 strLen := gapBuf.StringLength() 103 104 assert.Equal(t, "Hello", l, "Error, left part isn't 'Hello '!") 105 assert.Empty(t, r, "Error, right part isn't empty!") 106 assert.Equal(t, len(l)+len(r), strLen, "Error checking string length!") 107} 108 109func TestInsertWithNewlines(t *testing.T) { 110 t.Parallel() 111 112 gapBuf := gapbuffer.NewStr("Hello World!") 113 gapBuf.LeftMv() 114 gapBuf.LeftMv() 115 gapBuf.LeftMv() 116 gapBuf.LeftMv() 117 gapBuf.LeftMv() 118 gapBuf.LeftMv() 119 gapBuf.LeftMv() 120 gapBuf.RightDel() 121 gapBuf.Insert("\nfunny\n") 122 123 l, r := gapBuf.StringPair() 124 strLen := gapBuf.StringLength() 125 126 assert.Equal(t, "Hello\nfunny\n", l, "Error, left part isn't 'Hello\\nfunny\\n'!") 127 assert.Equal(t, "World!", r, "Error, right part isn't 'World!'!") 128 assert.Equal(t, len(l)+len(r), strLen, "Error checking string length!") 129} 130 131func TestMoveUp(t *testing.T) { 132 t.Parallel() 133 134 gapBuf := gapbuffer.NewStr("Hello World!") 135 gapBuf.LeftMv() 136 gapBuf.LeftMv() 137 gapBuf.LeftMv() 138 gapBuf.LeftMv() 139 gapBuf.LeftMv() 140 gapBuf.LeftMv() 141 gapBuf.Insert("\nfunny\n") 142 gapBuf.UpMv() 143 144 l, r := gapBuf.StringPair() 145 strLen := gapBuf.StringLength() 146 147 assert.Equal(t, "Hello \n", l, "Error, left part isn't 'Hello \\n'!") 148 assert.Equal(t, "funny\nWorld!", r, "Error, right part isn't 'funny\\nWorld!'!") 149 assert.Equal(t, len(l)+len(r), strLen, "Error checking string length!") 150} 151 152func TestMoveDown(t *testing.T) { 153 t.Parallel() 154 155 gapBuf := gapbuffer.NewStr("Hello, World!\nHi!\n") 156 gapBuf.UpMv() 157 gapBuf.UpMv() 158 gapBuf.RightMv() 159 gapBuf.RightMv() 160 gapBuf.RightMv() 161 gapBuf.RightMv() 162 gapBuf.DownMv() 163 164 l, r := gapBuf.StringPair() 165 strLen := gapBuf.StringLength() 166 167 assert.Equal(t, "Hello, World!\nHi!", l, "Error, left part isn't 'Hello, World\\nHi!'") 168 assert.Equal(t, "\n", r, "Error, right part isn't '\\n'") 169 assert.Equal(t, len(l)+len(r), strLen, "Error checking string length!") 170} 171 172func TestLineLength(t *testing.T) { 173 t.Parallel() 174 175 gb := gapbuffer.NewStr("Hello\nWorld!") 176 gb.UpMv() 177 length := gb.LineLength() 178 179 assert.Equal(t, 5, length, "Error, line length isn't 5!") 180} 181 182func TestLeftDelEverything(t *testing.T) { 183 t.Parallel() 184 185 gapBuf := gapbuffer.NewStr("Hello\nWorld!") 186 gapBuf.LeftDel() 187 gapBuf.LeftDel() 188 gapBuf.LeftDel() 189 gapBuf.LeftDel() 190 gapBuf.LeftDel() 191 gapBuf.LeftDel() 192 gapBuf.LeftDel() 193 gapBuf.LeftDel() 194 gapBuf.LeftDel() 195 gapBuf.LeftDel() 196 gapBuf.LeftDel() 197 gapBuf.LeftDel() 198 gapBuf.LeftDel() 199 gapBuf.LeftDel() 200 empty := gapBuf.String() 201 202 assert.Empty(t, empty, "Error, empty gap buffer isn't empty!") 203} 204 205func TestRightDelEverything(t *testing.T) { 206 t.Parallel() 207 208 gapBuf := gapbuffer.NewStr("Hello\nWorld!") 209 gapBuf.UpMv() 210 gapBuf.LeftMv() 211 gapBuf.LeftMv() 212 gapBuf.LeftMv() 213 gapBuf.LeftMv() 214 gapBuf.LeftMv() 215 gapBuf.RightDel() 216 gapBuf.RightDel() 217 gapBuf.RightDel() 218 gapBuf.RightDel() 219 gapBuf.RightDel() 220 gapBuf.RightDel() 221 gapBuf.RightDel() 222 gapBuf.RightDel() 223 gapBuf.RightDel() 224 gapBuf.RightDel() 225 gapBuf.RightDel() 226 gapBuf.RightDel() 227 gapBuf.RightDel() 228 gapBuf.RightDel() 229 gapBuf.RightDel() 230 empty := gapBuf.String() 231 232 assert.Empty(t, empty, "Error, empty gap buffer isn't empty!") 233}