         runSetImmediateCallbacks()
         foldedLineNode = component.lineNodeForScreenRow(4)
         expect(foldedLineNode.querySelector('.fold-marker')).toBeFalsy()
-
-    describe "when line decorations are attached to markers", ->
-      {marker, decoration} = {}
-
-      beforeEach ->
-        marker = editor.displayBuffer.markBufferRange([[2, 13], [3, 15]], invalidate: 'inside')
-        decoration = {type: 'line', class: 'someclass'}
-        editor.addDecorationForMarker(marker, decoration)
-        runSetImmediateCallbacks()
-
-      it "does not render off-screen lines with decoration classes until they are with in the rendered row range", ->
-        node.style.height = 4.5 * lineHeightInPixels + 'px'
-        component.measureScrollView()
-        runSetImmediateCallbacks()
-
-        expect(component.lineNodeForScreenRow(9)).not.toBeDefined()
-
-        marker = editor.displayBuffer.markBufferRange([[9, 0], [9, 0]], invalidate: 'inside')
-        editor.addDecorationForMarker(marker, type: 'line', class: 'fancy-class')
-        editor.addDecorationForMarker(marker, type: 'gutter', class: 'nope-class')
-
-        verticalScrollbarNode.scrollTop = 2.5 * lineHeightInPixels
-        verticalScrollbarNode.dispatchEvent(new UIEvent('scroll'))
-        runSetImmediateCallbacks()
-
-        expect(lineHasClass(9, 'fancy-class')).toBe true
-        expect(lineHasClass(9, 'nope-class')).toBe false
-
-      it "renders the specified decoration class on the correct lines", ->
-        expect(lineHasClass(1, 'someclass')).toBe false
-        expect(lineHasClass(2, 'someclass')).toBe true
-        expect(lineHasClass(3, 'someclass')).toBe true
-        expect(lineHasClass(4, 'someclass')).toBe false
-
-      it "only renders 'onlyHead' decorations on lines containing the marker's head", ->
-        editor.addDecorationForMarker(marker, type: 'line', class: 'only-head', onlyHead: true)
-        runSetImmediateCallbacks()
-        expect(lineHasClass(1, 'only-head')).toBe false
-        expect(lineHasClass(2, 'only-head')).toBe false
-        expect(lineHasClass(3, 'only-head')).toBe true
-        expect(lineHasClass(4, 'only-head')).toBe false
-
-      it "only renders 'onlyEmpty' decorations on lines for which the marker is empty", ->
-        editor.addDecorationForMarker(marker, type: 'line', class: 'only-empty', onlyEmpty: true)
-        runSetImmediateCallbacks()
-        expect(lineHasClass(2, 'only-empty')).toBe false
-        expect(lineHasClass(3, 'only-empty')).toBe false
-
-        marker.clearTail()
-        runSetImmediateCallbacks()
-        expect(lineHasClass(2, 'only-empty')).toBe false
-        expect(lineHasClass(3, 'only-empty')).toBe true
-
-      it "only renders 'onlyNonEmpty' decorations on lines for which the marker is non-empty", ->
-        editor.addDecorationForMarker(marker, type: 'line', class: 'only-non-empty', onlyNonEmpty: true)
-        runSetImmediateCallbacks()
-        expect(lineHasClass(2, 'only-non-empty')).toBe true
-        expect(lineHasClass(3, 'only-non-empty')).toBe true
-
-        marker.clearTail()
-        runSetImmediateCallbacks()
-        expect(lineHasClass(2, 'only-non-empty')).toBe false
-        expect(lineHasClass(3, 'only-non-empty')).toBe false
-
-      it "removes line classes when a decoration's marker is invalidated", ->
-        editor.getBuffer().insert([3, 2], 'n')
-        runSetImmediateCallbacks()
-
-
-        expect(marker.isValid()).toBe false
-        expect(lineHasClass(1, 'someclass')).toBe false
-        expect(lineHasClass(2, 'someclass')).toBe false
-        expect(lineHasClass(3, 'someclass')).toBe false
-        expect(lineHasClass(4, 'someclass')).toBe false
-
-        editor.getBuffer().undo()
-        runSetImmediateCallbacks()
-
-        expect(marker.isValid()).toBe true
-        expect(lineHasClass(1, 'someclass')).toBe false
-        expect(lineHasClass(2, 'someclass')).toBe true
-        expect(lineHasClass(3, 'someclass')).toBe true
-        expect(lineHasClass(4, 'someclass')).toBe false
-
-      it "removes the classes and unsubscribes from the marker when decoration is removed", ->
-        editor.removeDecorationForMarker(marker, decoration)
-        runSetImmediateCallbacks()
-
-        expect(lineHasClass(1, 'someclass')).toBe false
-        expect(lineHasClass(2, 'someclass')).toBe false
-        expect(lineHasClass(3, 'someclass')).toBe false
-        expect(lineHasClass(4, 'someclass')).toBe false
-
-        editor.getBuffer().insert([0, 0], '\n')
-        runSetImmediateCallbacks()
-
-        expect(lineHasClass(2, 'someclass')).toBe false
-        expect(lineHasClass(3, 'someclass')).toBe false
-
-      it "removes the line number classes when the decoration's marker is destroyed", ->
-        marker.destroy()
-        runSetImmediateCallbacks()
-
-        expect(lineHasClass(1, 'someclass')).toBe false
-        expect(lineHasClass(2, 'someclass')).toBe false
-        expect(lineHasClass(3, 'someclass')).toBe false
-        expect(lineHasClass(4, 'someclass')).toBe false
 
   describe "gutter rendering", ->
     [gutter] = []

    clientY = gutterClientRect.top + positionOffset.top - editor.getScrollTop()
    {clientX, clientY}

  lineNumberHasClass = (screenRow, klass) ->
    component.lineNumberNodeForScreenRow(screenRow).classList.contains(klass)


          runSetImmediateCallbacks()
          expect(lineNumberHasClass(1, 'folded')).toBe false

  describe "cursor rendering", ->
    it "renders the currently visible cursors, translated relative to the scroll position", ->
      cursor1 = editor.getCursor()
