diff --git a/spec/app/display-buffer-spec.coffee b/spec/app/display-buffer-spec.coffee index cbb27cd42..8222f9386 100644 --- a/spec/app/display-buffer-spec.coffee +++ b/spec/app/display-buffer-spec.coffee @@ -142,89 +142,6 @@ describe "DisplayBuffer", -> expect(changeHandler).toHaveBeenCalledWith(start: 0, end: 15, screenDelta: 3, bufferDelta: 0) - describe "structural folding", -> - describe ".unfoldAll()", -> - it "unfolds every folded line", -> - displayBuffer.foldBufferRow(0) - displayBuffer.foldBufferRow(1) - - displayBuffer.unfoldAll() - expect(Object.keys(displayBuffer.activeFolds).length).toBe 0 - - describe ".foldAll()", -> - it "folds every foldable line", -> - displayBuffer.foldAll() - fold = displayBuffer.lineForRow(0).fold - expect(fold).toBeDefined() - expect([fold.startRow, fold.endRow]).toEqual [0,12] - - expect(Object.keys(displayBuffer.activeFolds).length).toBe(3) - expect(displayBuffer.activeFolds[1].length).toBe(1) - expect(displayBuffer.activeFolds[4].length).toBe(1) - - it "doesn't fold lines that are already folded", -> - displayBuffer.foldBufferRow(4) - displayBuffer.foldAll() - expect(Object.keys(displayBuffer.activeFolds).length).toBe(3) - expect(displayBuffer.activeFolds[0].length).toBe(1) - expect(displayBuffer.activeFolds[1].length).toBe(1) - expect(displayBuffer.activeFolds[4].length).toBe(1) - - describe ".foldBufferRow(bufferRow)", -> - describe "when bufferRow can be folded", -> - it "creates a fold based on the syntactic region starting at the given row", -> - displayBuffer.foldBufferRow(1) - fold = displayBuffer.lineForRow(1).fold - expect(fold.startRow).toBe 1 - expect(fold.endRow).toBe 9 - - describe "when bufferRow can't be folded", -> - it "searches upward for the first row that begins a syntatic region containing the given buffer row (and folds it)", -> - displayBuffer.foldBufferRow(8) - fold = displayBuffer.lineForRow(1).fold - expect(fold.startRow).toBe 1 - expect(fold.endRow).toBe 9 - - describe "when the bufferRow is already folded", -> - it "searches upward for the first row that begins a syntatic region containing the folded row (and folds it)", -> - displayBuffer.foldBufferRow(2) - expect(displayBuffer.lineForRow(1).fold).toBeDefined() - expect(displayBuffer.lineForRow(0).fold).not.toBeDefined() - - displayBuffer.foldBufferRow(1) - expect(displayBuffer.lineForRow(0).fold).toBeDefined() - - describe "when the bufferRow is in a multi-line comment", -> - it "searches upward and downward for surrounding comment lines and folds them as a single fold", -> - buffer.insert([1,0], " //this is a comment\n // and\n //more docs\n\n//second comment") - displayBuffer.foldBufferRow(1) - fold = displayBuffer.lineForRow(1).fold - expect(fold.startRow).toBe 1 - expect(fold.endRow).toBe 3 - - describe "when the bufferRow is a single-line comment", -> - it "searches upward for the first row that begins a syntatic region containing the folded row (and folds it)", -> - buffer.insert([1,0], " //this is a single line comment\n") - displayBuffer.foldBufferRow(1) - fold = displayBuffer.lineForRow(0).fold - expect(fold.startRow).toBe 0 - expect(fold.endRow).toBe 13 - - describe ".unfoldBufferRow(bufferRow)", -> - describe "when bufferRow can be unfolded", -> - it "destroys a fold based on the syntactic region starting at the given row", -> - displayBuffer.foldBufferRow(1) - expect(displayBuffer.lineForRow(1).fold).toBeDefined() - - displayBuffer.unfoldBufferRow(1) - expect(displayBuffer.lineForRow(1).fold).toBeUndefined() - - describe "when bufferRow can't be unfolded", -> - it "does not throw an error", -> - expect(displayBuffer.lineForRow(1).fold).toBeUndefined() - displayBuffer.unfoldBufferRow(1) - expect(displayBuffer.lineForRow(1).fold).toBeUndefined() - describe "primitive folding", -> editSession2 = null diff --git a/spec/app/edit-session-spec.coffee b/spec/app/edit-session-spec.coffee index 631493965..f94c592b3 100644 --- a/spec/app/edit-session-spec.coffee +++ b/spec/app/edit-session-spec.coffee @@ -2111,11 +2111,89 @@ describe "EditSession", -> expect(cursor3.getBufferPosition()).toEqual [1,2] describe "folding", -> - describe "structural folding", -> - it "maintains cursor buffer position when a fold is created/destroyed", -> - editSession.setCursorBufferPosition([5,5]) + describe ".unfoldAll()", -> + it "unfolds every folded line", -> + initialScreenLineCount = editSession.getScreenLineCount() + editSession.foldBufferRow(0) + editSession.foldBufferRow(1) + expect(editSession.getScreenLineCount()).toBeLessThan initialScreenLineCount + editSession.unfoldAll() + expect(editSession.getScreenLineCount()).toBe initialScreenLineCount + + describe ".foldAll()", -> + it "folds every foldable line", -> editSession.foldAll() - expect(editSession.getCursorBufferPosition()).toEqual([5,5]) + + fold1 = editSession.lineForScreenRow(0).fold + expect([fold1.startRow, fold1.endRow]).toEqual [0, 12] + fold1.destroy() + + fold2 = editSession.lineForScreenRow(1).fold + expect([fold2.startRow, fold2.endRow]).toEqual [1, 9] + fold2.destroy() + + fold3 = editSession.lineForScreenRow(4).fold + expect([fold3.startRow, fold3.endRow]).toEqual [4, 7] + + describe ".foldBufferRow(bufferRow)", -> + describe "when bufferRow can be folded", -> + it "creates a fold based on the syntactic region starting at the given row", -> + editSession.foldBufferRow(1) + fold = editSession.lineForScreenRow(1).fold + expect(fold.startRow).toBe 1 + expect(fold.endRow).toBe 9 + + describe "when bufferRow can't be folded", -> + it "searches upward for the first row that begins a syntatic region containing the given buffer row (and folds it)", -> + editSession.foldBufferRow(8) + fold = editSession.lineForScreenRow(1).fold + expect(fold.startRow).toBe 1 + expect(fold.endRow).toBe 9 + + describe "when the bufferRow is already folded", -> + it "searches upward for the first row that begins a syntatic region containing the folded row (and folds it)", -> + editSession.foldBufferRow(2) + expect(editSession.lineForScreenRow(1).fold).toBeDefined() + expect(editSession.lineForScreenRow(0).fold).not.toBeDefined() + + editSession.foldBufferRow(1) + expect(editSession.lineForScreenRow(0).fold).toBeDefined() + + describe "when the bufferRow is in a multi-line comment", -> + it "searches upward and downward for surrounding comment lines and folds them as a single fold", -> + buffer.insert([1,0], " //this is a comment\n // and\n //more docs\n\n//second comment") + editSession.foldBufferRow(1) + fold = editSession.lineForScreenRow(1).fold + expect(fold.startRow).toBe 1 + expect(fold.endRow).toBe 3 + + describe "when the bufferRow is a single-line comment", -> + it "searches upward for the first row that begins a syntatic region containing the folded row (and folds it)", -> + buffer.insert([1,0], " //this is a single line comment\n") + editSession.foldBufferRow(1) + fold = editSession.lineForScreenRow(0).fold + expect(fold.startRow).toBe 0 + expect(fold.endRow).toBe 13 + + describe ".unfoldBufferRow(bufferRow)", -> + describe "when bufferRow can be unfolded", -> + it "destroys a fold based on the syntactic region starting at the given row", -> + editSession.foldBufferRow(1) + expect(editSession.lineForScreenRow(1).fold).toBeDefined() + + editSession.unfoldBufferRow(1) + expect(editSession.lineForScreenRow(1).fold).toBeUndefined() + + describe "when bufferRow can't be unfolded", -> + it "does not throw an error", -> + expect(editSession.lineForScreenRow(1).fold).toBeUndefined() + editSession.unfoldBufferRow(1) + expect(editSession.lineForScreenRow(1).fold).toBeUndefined() + + it "maintains cursor buffer position when a folding/unfolding", -> + editSession.setCursorBufferPosition([5,5]) + editSession.foldAll() + expect(editSession.getCursorBufferPosition()).toEqual([5,5]) describe ".deleteLine()", -> it "deletes the first line when the cursor is there", ->