prevent crash when a class claims to implement an interface but has no members

This commit is contained in:
Jeff Williams 2014-08-11 08:51:49 -07:00
parent 7c2a6d7438
commit 7ef13bf40b
3 changed files with 13 additions and 2 deletions

View File

@ -191,7 +191,7 @@ exports.addImplemented = function(docs) {
// class's interfaces // class's interfaces
cls.implements.forEach(function(impl) { cls.implements.forEach(function(impl) {
var implProps = propertyInfo[impl]; var implProps = propertyInfo[impl];
var props = docMap[cls.longname]; var props = docMap[cls.longname] || [];
for (var i = 0, len = props.length; i < len; i++) { for (var i = 0, len = props.length; i < len; i++) {
var prop = props[i]; var prop = props[i];

View File

@ -63,3 +63,9 @@ IWorker.prototype.work = function() {};
function MyWorker() {} function MyWorker() {}
MyWorker.prototype.work = function() {}; MyWorker.prototype.work = function() {};
MyWorker.prototype.process = function() {}; MyWorker.prototype.process = function() {};
/**
* @constructor
* @implements {IWorker}
*/
function MyIncompleteWorker() {}

View File

@ -1,10 +1,11 @@
/*global describe, expect, it, jasmine */ /*global describe, expect, it, jasmine */
'use strict'; 'use strict';
describe('@interface tag', function() { describe('@implements tag', function() {
var docSet = jasmine.getDocSetFromFile('test/fixtures/interface-implements.js'); var docSet = jasmine.getDocSetFromFile('test/fixtures/interface-implements.js');
var myTester = docSet.getByLongname('MyTester')[0]; var myTester = docSet.getByLongname('MyTester')[0];
var myIncompleteWorker = docSet.getByLongname('MyWorker')[0];
var beforeEachMethod = docSet.getByLongname('MyTester#beforeEach')[0]; var beforeEachMethod = docSet.getByLongname('MyTester#beforeEach')[0];
var processMethod = docSet.getByLongname('MyWorker#process')[0]; var processMethod = docSet.getByLongname('MyWorker#process')[0];
@ -22,4 +23,8 @@ describe('@interface tag', function() {
it('MyWorker\'s process() method does not implement an interface', function() { it('MyWorker\'s process() method does not implement an interface', function() {
expect(processMethod.implements).toBeUndefined(); expect(processMethod.implements).toBeUndefined();
}); });
it('MyIncompleteWorker does not have any methods', function() {
expect(docSet.getByLongname('MyIncompleteWorker#work').length).toBe(0);
});
}); });