From 8910f2c2a026261b840a2f24ecacd600e88f057e Mon Sep 17 00:00:00 2001 From: Alexandre Santos Date: Tue, 4 Jun 2019 18:00:57 +0100 Subject: [PATCH] Add tests and fix yaml-lint code --- lib/ace/mode/yaml/yaml-lint.js | 39 ++++----------- lib/ace/mode/yaml_worker.js | 24 +++++---- lib/ace/mode/yaml_worker_test.js | 85 ++++++++++++++++++++++++++++++++ lib/ace/test/all_browser.js | 3 +- 4 files changed, 110 insertions(+), 41 deletions(-) create mode 100644 lib/ace/mode/yaml_worker_test.js diff --git a/lib/ace/mode/yaml/yaml-lint.js b/lib/ace/mode/yaml/yaml-lint.js index aacd025a7bc..6c7afaad6f3 100644 --- a/lib/ace/mode/yaml/yaml-lint.js +++ b/lib/ace/mode/yaml/yaml-lint.js @@ -9,42 +9,21 @@ var DEFAULT_LINT_OPTION = { schema: 'DEFAULT_SAFE_SCHEMA' }; -function lint(content, opts) { +function lint(content, opts, cb) { var options = merge({}, DEFAULT_LINT_OPTION, opts); - - return new window.Promise(function(resolve, reject) { - try { - yaml.safeLoad(content, { - schema: yaml[options.schema] - }); - resolve(); - } catch (e) { - reject(e); - } - }); - -} - -function lintFile(file, opts) { - return new window.Promise(function (resolve, reject) { - fs.readFile(file, 'utf8', function (err, content) { - if (err) { - reject(err); - } else { - lint(content, opts).then(function (result) { - resolve(result); - }).catch(function(e) { - reject(e); - }); - } + try { + yaml.safeLoad(content, { + schema: yaml[options.schema] }); - }); + cb(); + } catch (e) { + cb(e); + } } module.exports = { - lint: lint, - lintFile: lintFile + lint: lint }; },{"fs":1,"js-yaml":3,"lodash.merge":33}],3:[function(require,module,exports){ diff --git a/lib/ace/mode/yaml_worker.js b/lib/ace/mode/yaml_worker.js index 19c5d343c18..cc5dd58f162 100644 --- a/lib/ace/mode/yaml_worker.js +++ b/lib/ace/mode/yaml_worker.js @@ -28,18 +28,22 @@ oop.inherits(YamlWorker, Mirror); var value = this.doc.getValue(); var errors = []; - lint(value) - .catch(function(error) { - errors.push({ - row: error.mark.line, - column: error.mark.column, - text: error.reason, - type: 'error', - raw: error - }); - + lint(value, {}, function(error) { + if (!error) { _this.sender.emit("annotate", errors); + return; + } + + errors.push({ + row: error.mark.line, + column: error.mark.column, + text: error.reason, + type: 'error', + raw: error }); + + _this.sender.emit("annotate", errors); + }); }; }).call(YamlWorker.prototype); diff --git a/lib/ace/mode/yaml_worker_test.js b/lib/ace/mode/yaml_worker_test.js new file mode 100644 index 00000000000..c63a530cfad --- /dev/null +++ b/lib/ace/mode/yaml_worker_test.js @@ -0,0 +1,85 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Distributed under the BSD license: + * + * Copyright (c) 2010, Ajax.org B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Ajax.org B.V. nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ***** END LICENSE BLOCK ***** */ + +if (typeof process !== "undefined") { + require("amd-loader"); +} + +define(function(require, exports, module) { +"use strict"; + +var assert = require("../test/assertions"); +var YamlWorker = require("./yaml_worker").YamlWorker; + + +module.exports = { + setUp : function() { + this.sender = { + on: function() {}, + callback: function(data, id) { + this.data = data; + }, + events: [], + emit: function(type, e) { + this.events.push([type, e]); + } + }; + }, + + "test check for syntax error": function() { + var worker = new YamlWorker(this.sender); + worker.setValue('test: "test'); + worker.deferredUpdate.call(); + + var error = this.sender.events[0][1][0]; + assert.equal(error.text, 'unexpected end of the stream within a double quoted scalar'); + assert.equal(error.type, "error"); + assert.equal(error.row, 1); + assert.equal(error.column, 0); + }, + + "test unknown tag": function() { + var worker = new YamlWorker(this.sender); + worker.setValue("- ! bar"); + worker.deferredUpdate.call(); + + var error = this.sender.events[0][1][0]; + assert.equal(error.text, 'unknown tag !'); + assert.equal(error.type, "error"); + assert.equal(error.row, 0); + assert.equal(error.column, 16); + } +}; + +}); + +if (typeof module !== "undefined" && module === require.main) { + require("asyncjs").test.testcase(module.exports).exec(); +} diff --git a/lib/ace/test/all_browser.js b/lib/ace/test/all_browser.js index 13acb416d4c..c5d34f42def 100644 --- a/lib/ace/test/all_browser.js +++ b/lib/ace/test/all_browser.js @@ -65,7 +65,8 @@ var testNames = [ "ace/token_iterator_test", "ace/tokenizer_test", "ace/undomanager_test", - "ace/virtual_renderer_test" + "ace/virtual_renderer_test", + "ace/mode/yaml_worker_test" ]; var html = ["all tests
"];