Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.

Commit b21a539

Browse files
author
Max Brunsfeld
committed
Merge pull request #81 from atom/mb-ns-rework-history
Rework history to make invariants easier to enfore
2 parents 5bd7eaa + f7b0f7f commit b21a539

File tree

4 files changed

+270
-86
lines changed

4 files changed

+270
-86
lines changed

spec/text-buffer-spec.coffee

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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!!\nworms\r\nhow 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\nworld\r\nhow are you doing?")

0 commit comments

Comments
 (0)