From 3e7de735804ae7709ecef671b922e7fa00db5a59 Mon Sep 17 00:00:00 2001 From: joshaber Date: Fri, 12 Feb 2016 09:58:37 -0500 Subject: [PATCH 01/11] Bump the timeout. --- spec/text-editor-presenter-spec.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index 9253ff103..90ef56da0 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -91,7 +91,7 @@ describe "TextEditorPresenter", -> expectNoStateUpdate = (presenter, fn) -> expectStateUpdatedToBe(false, presenter, fn) waitsForStateToUpdate = (presenter, fn) -> - waitsFor "presenter state to update", 1000, (done) -> + waitsFor "presenter state to update", 2000, (done) -> fn?() disposable = presenter.onDidUpdateState -> disposable.dispose() From dd6a6be8b19315b65f5d39cd75957fefc98e33f8 Mon Sep 17 00:00:00 2001 From: joshaber Date: Fri, 12 Feb 2016 10:56:36 -0500 Subject: [PATCH 02/11] Once more, with feeling. --- spec/text-editor-presenter-spec.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index 90ef56da0..d16e8dff4 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -91,7 +91,7 @@ describe "TextEditorPresenter", -> expectNoStateUpdate = (presenter, fn) -> expectStateUpdatedToBe(false, presenter, fn) waitsForStateToUpdate = (presenter, fn) -> - waitsFor "presenter state to update", 2000, (done) -> + waitsFor "presenter state to update", 5000, (done) -> fn?() disposable = presenter.onDidUpdateState -> disposable.dispose() From a3ec51f492272fdf69e9660bec552e97773e811d Mon Sep 17 00:00:00 2001 From: joshaber Date: Fri, 12 Feb 2016 11:46:43 -0500 Subject: [PATCH 03/11] Let's try rearranging this. --- spec/text-editor-presenter-spec.coffee | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index d16e8dff4..0c60ce30b 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -90,6 +90,15 @@ describe "TextEditorPresenter", -> expectNoStateUpdate = (presenter, fn) -> expectStateUpdatedToBe(false, presenter, fn) + waitsForStateToUpdate2 = (presenter, fn) -> + didUpdate = false + disposable = presenter.onDidUpdateState -> + disposable.dispose() + didUpdate = true + fn?() + waitsFor "presenter state to update", 5000, (done) -> + didUpdate + waitsForStateToUpdate = (presenter, fn) -> waitsFor "presenter state to update", 5000, (done) -> fn?() @@ -1680,7 +1689,7 @@ describe "TextEditorPresenter", -> blockDecoration1 = addBlockDecorationBeforeScreenRow(0) blockDecoration2 = addBlockDecorationBeforeScreenRow(1) - waitsForStateToUpdate presenter, -> + waitsForStateToUpdate2 presenter, -> presenter.setBlockDecorationDimensions(blockDecoration1, 0, 30) presenter.setBlockDecorationDimensions(blockDecoration2, 0, 10) @@ -1691,7 +1700,7 @@ describe "TextEditorPresenter", -> expect(stateForCursor(presenter, 3)).toBeUndefined() expect(stateForCursor(presenter, 4)).toBeUndefined() - waitsForStateToUpdate presenter, -> + waitsForStateToUpdate2 presenter, -> blockDecoration2.destroy() editor.setCursorBufferPosition([0, 0]) editor.insertNewline() From 07d35245e0cc716253ba520ffeaab6c2ebf30f19 Mon Sep 17 00:00:00 2001 From: joshaber Date: Fri, 12 Feb 2016 11:51:48 -0500 Subject: [PATCH 04/11] Move it around again. --- spec/text-editor-presenter-spec.coffee | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index 0c60ce30b..d8f98afd2 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -91,13 +91,11 @@ describe "TextEditorPresenter", -> expectNoStateUpdate = (presenter, fn) -> expectStateUpdatedToBe(false, presenter, fn) waitsForStateToUpdate2 = (presenter, fn) -> - didUpdate = false - disposable = presenter.onDidUpdateState -> - disposable.dispose() - didUpdate = true - fn?() waitsFor "presenter state to update", 5000, (done) -> - didUpdate + disposable = presenter.onDidUpdateState -> + disposable.dispose() + process.nextTick(done) + fn?() waitsForStateToUpdate = (presenter, fn) -> waitsFor "presenter state to update", 5000, (done) -> From 319043c93d230eb625ef5cb1041eb03a7e77ba06 Mon Sep 17 00:00:00 2001 From: joshaber Date: Fri, 12 Feb 2016 12:11:52 -0500 Subject: [PATCH 05/11] Update this test too. --- spec/text-editor-presenter-spec.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index d8f98afd2..8251a9593 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -3467,9 +3467,9 @@ describe "TextEditorPresenter", -> gutterName: 'test-gutter-2' class: 'test-class' marker4 = editor.markBufferRange([[0, 0], [1, 0]]) - decoration4 = editor.decorateMarker(marker4, decorationParams) + decoration4 = null - waitsForStateToUpdate presenter + waitsForStateToUpdate2 presenter, -> decoration4 = editor.decorateMarker(marker4, decorationParams) runs -> expectStateUpdate presenter, -> editor.addGutter({name: 'test-gutter-2'}) From 8b14f5afdcedc20d7688e910d782db411f5a703c Mon Sep 17 00:00:00 2001 From: joshaber Date: Fri, 12 Feb 2016 13:58:38 -0500 Subject: [PATCH 06/11] Let's get some deterministic failures. --- spec/text-editor-presenter-spec.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index 8251a9593..b3fd46048 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -20,6 +20,7 @@ describe "TextEditorPresenter", -> buffer = new TextBuffer(filePath: require.resolve('./fixtures/sample.js')) editor = atom.workspace.buildTextEditor({buffer}) + editor.setUpdatedSynchronously(true) waitsForPromise -> buffer.load() afterEach -> From 272ff19d7ba6acf35e7abb68abaf846601f90bd6 Mon Sep 17 00:00:00 2001 From: joshaber Date: Fri, 12 Feb 2016 13:58:54 -0500 Subject: [PATCH 07/11] Decrease the timeout interval. --- spec/text-editor-presenter-spec.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index b3fd46048..3d775bda9 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -92,14 +92,14 @@ describe "TextEditorPresenter", -> expectNoStateUpdate = (presenter, fn) -> expectStateUpdatedToBe(false, presenter, fn) waitsForStateToUpdate2 = (presenter, fn) -> - waitsFor "presenter state to update", 5000, (done) -> + waitsFor "presenter state to update", 1000, (done) -> disposable = presenter.onDidUpdateState -> disposable.dispose() process.nextTick(done) fn?() waitsForStateToUpdate = (presenter, fn) -> - waitsFor "presenter state to update", 5000, (done) -> + waitsFor "presenter state to update", 1000, (done) -> fn?() disposable = presenter.onDidUpdateState -> disposable.dispose() From 6813bf50a058509fdc089da527d402cf3f2fc44e Mon Sep 17 00:00:00 2001 From: joshaber Date: Fri, 12 Feb 2016 14:00:47 -0500 Subject: [PATCH 08/11] Use waitsForStateToUpdateAsync in a bunch of places. --- spec/text-editor-presenter-spec.coffee | 63 +++++++++++++------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index 3d775bda9..c3abeb062 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -91,7 +91,7 @@ describe "TextEditorPresenter", -> expectNoStateUpdate = (presenter, fn) -> expectStateUpdatedToBe(false, presenter, fn) - waitsForStateToUpdate2 = (presenter, fn) -> + waitsForStateToUpdateAsync = (presenter, fn) -> waitsFor "presenter state to update", 1000, (done) -> disposable = presenter.onDidUpdateState -> disposable.dispose() @@ -1480,9 +1480,9 @@ describe "TextEditorPresenter", -> decoration1 = editor.decorateMarker(marker1, type: 'line', class: 'a') presenter = buildPresenter() marker2 = editor.addMarkerLayer(maintainHistory: true).markBufferRange([[4, 0], [6, 2]], invalidate: 'touch') - decoration2 = editor.decorateMarker(marker2, type: 'line', class: 'b') + decoration2 = null - waitsForStateToUpdate presenter + waitsForStateToUpdateAsync presenter, -> decoration2 = editor.decorateMarker(marker2, type: 'line', class: 'b') runs -> expect(lineStateForScreenRow(presenter, 3).decorationClasses).toBeNull() expect(lineStateForScreenRow(presenter, 4).decorationClasses).toEqual ['a', 'b'] @@ -1490,14 +1490,14 @@ describe "TextEditorPresenter", -> expect(lineStateForScreenRow(presenter, 6).decorationClasses).toEqual ['a', 'b'] expect(lineStateForScreenRow(presenter, 7).decorationClasses).toBeNull() - waitsForStateToUpdate presenter, -> editor.getBuffer().insert([5, 0], 'x') + waitsForStateToUpdateAsync presenter, -> editor.getBuffer().insert([5, 0], 'x') runs -> expect(marker1.isValid()).toBe false expect(lineStateForScreenRow(presenter, 4).decorationClasses).toBeNull() expect(lineStateForScreenRow(presenter, 5).decorationClasses).toBeNull() expect(lineStateForScreenRow(presenter, 6).decorationClasses).toBeNull() - waitsForStateToUpdate presenter, -> editor.undo() + waitsForStateToUpdateAsync presenter, -> editor.undo() runs -> expect(lineStateForScreenRow(presenter, 3).decorationClasses).toBeNull() expect(lineStateForScreenRow(presenter, 4).decorationClasses).toEqual ['a', 'b'] @@ -1505,7 +1505,7 @@ describe "TextEditorPresenter", -> expect(lineStateForScreenRow(presenter, 6).decorationClasses).toEqual ['a', 'b'] expect(lineStateForScreenRow(presenter, 7).decorationClasses).toBeNull() - waitsForStateToUpdate presenter, -> marker1.setBufferRange([[2, 0], [4, 2]]) + waitsForStateToUpdateAsync presenter, -> marker1.setBufferRange([[2, 0], [4, 2]]) runs -> expect(lineStateForScreenRow(presenter, 1).decorationClasses).toBeNull() expect(lineStateForScreenRow(presenter, 2).decorationClasses).toEqual ['a'] @@ -1515,7 +1515,7 @@ describe "TextEditorPresenter", -> expect(lineStateForScreenRow(presenter, 6).decorationClasses).toEqual ['b'] expect(lineStateForScreenRow(presenter, 7).decorationClasses).toBeNull() - waitsForStateToUpdate presenter, -> decoration1.destroy() + waitsForStateToUpdateAsync presenter, -> decoration1.destroy() runs -> expect(lineStateForScreenRow(presenter, 2).decorationClasses).toBeNull() expect(lineStateForScreenRow(presenter, 3).decorationClasses).toBeNull() @@ -1524,7 +1524,7 @@ describe "TextEditorPresenter", -> expect(lineStateForScreenRow(presenter, 6).decorationClasses).toEqual ['b'] expect(lineStateForScreenRow(presenter, 7).decorationClasses).toBeNull() - waitsForStateToUpdate presenter, -> marker2.destroy() + waitsForStateToUpdateAsync presenter, -> marker2.destroy() runs -> expect(lineStateForScreenRow(presenter, 2).decorationClasses).toBeNull() expect(lineStateForScreenRow(presenter, 3).decorationClasses).toBeNull() @@ -1688,7 +1688,7 @@ describe "TextEditorPresenter", -> blockDecoration1 = addBlockDecorationBeforeScreenRow(0) blockDecoration2 = addBlockDecorationBeforeScreenRow(1) - waitsForStateToUpdate2 presenter, -> + waitsForStateToUpdateAsync presenter, -> presenter.setBlockDecorationDimensions(blockDecoration1, 0, 30) presenter.setBlockDecorationDimensions(blockDecoration2, 0, 10) @@ -1699,7 +1699,7 @@ describe "TextEditorPresenter", -> expect(stateForCursor(presenter, 3)).toBeUndefined() expect(stateForCursor(presenter, 4)).toBeUndefined() - waitsForStateToUpdate2 presenter, -> + waitsForStateToUpdateAsync presenter, -> blockDecoration2.destroy() editor.setCursorBufferPosition([0, 0]) editor.insertNewline() @@ -2216,8 +2216,9 @@ describe "TextEditorPresenter", -> presenter = buildPresenter(explicitHeight: 30, scrollTop: 20, tileSize: 2) marker = editor.markBufferPosition([2, 2]) - highlight = editor.decorateMarker(marker, type: 'highlight', class: 'a') - waitsForStateToUpdate presenter, -> + highlight = null + waitsForStateToUpdateAsync presenter, -> + highlight = editor.decorateMarker(marker, type: 'highlight', class: 'a') marker.setBufferRange([[2, 2], [5, 2]]) highlight.flash('b', 500) runs -> @@ -2232,7 +2233,7 @@ describe "TextEditorPresenter", -> flashCount: 1 } - waitsForStateToUpdate presenter, -> highlight.flash('c', 600) + waitsForStateToUpdateAsync presenter, -> highlight.flash('c', 600) runs -> expectValues stateForHighlightInTile(presenter, highlight, 2), { flashClass: 'c' @@ -2479,7 +2480,7 @@ describe "TextEditorPresenter", -> } # Change range - waitsForStateToUpdate presenter, -> marker.setBufferRange([[2, 13], [4, 6]]) + waitsForStateToUpdateAsync presenter, -> marker.setBufferRange([[2, 13], [4, 6]]) runs -> expectValues stateForOverlay(presenter, decoration), { item: item @@ -2487,12 +2488,12 @@ describe "TextEditorPresenter", -> } # Valid -> invalid - waitsForStateToUpdate presenter, -> editor.getBuffer().insert([2, 14], 'x') + waitsForStateToUpdateAsync presenter, -> editor.getBuffer().insert([2, 14], 'x') runs -> expect(stateForOverlay(presenter, decoration)).toBeUndefined() # Invalid -> valid - waitsForStateToUpdate presenter, -> editor.undo() + waitsForStateToUpdateAsync presenter, -> editor.undo() runs -> expectValues stateForOverlay(presenter, decoration), { item: item @@ -2500,7 +2501,7 @@ describe "TextEditorPresenter", -> } # Reverse direction - waitsForStateToUpdate presenter, -> marker.setBufferRange([[2, 13], [4, 6]], reversed: true) + waitsForStateToUpdateAsync presenter, -> marker.setBufferRange([[2, 13], [4, 6]], reversed: true) runs -> expectValues stateForOverlay(presenter, decoration), { item: item @@ -2508,13 +2509,13 @@ describe "TextEditorPresenter", -> } # Destroy - waitsForStateToUpdate presenter, -> decoration.destroy() + waitsForStateToUpdateAsync presenter, -> decoration.destroy() runs -> expect(stateForOverlay(presenter, decoration)).toBeUndefined() # Add decoration2 = null - waitsForStateToUpdate presenter, -> decoration2 = editor.decorateMarker(marker, {type: 'overlay', item}) + waitsForStateToUpdateAsync presenter, -> decoration2 = editor.decorateMarker(marker, {type: 'overlay', item}) runs -> expectValues stateForOverlay(presenter, decoration2), { item: item @@ -2979,7 +2980,7 @@ describe "TextEditorPresenter", -> presenter.setBlockDecorationDimensions(blockDecoration5, 0, 50) presenter.setBlockDecorationDimensions(blockDecoration6, 0, 60) - waitsForStateToUpdate presenter + waitsForStateToUpdateAsync presenter, -> presenter.setBlockDecorationDimensions(blockDecoration6, 0, 60) runs -> expect(lineNumberStateForScreenRow(presenter, 0).blockDecorationsHeight).toBe(10) expect(lineNumberStateForScreenRow(presenter, 1).blockDecorationsHeight).toBe(0) @@ -2994,7 +2995,7 @@ describe "TextEditorPresenter", -> expect(lineNumberStateForScreenRow(presenter, 10).blockDecorationsHeight).toBe(0) expect(lineNumberStateForScreenRow(presenter, 11).blockDecorationsHeight).toBe(60) - waitsForStateToUpdate presenter, -> + waitsForStateToUpdateAsync presenter, -> blockDecoration1.getMarker().setHeadBufferPosition([1, 0]) blockDecoration2.getMarker().setHeadBufferPosition([5, 0]) blockDecoration3.getMarker().setHeadBufferPosition([9, 0]) @@ -3013,7 +3014,7 @@ describe "TextEditorPresenter", -> expect(lineNumberStateForScreenRow(presenter, 10).blockDecorationsHeight).toBe(0) expect(lineNumberStateForScreenRow(presenter, 11).blockDecorationsHeight).toBe(60) - waitsForStateToUpdate presenter, -> + waitsForStateToUpdateAsync presenter, -> blockDecoration1.destroy() blockDecoration3.destroy() @@ -3045,14 +3046,14 @@ describe "TextEditorPresenter", -> expect(lineNumberStateForScreenRow(presenter, 6).decorationClasses).toEqual ['a', 'b'] expect(lineNumberStateForScreenRow(presenter, 7).decorationClasses).toBeNull() - waitsForStateToUpdate presenter, -> editor.getBuffer().insert([5, 0], 'x') + waitsForStateToUpdateAsync presenter, -> editor.getBuffer().insert([5, 0], 'x') runs -> expect(marker1.isValid()).toBe false expect(lineNumberStateForScreenRow(presenter, 4).decorationClasses).toBeNull() expect(lineNumberStateForScreenRow(presenter, 5).decorationClasses).toBeNull() expect(lineNumberStateForScreenRow(presenter, 6).decorationClasses).toBeNull() - waitsForStateToUpdate presenter, -> editor.undo() + waitsForStateToUpdateAsync presenter, -> editor.undo() runs -> expect(lineNumberStateForScreenRow(presenter, 3).decorationClasses).toBeNull() expect(lineNumberStateForScreenRow(presenter, 4).decorationClasses).toEqual ['a', 'b'] @@ -3060,7 +3061,7 @@ describe "TextEditorPresenter", -> expect(lineNumberStateForScreenRow(presenter, 6).decorationClasses).toEqual ['a', 'b'] expect(lineNumberStateForScreenRow(presenter, 7).decorationClasses).toBeNull() - waitsForStateToUpdate presenter, -> marker1.setBufferRange([[2, 0], [4, 2]]) + waitsForStateToUpdateAsync presenter, -> marker1.setBufferRange([[2, 0], [4, 2]]) runs -> expect(lineNumberStateForScreenRow(presenter, 1).decorationClasses).toBeNull() expect(lineNumberStateForScreenRow(presenter, 2).decorationClasses).toEqual ['a'] @@ -3070,7 +3071,7 @@ describe "TextEditorPresenter", -> expect(lineNumberStateForScreenRow(presenter, 6).decorationClasses).toEqual ['b'] expect(lineNumberStateForScreenRow(presenter, 7).decorationClasses).toBeNull() - waitsForStateToUpdate presenter, -> decoration1.destroy() + waitsForStateToUpdateAsync presenter, -> decoration1.destroy() runs -> expect(lineNumberStateForScreenRow(presenter, 2).decorationClasses).toBeNull() expect(lineNumberStateForScreenRow(presenter, 3).decorationClasses).toBeNull() @@ -3079,7 +3080,7 @@ describe "TextEditorPresenter", -> expect(lineNumberStateForScreenRow(presenter, 6).decorationClasses).toEqual ['b'] expect(lineNumberStateForScreenRow(presenter, 7).decorationClasses).toBeNull() - waitsForStateToUpdate presenter, -> marker2.destroy() + waitsForStateToUpdateAsync presenter, -> marker2.destroy() runs -> expect(lineNumberStateForScreenRow(presenter, 2).decorationClasses).toBeNull() expect(lineNumberStateForScreenRow(presenter, 3).decorationClasses).toBeNull() @@ -3297,7 +3298,7 @@ describe "TextEditorPresenter", -> expect(decorationState[decoration3.id].item).toBe decorationItem expect(decorationState[decoration3.id].class).toBe 'test-class' - waitsForStateToUpdate presenter, -> blockDecoration1.destroy() + waitsForStateToUpdateAsync presenter, -> blockDecoration1.destroy() runs -> decorationState = getContentForGutterWithName(presenter, 'test-gutter') expect(decorationState[decoration1.id]).toBeUndefined() @@ -3416,7 +3417,7 @@ describe "TextEditorPresenter", -> gutterName: 'test-gutter-2' class: 'new-test-class' item: decorationItem - waitsForStateToUpdate presenter, -> decoration1.setProperties(newDecorationParams) + waitsForStateToUpdateAsync presenter, -> decoration1.setProperties(newDecorationParams) runs -> decorationState = getContentForGutterWithName(presenter, 'test-gutter') @@ -3470,7 +3471,7 @@ describe "TextEditorPresenter", -> marker4 = editor.markBufferRange([[0, 0], [1, 0]]) decoration4 = null - waitsForStateToUpdate2 presenter, -> decoration4 = editor.decorateMarker(marker4, decorationParams) + waitsForStateToUpdateAsync presenter, -> decoration4 = editor.decorateMarker(marker4, decorationParams) runs -> expectStateUpdate presenter, -> editor.addGutter({name: 'test-gutter-2'}) @@ -3537,7 +3538,7 @@ describe "TextEditorPresenter", -> blockDecorationsHeight = Math.round(35.8 + 100.3 + 95.2) expect(getStylesForGutterWithName(presenter, 'line-number').scrollHeight).toBe(linesHeight + blockDecorationsHeight) - waitsForStateToUpdate presenter, -> blockDecoration3.destroy() + waitsForStateToUpdateAsync presenter, -> blockDecoration3.destroy() runs -> blockDecorationsHeight = Math.round(35.8 + 100.3) expect(getStylesForGutterWithName(presenter, 'line-number').scrollHeight).toBe(linesHeight + blockDecorationsHeight) From 9fa766e01ac928ab7b9de682fa5459bbbb92c553 Mon Sep 17 00:00:00 2001 From: joshaber Date: Fri, 12 Feb 2016 15:13:10 -0500 Subject: [PATCH 09/11] Don't use synchronous updates anymore. --- spec/text-editor-presenter-spec.coffee | 1 - 1 file changed, 1 deletion(-) diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index c3abeb062..b0eb6d09b 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -20,7 +20,6 @@ describe "TextEditorPresenter", -> buffer = new TextBuffer(filePath: require.resolve('./fixtures/sample.js')) editor = atom.workspace.buildTextEditor({buffer}) - editor.setUpdatedSynchronously(true) waitsForPromise -> buffer.load() afterEach -> From 82860a12a08eabe50812126e1c41e74db5f1cc8f Mon Sep 17 00:00:00 2001 From: joshaber Date: Fri, 12 Feb 2016 16:35:10 -0500 Subject: [PATCH 10/11] Fix waitsForStateToUpdate proper like. --- spec/text-editor-presenter-spec.coffee | 84 +++++++++++++------------- 1 file changed, 43 insertions(+), 41 deletions(-) diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index b0eb6d09b..5e51c7176 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -90,19 +90,12 @@ describe "TextEditorPresenter", -> expectNoStateUpdate = (presenter, fn) -> expectStateUpdatedToBe(false, presenter, fn) - waitsForStateToUpdateAsync = (presenter, fn) -> - waitsFor "presenter state to update", 1000, (done) -> - disposable = presenter.onDidUpdateState -> - disposable.dispose() - process.nextTick(done) - fn?() - waitsForStateToUpdate = (presenter, fn) -> waitsFor "presenter state to update", 1000, (done) -> - fn?() disposable = presenter.onDidUpdateState -> disposable.dispose() process.nextTick(done) + fn?() tiledContentContract = (stateFn) -> it "contains states for tiles that are visible on screen", -> @@ -1481,7 +1474,7 @@ describe "TextEditorPresenter", -> marker2 = editor.addMarkerLayer(maintainHistory: true).markBufferRange([[4, 0], [6, 2]], invalidate: 'touch') decoration2 = null - waitsForStateToUpdateAsync presenter, -> decoration2 = editor.decorateMarker(marker2, type: 'line', class: 'b') + waitsForStateToUpdate presenter, -> decoration2 = editor.decorateMarker(marker2, type: 'line', class: 'b') runs -> expect(lineStateForScreenRow(presenter, 3).decorationClasses).toBeNull() expect(lineStateForScreenRow(presenter, 4).decorationClasses).toEqual ['a', 'b'] @@ -1489,14 +1482,14 @@ describe "TextEditorPresenter", -> expect(lineStateForScreenRow(presenter, 6).decorationClasses).toEqual ['a', 'b'] expect(lineStateForScreenRow(presenter, 7).decorationClasses).toBeNull() - waitsForStateToUpdateAsync presenter, -> editor.getBuffer().insert([5, 0], 'x') + waitsForStateToUpdate presenter, -> editor.getBuffer().insert([5, 0], 'x') runs -> expect(marker1.isValid()).toBe false expect(lineStateForScreenRow(presenter, 4).decorationClasses).toBeNull() expect(lineStateForScreenRow(presenter, 5).decorationClasses).toBeNull() expect(lineStateForScreenRow(presenter, 6).decorationClasses).toBeNull() - waitsForStateToUpdateAsync presenter, -> editor.undo() + waitsForStateToUpdate presenter, -> editor.undo() runs -> expect(lineStateForScreenRow(presenter, 3).decorationClasses).toBeNull() expect(lineStateForScreenRow(presenter, 4).decorationClasses).toEqual ['a', 'b'] @@ -1504,7 +1497,7 @@ describe "TextEditorPresenter", -> expect(lineStateForScreenRow(presenter, 6).decorationClasses).toEqual ['a', 'b'] expect(lineStateForScreenRow(presenter, 7).decorationClasses).toBeNull() - waitsForStateToUpdateAsync presenter, -> marker1.setBufferRange([[2, 0], [4, 2]]) + waitsForStateToUpdate presenter, -> marker1.setBufferRange([[2, 0], [4, 2]]) runs -> expect(lineStateForScreenRow(presenter, 1).decorationClasses).toBeNull() expect(lineStateForScreenRow(presenter, 2).decorationClasses).toEqual ['a'] @@ -1514,7 +1507,7 @@ describe "TextEditorPresenter", -> expect(lineStateForScreenRow(presenter, 6).decorationClasses).toEqual ['b'] expect(lineStateForScreenRow(presenter, 7).decorationClasses).toBeNull() - waitsForStateToUpdateAsync presenter, -> decoration1.destroy() + waitsForStateToUpdate presenter, -> decoration1.destroy() runs -> expect(lineStateForScreenRow(presenter, 2).decorationClasses).toBeNull() expect(lineStateForScreenRow(presenter, 3).decorationClasses).toBeNull() @@ -1523,7 +1516,7 @@ describe "TextEditorPresenter", -> expect(lineStateForScreenRow(presenter, 6).decorationClasses).toEqual ['b'] expect(lineStateForScreenRow(presenter, 7).decorationClasses).toBeNull() - waitsForStateToUpdateAsync presenter, -> marker2.destroy() + waitsForStateToUpdate presenter, -> marker2.destroy() runs -> expect(lineStateForScreenRow(presenter, 2).decorationClasses).toBeNull() expect(lineStateForScreenRow(presenter, 3).decorationClasses).toBeNull() @@ -1687,7 +1680,7 @@ describe "TextEditorPresenter", -> blockDecoration1 = addBlockDecorationBeforeScreenRow(0) blockDecoration2 = addBlockDecorationBeforeScreenRow(1) - waitsForStateToUpdateAsync presenter, -> + waitsForStateToUpdate presenter, -> presenter.setBlockDecorationDimensions(blockDecoration1, 0, 30) presenter.setBlockDecorationDimensions(blockDecoration2, 0, 10) @@ -1698,7 +1691,7 @@ describe "TextEditorPresenter", -> expect(stateForCursor(presenter, 3)).toBeUndefined() expect(stateForCursor(presenter, 4)).toBeUndefined() - waitsForStateToUpdateAsync presenter, -> + waitsForStateToUpdate presenter, -> blockDecoration2.destroy() editor.setCursorBufferPosition([0, 0]) editor.insertNewline() @@ -2157,31 +2150,40 @@ describe "TextEditorPresenter", -> } # becoming empty - waitsForStateToUpdate presenter, -> editor.getSelections()[1].clear(autoscroll: false) + runs -> + editor.getSelections()[1].clear(autoscroll: false) + waitsForStateToUpdate presenter runs -> expectUndefinedStateForSelection(presenter, 1) # becoming non-empty - waitsForStateToUpdate presenter, -> editor.getSelections()[1].setBufferRange([[2, 4], [2, 6]], autoscroll: false) + runs -> + editor.getSelections()[1].setBufferRange([[2, 4], [2, 6]], autoscroll: false) + waitsForStateToUpdate presenter runs -> expectValues stateForSelectionInTile(presenter, 1, 2), { regions: [{top: 0, left: 4 * 10, width: 2 * 10, height: 10}] } # moving out of view - waitsForStateToUpdate presenter, -> editor.getSelections()[1].setBufferRange([[3, 4], [3, 6]], autoscroll: false) + runs -> + editor.getSelections()[1].setBufferRange([[3, 4], [3, 6]], autoscroll: false) + waitsForStateToUpdate presenter runs -> expectUndefinedStateForSelection(presenter, 1) # adding - waitsForStateToUpdate presenter, -> editor.addSelectionForBufferRange([[1, 4], [1, 6]], autoscroll: false) + runs -> editor.addSelectionForBufferRange([[1, 4], [1, 6]], autoscroll: false) + waitsForStateToUpdate presenter runs -> expectValues stateForSelectionInTile(presenter, 2, 0), { regions: [{top: 10, left: 4 * 10, width: 2 * 10, height: 10}] } # moving added selection - waitsForStateToUpdate presenter, -> editor.getSelections()[2].setBufferRange([[1, 4], [1, 8]], autoscroll: false) + runs -> + editor.getSelections()[2].setBufferRange([[1, 4], [1, 8]], autoscroll: false) + waitsForStateToUpdate presenter destroyedSelection = null runs -> @@ -2216,7 +2218,7 @@ describe "TextEditorPresenter", -> marker = editor.markBufferPosition([2, 2]) highlight = null - waitsForStateToUpdateAsync presenter, -> + waitsForStateToUpdate presenter, -> highlight = editor.decorateMarker(marker, type: 'highlight', class: 'a') marker.setBufferRange([[2, 2], [5, 2]]) highlight.flash('b', 500) @@ -2232,7 +2234,7 @@ describe "TextEditorPresenter", -> flashCount: 1 } - waitsForStateToUpdateAsync presenter, -> highlight.flash('c', 600) + waitsForStateToUpdate presenter, -> highlight.flash('c', 600) runs -> expectValues stateForHighlightInTile(presenter, highlight, 2), { flashClass: 'c' @@ -2479,7 +2481,7 @@ describe "TextEditorPresenter", -> } # Change range - waitsForStateToUpdateAsync presenter, -> marker.setBufferRange([[2, 13], [4, 6]]) + waitsForStateToUpdate presenter, -> marker.setBufferRange([[2, 13], [4, 6]]) runs -> expectValues stateForOverlay(presenter, decoration), { item: item @@ -2487,12 +2489,12 @@ describe "TextEditorPresenter", -> } # Valid -> invalid - waitsForStateToUpdateAsync presenter, -> editor.getBuffer().insert([2, 14], 'x') + waitsForStateToUpdate presenter, -> editor.getBuffer().insert([2, 14], 'x') runs -> expect(stateForOverlay(presenter, decoration)).toBeUndefined() # Invalid -> valid - waitsForStateToUpdateAsync presenter, -> editor.undo() + waitsForStateToUpdate presenter, -> editor.undo() runs -> expectValues stateForOverlay(presenter, decoration), { item: item @@ -2500,7 +2502,7 @@ describe "TextEditorPresenter", -> } # Reverse direction - waitsForStateToUpdateAsync presenter, -> marker.setBufferRange([[2, 13], [4, 6]], reversed: true) + waitsForStateToUpdate presenter, -> marker.setBufferRange([[2, 13], [4, 6]], reversed: true) runs -> expectValues stateForOverlay(presenter, decoration), { item: item @@ -2508,13 +2510,13 @@ describe "TextEditorPresenter", -> } # Destroy - waitsForStateToUpdateAsync presenter, -> decoration.destroy() + waitsForStateToUpdate presenter, -> decoration.destroy() runs -> expect(stateForOverlay(presenter, decoration)).toBeUndefined() # Add decoration2 = null - waitsForStateToUpdateAsync presenter, -> decoration2 = editor.decorateMarker(marker, {type: 'overlay', item}) + waitsForStateToUpdate presenter, -> decoration2 = editor.decorateMarker(marker, {type: 'overlay', item}) runs -> expectValues stateForOverlay(presenter, decoration2), { item: item @@ -2979,7 +2981,7 @@ describe "TextEditorPresenter", -> presenter.setBlockDecorationDimensions(blockDecoration5, 0, 50) presenter.setBlockDecorationDimensions(blockDecoration6, 0, 60) - waitsForStateToUpdateAsync presenter, -> presenter.setBlockDecorationDimensions(blockDecoration6, 0, 60) + waitsForStateToUpdate presenter, -> presenter.setBlockDecorationDimensions(blockDecoration6, 0, 60) runs -> expect(lineNumberStateForScreenRow(presenter, 0).blockDecorationsHeight).toBe(10) expect(lineNumberStateForScreenRow(presenter, 1).blockDecorationsHeight).toBe(0) @@ -2994,7 +2996,7 @@ describe "TextEditorPresenter", -> expect(lineNumberStateForScreenRow(presenter, 10).blockDecorationsHeight).toBe(0) expect(lineNumberStateForScreenRow(presenter, 11).blockDecorationsHeight).toBe(60) - waitsForStateToUpdateAsync presenter, -> + waitsForStateToUpdate presenter, -> blockDecoration1.getMarker().setHeadBufferPosition([1, 0]) blockDecoration2.getMarker().setHeadBufferPosition([5, 0]) blockDecoration3.getMarker().setHeadBufferPosition([9, 0]) @@ -3013,7 +3015,7 @@ describe "TextEditorPresenter", -> expect(lineNumberStateForScreenRow(presenter, 10).blockDecorationsHeight).toBe(0) expect(lineNumberStateForScreenRow(presenter, 11).blockDecorationsHeight).toBe(60) - waitsForStateToUpdateAsync presenter, -> + waitsForStateToUpdate presenter, -> blockDecoration1.destroy() blockDecoration3.destroy() @@ -3045,14 +3047,14 @@ describe "TextEditorPresenter", -> expect(lineNumberStateForScreenRow(presenter, 6).decorationClasses).toEqual ['a', 'b'] expect(lineNumberStateForScreenRow(presenter, 7).decorationClasses).toBeNull() - waitsForStateToUpdateAsync presenter, -> editor.getBuffer().insert([5, 0], 'x') + waitsForStateToUpdate presenter, -> editor.getBuffer().insert([5, 0], 'x') runs -> expect(marker1.isValid()).toBe false expect(lineNumberStateForScreenRow(presenter, 4).decorationClasses).toBeNull() expect(lineNumberStateForScreenRow(presenter, 5).decorationClasses).toBeNull() expect(lineNumberStateForScreenRow(presenter, 6).decorationClasses).toBeNull() - waitsForStateToUpdateAsync presenter, -> editor.undo() + waitsForStateToUpdate presenter, -> editor.undo() runs -> expect(lineNumberStateForScreenRow(presenter, 3).decorationClasses).toBeNull() expect(lineNumberStateForScreenRow(presenter, 4).decorationClasses).toEqual ['a', 'b'] @@ -3060,7 +3062,7 @@ describe "TextEditorPresenter", -> expect(lineNumberStateForScreenRow(presenter, 6).decorationClasses).toEqual ['a', 'b'] expect(lineNumberStateForScreenRow(presenter, 7).decorationClasses).toBeNull() - waitsForStateToUpdateAsync presenter, -> marker1.setBufferRange([[2, 0], [4, 2]]) + waitsForStateToUpdate presenter, -> marker1.setBufferRange([[2, 0], [4, 2]]) runs -> expect(lineNumberStateForScreenRow(presenter, 1).decorationClasses).toBeNull() expect(lineNumberStateForScreenRow(presenter, 2).decorationClasses).toEqual ['a'] @@ -3070,7 +3072,7 @@ describe "TextEditorPresenter", -> expect(lineNumberStateForScreenRow(presenter, 6).decorationClasses).toEqual ['b'] expect(lineNumberStateForScreenRow(presenter, 7).decorationClasses).toBeNull() - waitsForStateToUpdateAsync presenter, -> decoration1.destroy() + waitsForStateToUpdate presenter, -> decoration1.destroy() runs -> expect(lineNumberStateForScreenRow(presenter, 2).decorationClasses).toBeNull() expect(lineNumberStateForScreenRow(presenter, 3).decorationClasses).toBeNull() @@ -3079,7 +3081,7 @@ describe "TextEditorPresenter", -> expect(lineNumberStateForScreenRow(presenter, 6).decorationClasses).toEqual ['b'] expect(lineNumberStateForScreenRow(presenter, 7).decorationClasses).toBeNull() - waitsForStateToUpdateAsync presenter, -> marker2.destroy() + waitsForStateToUpdate presenter, -> marker2.destroy() runs -> expect(lineNumberStateForScreenRow(presenter, 2).decorationClasses).toBeNull() expect(lineNumberStateForScreenRow(presenter, 3).decorationClasses).toBeNull() @@ -3297,7 +3299,7 @@ describe "TextEditorPresenter", -> expect(decorationState[decoration3.id].item).toBe decorationItem expect(decorationState[decoration3.id].class).toBe 'test-class' - waitsForStateToUpdateAsync presenter, -> blockDecoration1.destroy() + waitsForStateToUpdate presenter, -> blockDecoration1.destroy() runs -> decorationState = getContentForGutterWithName(presenter, 'test-gutter') expect(decorationState[decoration1.id]).toBeUndefined() @@ -3416,7 +3418,7 @@ describe "TextEditorPresenter", -> gutterName: 'test-gutter-2' class: 'new-test-class' item: decorationItem - waitsForStateToUpdateAsync presenter, -> decoration1.setProperties(newDecorationParams) + waitsForStateToUpdate presenter, -> decoration1.setProperties(newDecorationParams) runs -> decorationState = getContentForGutterWithName(presenter, 'test-gutter') @@ -3470,7 +3472,7 @@ describe "TextEditorPresenter", -> marker4 = editor.markBufferRange([[0, 0], [1, 0]]) decoration4 = null - waitsForStateToUpdateAsync presenter, -> decoration4 = editor.decorateMarker(marker4, decorationParams) + waitsForStateToUpdate presenter, -> decoration4 = editor.decorateMarker(marker4, decorationParams) runs -> expectStateUpdate presenter, -> editor.addGutter({name: 'test-gutter-2'}) @@ -3537,7 +3539,7 @@ describe "TextEditorPresenter", -> blockDecorationsHeight = Math.round(35.8 + 100.3 + 95.2) expect(getStylesForGutterWithName(presenter, 'line-number').scrollHeight).toBe(linesHeight + blockDecorationsHeight) - waitsForStateToUpdateAsync presenter, -> blockDecoration3.destroy() + waitsForStateToUpdate presenter, -> blockDecoration3.destroy() runs -> blockDecorationsHeight = Math.round(35.8 + 100.3) expect(getStylesForGutterWithName(presenter, 'line-number').scrollHeight).toBe(linesHeight + blockDecorationsHeight) From cc3f6b888f567f192dae7756c49ec2f838588e3e Mon Sep 17 00:00:00 2001 From: joshaber Date: Fri, 12 Feb 2016 16:35:16 -0500 Subject: [PATCH 11/11] Don't need to duplicate this line. --- spec/text-editor-presenter-spec.coffee | 1 - 1 file changed, 1 deletion(-) diff --git a/spec/text-editor-presenter-spec.coffee b/spec/text-editor-presenter-spec.coffee index 5e51c7176..c353e21c0 100644 --- a/spec/text-editor-presenter-spec.coffee +++ b/spec/text-editor-presenter-spec.coffee @@ -2979,7 +2979,6 @@ describe "TextEditorPresenter", -> presenter.setBlockDecorationDimensions(blockDecoration4, 0, 35) presenter.setBlockDecorationDimensions(blockDecoration4, 0, 40) presenter.setBlockDecorationDimensions(blockDecoration5, 0, 50) - presenter.setBlockDecorationDimensions(blockDecoration6, 0, 60) waitsForStateToUpdate presenter, -> presenter.setBlockDecorationDimensions(blockDecoration6, 0, 60) runs ->