From ccdb29224a5c783b33ad7a3a57706f3b45bd03c3 Mon Sep 17 00:00:00 2001 From: Jeff Avallone Date: Sat, 20 Dec 2014 10:47:41 -0500 Subject: [PATCH] Rejecting promise when parsing fails --- spec/parser/javascript_spec.js | 11 ++++++++++- src/js/parser/javascript.js | 11 ++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/spec/parser/javascript_spec.js b/spec/parser/javascript_spec.js index 6b59909..df573c0 100644 --- a/spec/parser/javascript_spec.js +++ b/spec/parser/javascript_spec.js @@ -9,7 +9,7 @@ describe('parser/javascript.js', function() { this.parser = new Parser(); }); - describe('#parser', function() { + describe('#parse', function() { beforeEach(function() { spyOn(regexpParser, 'parse'); @@ -42,6 +42,15 @@ describe('parser/javascript.js', function() { .done(); }); + it('rejects the returned promise with the exception thrown', function(done) { + this.parser.parse('/example') + .then(null, result => { + expect(result).toBeDefined(); + }) + .finally(done) + .done(); + }); + }); describe('#render', function() { diff --git a/src/js/parser/javascript.js b/src/js/parser/javascript.js index cd7c3e5..bdcd0b5 100644 --- a/src/js/parser/javascript.js +++ b/src/js/parser/javascript.js @@ -16,10 +16,15 @@ export default class Parser { var deferred = Q.defer(); setTimeout(() => { - javascript.Parser.SyntaxNode.state = this.state; + try { + javascript.Parser.SyntaxNode.state = this.state; - this.parsed = javascript.parse(expression.replace(/\n/g, '\\n')); - deferred.resolve(this); + this.parsed = javascript.parse(expression.replace(/\n/g, '\\n')); + deferred.resolve(this); + } + catch(e) { + deferred.reject(e); + } }); return deferred.promise;