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  }