diff --git a/lib/ace/edit_session.js b/lib/ace/edit_session.js index 0ebe7697..7b7f9a7d 100644 --- a/lib/ace/edit_session.js +++ b/lib/ace/edit_session.js @@ -393,7 +393,7 @@ var EditSession = function(text, mode) { }; this.getAnnotations = function() { - return this.$annotations; + return this.$annotations || {}; }; this.clearAnnotations = function() { diff --git a/lib/ace/editor_change_document_test.js b/lib/ace/editor_change_document_test.js index 3df2f571..5ca75d59 100644 --- a/lib/ace/editor_change_document_test.js +++ b/lib/ace/editor_change_document_test.js @@ -46,6 +46,8 @@ var EditSession = require("./edit_session").EditSession; var Editor = require("./editor").Editor; var Text = require("./mode/text").Mode; var JavaScriptMode = require("./mode/javascript").Mode; +var CssMode = require("./mode/css").Mode; +var HtmlMode = require("./mode/html").Mode; var MockRenderer = require("./test/mockrenderer").MockRenderer; var assert = require("./test/assertions"); @@ -157,6 +159,31 @@ module.exports = { this.session2.setMode(new JavaScriptMode()); assert.ok(called); + }, + + "test: should use stop worker of old document" : function(next) { + var self = this; + + // 1. Open an editor and set the session to CssMode + self.editor.setSession(self.session1); + self.session1.setMode(new CssMode()); + + // 2. Add a line or two of valid CSS. + self.session1.setValue("DIV { color: red; }"); + + // 3. Clear the session value. + self.session1.setValue(""); + + // 4. Set the session to HtmlMode + self.session1.setMode(new HtmlMode()); + + // 5. Try to type valid HTML + self.session1.insert({row: 0, column: 0}, ""); + + setTimeout(function() { + assert.equal(Object.keys(self.session1.getAnnotations()).length, 0); + next(); + }, 600); } }; diff --git a/lib/ace/mode/coffee.js b/lib/ace/mode/coffee.js index 7f10657d..60fc3eb1 100644 --- a/lib/ace/mode/coffee.js +++ b/lib/ace/mode/coffee.js @@ -106,7 +106,9 @@ oop.inherits(Mode, TextMode); worker.on("ok", function(e) { session.clearAnnotations(); - }); + }); + + return worker; }; }).call(Mode.prototype); diff --git a/lib/ace/mode/css.js b/lib/ace/mode/css.js index 4ba05231..6c8267db 100644 --- a/lib/ace/mode/css.js +++ b/lib/ace/mode/css.js @@ -95,6 +95,7 @@ oop.inherits(Mode, TextMode); session.setAnnotations(errors); }); + return worker; }; }).call(Mode.prototype);