github.com/jmigpin/editor@v1.6.0/util/iout/iorw/rwundo/rwundo_test.go (about) 1 package rwundo 2 3 import ( 4 "testing" 5 6 "github.com/jmigpin/editor/util/iout/iorw" 7 "github.com/jmigpin/editor/util/iout/iorw/rwedit" 8 ) 9 10 //godebug:annotatepackage 11 12 func TestRWUndo1(t *testing.T) { 13 s1 := "0123456789" 14 rw := iorw.NewBytesReadWriterAt([]byte(s1)) 15 h := NewHistory(10) 16 rwu := NewRWUndo(rw, h) 17 18 gets := func() string { 19 b, _ := iorw.ReadFastFull(rwu) 20 return string(b) 21 } 22 23 rwu.OverwriteAt(3, 2, []byte("---")) // "012---56789" 24 rwu.OverwriteAt(7, 0, []byte("+++")) // "012---5+++6789" 25 26 exp := "012---5+++6789" 27 28 s2 := gets() 29 if s2 != exp { 30 t.Fatal(exp, "got", s2) 31 } 32 33 rwu.undo() 34 rwu.undo() 35 36 s3 := gets() 37 if s3 != s1 { 38 t.Fatal(s1, "got", s3) 39 } 40 41 rwu.redo() 42 rwu.redo() 43 44 s4 := gets() 45 if s4 != s2 { 46 t.Fatal(s2, "got", s4) 47 } 48 49 rwu.undo() 50 51 rwu.OverwriteAt(5, 4, []byte("***")) 52 53 exp2 := "012--***89" 54 s5 := gets() 55 if s5 != exp2 { 56 t.Fatal(exp2, "got", s5) 57 } 58 59 rwu.redo() 60 rwu.redo() 61 rwu.redo() 62 s6 := gets() 63 if s6 != exp2 { 64 t.Fatal(exp2, "got", s6) 65 } 66 67 for i := 0; i < 10; i++ { 68 rwu.undo() 69 } 70 s7 := gets() 71 if s7 != s1 { 72 t.Fatal(s1, "got", s7) 73 } 74 } 75 76 func TestRWUndo2(t *testing.T) { 77 s1 := "0123456789" 78 rw := iorw.NewBytesReadWriterAt([]byte(s1)) 79 h := NewHistory(10) 80 rwu := NewRWUndo(rw, h) 81 82 gets := func() string { 83 b, _ := iorw.ReadFastFull(rwu) 84 return string(b) 85 } 86 87 rwu.OverwriteAt(3, 2, nil) // "01256789" 88 rwu.OverwriteAt(7, 1, nil) // "0125678" 89 rwu.OverwriteAt(4, 1, nil) // "012578" 90 91 exp2 := "012578" 92 s2 := gets() 93 if s2 != exp2 { 94 t.Fatal(exp2, "got", s2) 95 } 96 97 rwu.undo() 98 99 exp3 := "0125678" 100 s3 := gets() 101 if s3 != exp3 { 102 t.Fatal(exp3, "got", s3) 103 } 104 } 105 106 func TestRWUndo3(t *testing.T) { 107 s1 := "0123456789" 108 rw := iorw.NewBytesReadWriterAt([]byte(s1)) 109 h := NewHistory(10) 110 rwu := NewRWUndo(rw, h) 111 112 gets := func() string { 113 b, _ := iorw.ReadFastFull(rwu) 114 return string(b) 115 } 116 117 rwu.OverwriteAt(3, 2, nil) // "01256789" 118 rwu.History.BeginUndoGroup(rwedit.SimpleCursor{}) 119 rwu.OverwriteAt(7, 1, nil) // "0125678" 120 rwu.OverwriteAt(4, 1, nil) // "012578" 121 rwu.History.EndUndoGroup(rwedit.SimpleCursor{}) 122 123 rwu.undo() 124 125 exp2 := "01256789" 126 s2 := gets() 127 if s2 != exp2 { 128 t.Fatal(exp2, "got", s2) 129 } 130 } 131 132 func TestRWUndo4(t *testing.T) { 133 s1 := "0123456789" 134 rw := iorw.NewBytesReadWriterAt([]byte(s1)) 135 h := NewHistory(10) 136 rwu := NewRWUndo(rw, h) 137 138 gets := func() string { 139 b, _ := iorw.ReadFastFull(rwu) 140 return string(b) 141 } 142 143 rwu.History.BeginUndoGroup(rwedit.SimpleCursor{}) 144 rwu.OverwriteAt(3, 2, nil) // "01256789" 145 rwu.OverwriteAt(7, 1, nil) // "0125678" 146 rwu.OverwriteAt(4, 1, nil) // "012578" 147 rwu.History.EndUndoGroup(rwedit.SimpleCursor{}) 148 149 rwu.undo() 150 151 exp2 := "0123456789" 152 s2 := gets() 153 if s2 != exp2 { 154 t.Fatal(exp2, "got", s2) 155 } 156 } 157 158 func TestRWUndo5(t *testing.T) { 159 s1 := "0123456789" 160 rw := iorw.NewBytesReadWriterAt([]byte(s1)) 161 h := NewHistory(10) 162 rwu := NewRWUndo(rw, h) 163 164 gets := func() string { 165 b, _ := iorw.ReadFastFull(rwu) 166 return string(b) 167 } 168 169 rwu.OverwriteAt(3, 2, nil) // "01256789" 170 rwu.OverwriteAt(7, 1, nil) // "0125678" 171 rwu.OverwriteAt(4, 1, nil) // "012578" 172 173 rwu.undo() 174 rwu.History.ClearUndones() 175 rwu.redo() 176 177 exp2 := "0125678" 178 s2 := gets() 179 if s2 != exp2 { 180 t.Fatal(exp2, "got", s2) 181 } 182 } 183 184 func TestRWUndo6(t *testing.T) { 185 s1 := "0123456789" 186 rw := iorw.NewBytesReadWriterAt([]byte(s1)) 187 h := NewHistory(10) 188 rwu := NewRWUndo(rw, h) 189 190 gets := func() string { 191 b, _ := iorw.ReadFastFull(rwu) 192 return string(b) 193 } 194 195 rwu.OverwriteAt(3, 2, nil) // "01256789" 196 rwu.OverwriteAt(7, 1, nil) // "0125678" 197 rwu.OverwriteAt(4, 1, nil) // "012578" 198 199 rwu.undo() 200 rwu.undo() 201 202 rwu.OverwriteAt(3, 2, []byte("-")) // "012-789" 203 rwu.OverwriteAt(5, 0, []byte("-")) // "012-7-89" 204 205 exp2 := "012-7-89" 206 s2 := gets() 207 if s2 != exp2 { 208 t.Fatal(exp2, "got", s2) 209 } 210 211 //rwu.Redo() 212 //rwu.Redo() 213 //rwu.Redo() 214 215 //exp3 := exp2 216 //s3 := gets() 217 //if s3 != exp3 { 218 // t.Fatal(exp3, "got", s3) 219 //} 220 221 rwu.undo() 222 rwu.undo() 223 224 exp4 := "01256789" 225 s4 := gets() 226 if s4 != exp4 { 227 t.Fatal(exp4, "got", s4) 228 } 229 230 rwu.undo() 231 232 s5 := gets() 233 if s5 != s1 { 234 t.Fatal(s1, "got", s5) 235 } 236 }