@@ -138,7 +138,7 @@ describe "TextBuffer", ->
138138 buffer .setTextInRange ([[0 , 10 ], [0 , 100 ]], " w" , {undo : ' skip' })
139139 expect (buffer .lineForRow (0 )).toBe " yellow"
140140
141- buffer .undo ()
141+ expect ( buffer .undo ()). toBe true
142142 expect (buffer .lineForRow (0 )).toBe " hellow"
143143
144144 describe " when the normalizeLineEndings argument is true (the default)" , ->
@@ -493,6 +493,44 @@ describe "TextBuffer", ->
493493 buffer .redo ()
494494 expect (buffer .getText ()).toBe " heyyyyy!!\n worms\r\n how are you doing?"
495495
496+ it " allows undo/redo within transactions, but not beyond the start of the containing transaction" , ->
497+ buffer .setText (" " )
498+ buffer .markPosition ([0 , 0 ])
499+
500+ buffer .append (" a" )
501+
502+ buffer .transact ->
503+ buffer .append (" b" )
504+ buffer .transact -> buffer .append (" c" )
505+ buffer .append (" d" )
506+
507+ expect (buffer .undo ()).toBe true
508+ expect (buffer .getText ()).toBe " abc"
509+
510+ expect (buffer .undo ()).toBe true
511+ expect (buffer .getText ()).toBe " ab"
512+
513+ expect (buffer .undo ()).toBe true
514+ expect (buffer .getText ()).toBe " a"
515+
516+ expect (buffer .undo ()).toBe false
517+ expect (buffer .getText ()).toBe " a"
518+
519+ expect (buffer .redo ()).toBe true
520+ expect (buffer .getText ()).toBe " ab"
521+
522+ expect (buffer .redo ()).toBe true
523+ expect (buffer .getText ()).toBe " abc"
524+
525+ expect (buffer .redo ()).toBe true
526+ expect (buffer .getText ()).toBe " abcd"
527+
528+ expect (buffer .redo ()).toBe false
529+ expect (buffer .getText ()).toBe " abcd"
530+
531+ expect (buffer .undo ()).toBe true
532+ expect (buffer .getText ()).toBe " a"
533+
496534 describe " checkpoints" , ->
497535 beforeEach ->
498536 buffer = new TextBuffer
@@ -525,6 +563,7 @@ describe "TextBuffer", ->
525563 buffer .append (" three\n " )
526564 buffer .append (" four" )
527565
566+ marker = buffer .markRange ([[0 , 1 ], [2 , 3 ]])
528567 result = buffer .groupChangesSinceCheckpoint (checkpoint)
529568
530569 expect (result).toBe true
@@ -546,6 +585,8 @@ describe "TextBuffer", ->
546585 four
547586 """
548587
588+ expect (marker .getRange ()).toEqual [[0 , 1 ], [2 , 3 ]]
589+
549590 it " skips any later checkpoints when grouping changes" , ->
550591 buffer .append (" one\n " )
551592 checkpoint = buffer .createCheckpoint ()
@@ -633,6 +674,22 @@ describe "TextBuffer", ->
633674 expect (buffer .revertToCheckpoint (checkpoint)).toBe (false )
634675 expect (buffer .getText ()).toBe (" world" )
635676
677+ it " does not allow changes based on checkpoints outside of the current transaction" , ->
678+ checkpoint = buffer .createCheckpoint ()
679+
680+ buffer .append (" a" )
681+
682+ buffer .transact ->
683+ expect (buffer .revertToCheckpoint (checkpoint)).toBe false
684+ expect (buffer .getText ()).toBe " a"
685+
686+ buffer .append (" b" )
687+
688+ expect (buffer .groupChangesSinceCheckpoint (checkpoint)).toBe false
689+
690+ buffer .undo ()
691+ expect (buffer .getText ()).toBe " a"
692+
636693 describe " ::getTextInRange(range)" , ->
637694 it " returns the text in a given range" , ->
638695 buffer = new TextBuffer (text : " hello\n world\r\n how are you doing?" )
0 commit comments