diff --git a/spec/atom/line-wrapper-spec.coffee b/spec/atom/line-wrapper-spec.coffee index 8987f9577..49e86284c 100644 --- a/spec/atom/line-wrapper-spec.coffee +++ b/spec/atom/line-wrapper-spec.coffee @@ -7,7 +7,7 @@ ScreenLineFragment = require 'screen-line-fragment' _ = require 'underscore' describe "LineWrapper", -> - [wrapper, buffer, changeHandler] = [] + [wrapper, folder, buffer, changeHandler] = [] beforeEach -> buffer = new Buffer(require.resolve('fixtures/sample.js')) @@ -125,6 +125,11 @@ describe "LineWrapper", -> it "translates a position at the end of a wrapped screen line to the begining of the next screen line", -> expect(wrapper.screenPositionForBufferPosition([3, 51], true)).toEqual([4, 0]) + describe "when the position follows a fold", -> + it "adjusts the position to account for the fold", -> + fold = folder.createFold(new Range([4, 29], [7, 4])) + expect(wrapper.screenPositionForBufferPosition([7, 4])).toEqual [5, 32] + describe ".bufferPositionForScreenPosition(point)", -> it "translates the given screen position to a buffer position, account for wrapped lines", -> # before any wrapped lines @@ -138,6 +143,11 @@ describe "LineWrapper", -> # following a wrapped line expect(wrapper.bufferPositionForScreenPosition([5, 5])).toEqual([4, 5]) + describe "when the position follows a fold placeholder", -> + it "adjusts the position to account for the fold", -> + fold = folder.createFold(new Range([4, 29], [7, 4])) + expect(wrapper.bufferPositionForScreenPosition([5, 32])).toEqual [7, 4] + describe ".wrapScreenLine(screenLine)", -> makeTokens = (tokenValues...) -> tokenValues.map (value) -> { value, type: 'foo' } diff --git a/src/atom/line-wrapper.coffee b/src/atom/line-wrapper.coffee index b6c0830a1..2faa8b730 100644 --- a/src/atom/line-wrapper.coffee +++ b/src/atom/line-wrapper.coffee @@ -80,10 +80,13 @@ class LineWrapper @lineMap.screenRangeForBufferRange(bufferRange) screenPositionForBufferPosition: (bufferPosition, eagerWrap=true) -> - @lineMap.screenPositionForBufferPosition(bufferPosition, eagerWrap) + @lineMap.screenPositionForBufferPosition( + @lineFolder.screenPositionForBufferPosition(bufferPosition), + eagerWrap) bufferPositionForScreenPosition: (screenPosition) -> - @lineMap.bufferPositionForScreenPosition(screenPosition) + @lineFolder.bufferPositionForScreenPosition( + @lineMap.bufferPositionForScreenPosition(screenPosition)) lineForScreenRow: (screenRow) -> @linesForScreenRows(screenRow, screenRow)[0]