Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 31 additions & 8 deletions spec/text-buffer-io-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -160,21 +160,37 @@ describe('TextBuffer IO', () => {
})

it('notifies decoration layers and display layers of the change', (done) => {
fs.writeFileSync(filePath, 'abcdefghijk', 'utf8')
fs.writeFileSync(filePath, 'abcdefGHIJK', 'utf8')

const events = []

const displayLayer = buffer.addDisplayLayer()
displayLayer.onDidChange((event) => events.push(['display-layer', event]))

buffer.registerTextDecorationLayer({
bufferDidChange ({oldRange, newRange}) { events.push(['decoration-layer', {oldRange, newRange}]) }
bufferDidChange ({oldRange, newRange, oldText, newText}) {
events.push(['decoration-layer', {oldRange, newRange, oldText, newText}])
}
})

buffer.reload().then(() => {
expect(events).toEqual([
['decoration-layer', {oldRange: Range(Point(0, 7), Point(0, 7)), newRange: Range(Point(0, 7), Point(0, 11))}],
['display-layer', [{oldRange: Range(Point(0, 0), Point(1, 0)), newRange: Range(Point(0, 0), Point(1, 0))}]]
[
'decoration-layer',
{
oldRange: Range(Point(0, 6), Point(0, 7)),
newRange: Range(Point(0, 6), Point(0, 11)),
oldText: 'g',
newText: 'GHIJK'
}
],
[
'display-layer',
[{
oldRange: Range(Point(0, 0), Point(1, 0)),
newRange: Range(Point(0, 0), Point(1, 0))
}]
]
])
done()
})
Expand Down Expand Up @@ -214,11 +230,18 @@ describe('TextBuffer IO', () => {
fs.writeFileSync(filePath, 'abcdXefg', 'utf8')

{
const subscription = buffer.onDidChange(({changes}) => {
const subscription = buffer.onDidChange((event) => {
subscription.dispose()
expect(changes.length).toBe(1)
expect(changes[0].oldText).toBe('')
expect(changes[0].newText).toBe('X')

// Legacy properties
expect(event.oldRange).toEqual(Range(Point(0, 4), Point(0, 4)))
expect(event.newRange).toEqual(Range(Point(0, 4), Point(0, 5)))
expect(event.oldText).toBe('')
expect(event.newText).toBe('X')

expect(event.changes.length).toBe(1)
expect(event.changes[0].oldText).toBe('')
expect(event.changes[0].newText).toBe('X')
buffer.setText('')
})
}
Expand Down
10 changes: 4 additions & 6 deletions src/text-buffer.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class TransactionAbortedError extends Error

class ChangeEvent
constructor: (buffer, changes) ->
@changes = changes
@changes = Object.freeze(normalizePatchChanges(changes))

start = changes[0].oldStart
oldEnd = changes[changes.length - 1].oldEnd
Expand All @@ -41,8 +41,8 @@ class ChangeEvent
for change in changes by -1
oldBuffer.setTextInRange(
new Range(
traversal(change.newRange.start, start),
traversal(change.newRange.end, start)
traversal(change.newStart, start),
traversal(change.newEnd, start)
),
change.oldText
)
Expand Down Expand Up @@ -1910,9 +1910,7 @@ class TextBuffer
emitDidChangeTextEvent: ->
if @transactCallDepth is 0
if @changesSinceLastDidChangeTextEvent.length > 0
compactedChanges = Object.freeze(normalizePatchChanges(
patchFromChanges(@changesSinceLastDidChangeTextEvent).getChanges()
))
compactedChanges = patchFromChanges(@changesSinceLastDidChangeTextEvent).getChanges()
@changesSinceLastDidChangeTextEvent.length = 0
if compactedChanges.length > 0
@emitter.emit 'did-change-text', new ChangeEvent(this, compactedChanges)
Expand Down