1(import (edward buffer))23(define (test-buffer name expected proc)4 (test name5 expected6 (let ((b (make-buffer)))7 (proc b)8 (buffer->list b))))910;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1112(test-group "append"13 (test-buffer "append start"14 '("foo" "bar")15 (lambda (b)16 (buffer-append! b 0 '("foo" "bar"))))1718 (test-buffer "append between"19 '("foo" "baz" "bar")20 (lambda (b)21 (buffer-append! b 0 '("foo" "bar"))22 (buffer-append! b 1 '("baz"))))2324 (test-buffer "append at end"25 '("foo" "123")26 (lambda (b)27 (buffer-append! b 0 '("foo"))28 (buffer-append! b 1 '("123")))))2930(test-group "buffer->list"31 (test "same start/end index"32 '()33 (let ((b (make-buffer)))34 (buffer-append! b 0 '("1" "2" "3"))35 (buffer->list b 1 1)))3637 (test "sublist in between"38 '("2" "3")39 (let ((b (make-buffer)))40 (buffer-append! b 0 '("1" "2" "3" "4" "5"))41 (buffer->list b 1 3)))4243 (test "sublist including end"44 '("4" "5")45 (let ((b (make-buffer)))46 (buffer-append! b 0 '("1" "2" "3" "4" "5"))47 (buffer->list b 3 5))))4849(test-group "remove"50 (test-buffer "remove start full"51 '()52 (lambda (b)53 (buffer-append! b 0 '("foo" "bar"))54 (buffer-remove! b 0 2)))5556 (test-buffer "remove start partial"57 '("bar")58 (lambda (b)59 (buffer-append! b 0 '("foo" "bar"))60 (buffer-remove! b 0 1)))6162 (test-buffer "remove between"63 '("foo" "bar")64 (lambda (b)65 (buffer-append! b 0 '("foo" "baz" "bar"))66 (buffer-remove! b 2 2)))6768 (test-buffer "remove last"69 '("foo" "baz")70 (lambda (b)71 (buffer-append! b 0 '("foo" "baz" "bar"))72 (buffer-remove! b 3 3))))7374(test-group "replace command"75 (test-buffer "replace single line"76 '("foo" "345" "bar")77 (lambda (b)78 (buffer-append! b 0 '("foo" "123" "bar"))79 (buffer-replace! b 2 2 '("345"))))8081 (test-buffer "replace multiple lines"82 '("foo" "bar")83 (lambda (b)84 (buffer-append! b 0 '("1" "2"))85 (buffer-replace! b 1 2 '("foo" "bar"))))8687 (test-buffer "replace add lines"88 '("foo" "bar" "baz")89 (lambda (b)90 (buffer-append! b 0 '("foo" "test test"))91 (buffer-replace! b 2 2 '("bar" "baz"))))9293 (test-buffer "buffer replace everything"94 '()95 (lambda (b)96 (buffer-append! b 0 '("foo" "bar" "baz"))97 (buffer-replace! b 1 3 '()))))9899(test-group "join command"100 (test-buffer "join entire buffer"101 '("foobar")102 (lambda (b)103 (buffer-append! b 0 '("foo" "bar"))104 (buffer-join! b 0 2)))105106 (test-buffer "join keep last"107 '("foobar" "baz")108 (lambda (b)109 (buffer-append! b 0 '("foo" "bar" "baz"))110 (buffer-join! b 1 2)))111112 (test-buffer "join keep first"113 '("foo" "barbaz")114 (lambda (b)115 (buffer-append! b 0 '("foo" "bar" "baz"))116 (buffer-join! b 2 3)))117118 (test-buffer "join betwen"119 '("foo" "123" "bar")120 (lambda (b)121 (buffer-append! b 0 '("foo" "1" "2" "3" "bar"))122 (buffer-join! b 2 4))))123124(test-group "move command"125 (test-buffer "move to end"126 '("bar" "baz" "foo")127 (lambda (b)128 (buffer-append! b 0 '("foo" "bar" "baz"))129 (buffer-move! b 2 3 0)))130131 (test-buffer "move to start"132 '("baz" "foo" "bar")133 (lambda (b)134 (buffer-append! b 0 '("foo" "bar" "baz"))135 (buffer-move! b 1 2 3)))136137 (test-buffer "move single to middle"138 '("foo" "123" "bar")139 (lambda (b)140 (buffer-append! b 0 '("foo" "bar" "123"))141 (buffer-move! b 3 3 1)))142143 (test-buffer "move multiple after destination"144 '("foo" "bar" "---" "t1" "t2" "end")145 (lambda (b)146 (buffer-append! b 0 '("foo" "t1" "t2" "bar" "---" "end"))147 (buffer-move! b 2 3 5)))148149 (test-buffer "move multiple before destination"150 '("foo" "t1" "t2" "bar" "---" "end")151 (lambda (b)152 (buffer-append! b 0 '("foo" "bar" "---" "t1" "t2" "end"))153 (buffer-move! b 4 5 1)))154155 (test-buffer "move everything"156 '("foo" "bar" "baz")157 (lambda (b)158 (buffer-append! b 0 '("foo" "bar" "baz"))159 (buffer-move! b 1 3 0))))160161162(test-group "undo command"163 (test-buffer "undo append"164 '()165 (lambda (b)166 (buffer-with-undo b167 (lambda ()168 (buffer-append! b 0 '("foo" "bar"))))169 (buffer-undo! b)))170171 (test-buffer "undo remove"172 '("foo" "bar" "baz")173 (lambda (b)174 (buffer-append! b 0 '("foo" "bar" "baz"))175 (buffer-with-undo b176 (lambda ()177 (buffer-remove! b 2 3)))178 (buffer-undo! b)))179180 (test-buffer "undo undo"181 '("foo" "bar")182 (lambda (b)183 (buffer-append! b 0 '("foo" "bar"))184 (buffer-undo! b) ;; undo append185 (buffer-undo! b))) ;; undo undo186187 (test-buffer "undo replace"188 '("foo" "bar")189 (lambda (b)190 (buffer-append! b 0 '("foo" "bar"))191 (buffer-with-undo b192 (lambda ()193 (buffer-replace! b 1 2 '("first" "second"))))194 (buffer-undo! b)))195196 (test-buffer "undo append last"197 '("foo" "bar")198 (lambda (b)199 (buffer-append! b 0 '("foo" "bar"))200 (buffer-with-undo b201 (lambda ()202 (buffer-append! b 2 '("second line"))))203 (buffer-undo! b)))204205 (test-buffer "undo replace last"206 '("foo" "bar")207 (lambda (b)208 (buffer-append! b 0 '("foo" "bar"))209 (buffer-with-undo b210 (lambda ()211 (buffer-replace! b 2 2 '("second line"))))212 (buffer-undo! b)))213214 (test-buffer "undo replace undo"215 '("test" "bar")216 (lambda (b)217 (buffer-append! b 0 '("foo" "bar"))218 (buffer-with-undo b219 (lambda ()220 (buffer-replace! b 1 1 '("test"))221 (buffer-undo! b) )) ;; undo replace222 (buffer-undo! b))) ;; undo undo223224 (test-buffer "undo replace nothing"225 '("foo" "bar")226 (lambda (b)227 (buffer-append! b 0 '("foo" "bar"))228 (buffer-with-undo b229 (lambda ()230 (buffer-replace! b 0 0 '())))231 (buffer-undo! b)))232233 (test-buffer "undo join"234 '("foo" "bar")235 (lambda (b)236 (buffer-append! b 0 '("foo" "bar"))237 (buffer-with-undo b238 (lambda ()239 (buffer-join! b 0 2)))240 (buffer-undo! b)))241242 (test-buffer "undo multiple"243 '("foo" "bar")244 (lambda (b)245 (buffer-append! b 0 '("foo" "bar"))246 (buffer-with-undo b247 (lambda ()248 (buffer-append! b 0 '("1"))249 (buffer-append! b 0 '("2"))250 (buffer-replace! b 0 0 '("0"))))251 (buffer-undo! b)))252253 (test-buffer "undo move"254 '("foo" "bar" "baz")255 (lambda (b)256 (buffer-append! b 0 '("foo" "bar" "baz"))257 (buffer-with-undo b258 (lambda ()259 (buffer-move! b 2 3 0)))260 (buffer-undo! b)))261262 (test "empty undo buffer"263 #f264 (let ((b (make-buffer)))265 (buffer-has-undo? b)))266267 (test "operation without buffer-undo"268 #f269 (let ((b (make-buffer)))270 (buffer-append! b 0 '("foo" "bar"))271 (buffer-has-undo? b)))272273 (test "non-empty undo buffer"274 #t275 (let ((b (make-buffer)))276 (buffer-with-undo b277 (lambda ()278 (buffer-append! b 0 '("foo" "bar" "baz"))))279 (buffer-has-undo? b))))