From 47fe83de3dbfc5af3c85159c32c81dd55c61ee20 Mon Sep 17 00:00:00 2001 From: Jeff Williams Date: Sun, 4 Aug 2013 23:21:01 -0700 Subject: [PATCH] prevent crashes in lenient mode when a param tag has an invalid type expression (#451) --- lib/jsdoc/src/handlers.js | 2 +- test/fixtures/paramtaginvalidtype.js | 9 +++++++++ test/specs/tags/paramtag.js | 25 +++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/paramtaginvalidtype.js diff --git a/lib/jsdoc/src/handlers.js b/lib/jsdoc/src/handlers.js index fef4bf13..83d784c6 100644 --- a/lib/jsdoc/src/handlers.js +++ b/lib/jsdoc/src/handlers.js @@ -17,7 +17,7 @@ function getNewDoclet(comment, e) { err = new Error( util.format('cannot create a doclet for the comment "%s": %s', comment.replace(/[\r\n]/g, ''), error.message) ); require('jsdoc/util/error').handle(err); - return new jsdoc.doclet.Doclet('', {}); + return new jsdoc.doclet.Doclet('', e); } } diff --git a/test/fixtures/paramtaginvalidtype.js b/test/fixtures/paramtaginvalidtype.js new file mode 100644 index 00000000..5e79d4e8 --- /dev/null +++ b/test/fixtures/paramtaginvalidtype.js @@ -0,0 +1,9 @@ +/** + * @constructor + */ +var Test = function () {}; + +/** + * @param {string, number} a + */ +Test.prototype.test = function (a) {}; diff --git a/test/specs/tags/paramtag.js b/test/specs/tags/paramtag.js index 7145c83f..e4dd33ed 100644 --- a/test/specs/tags/paramtag.js +++ b/test/specs/tags/paramtag.js @@ -1,3 +1,4 @@ +/*global describe: true, env: true, expect: true, it: true, jasmine: true, spyOn: true */ describe("@param tag", function() { var docSet = jasmine.getDocSetFromFile('test/fixtures/paramtag.js'), find = docSet.getByLongname('find')[0], @@ -77,4 +78,28 @@ describe("@param tag", function() { expect(commit.params[0].name).toBe('atomic'); }); + it('When a symbol has a @param tag with an invalid type expression, the doclet is generated in lenient mode, and the JSDoc comment is ignored.', function() { + var badDocSet; + var test; + var lenient = !!env.opts.lenient; + + env.opts.lenient = true; + spyOn(console, 'log'); + + badDocSet = jasmine.getDocSetFromFile('test/fixtures/paramtaginvalidtype.js'); + test = badDocSet.getByLongname('Test#test')[0]; + + expect(test).toBeDefined(); + expect(typeof test).toBe('object'); + + expect(test.meta).toBeDefined(); + expect(typeof test.meta).toBe('object'); + + expect(test.meta.filename).toBeDefined(); + expect(test.meta.filename).toBe('[[string0]]'); + + expect(test.description).not.toBeDefined(); + + env.opts.lenient = lenient; + }); });