More flattening

This commit is contained in:
John Firebaugh 2015-03-27 12:15:55 -07:00
parent 398a3791ca
commit 8d9aa5ddc6
2 changed files with 190 additions and 0 deletions

View File

@ -12,6 +12,8 @@ var through = require('through'),
*
* * `@name`
* * `@memberof`
* * `@classdesc`
* * `@kind`
*
* The following tags are flattened to a top-level array-valued property:
*
@ -21,6 +23,11 @@ var through = require('through'),
* The `@static` and `@instance` tags are flattened to a `scope` property
* whose value is `"static"` or `"instance"`.
*
* The `@access`, `@public`, `@protected`, and `@private` tags are flattened
* to an `access` property whose value is `"protected"` or `"private"`.
* The assumed default value is `"public"`, so `@access public` or `@public`
* tags result in no `access` property.
*
* @name flatten
* @return {stream.Transform}
*/
@ -43,6 +50,12 @@ var flatteners = {
'memberof': function (result, tag) {
result.memberof = tag.description;
},
'classdesc': function (result, tag) {
result.classdesc = tag.description;
},
'kind': function (result, tag) {
result.kind = tag.kind;
},
'param': function (result, tag) {
if (!result.params) {
result.params = [];
@ -60,5 +73,21 @@ var flatteners = {
},
'instance': function (result, tag) {
result.scope = 'instance';
},
'access': function (result, tag) {
if (tag.access === 'public') {
delete result.access;
} else {
result.access = tag.access;
}
},
'public': function (result, tag) {
delete result.access;
},
'protected': function (result, tag) {
result.access = 'protected';
},
'private': function (result, tag) {
result.access = 'private';
}
};

161
test/streams/flatten.js Normal file
View File

@ -0,0 +1,161 @@
'use strict';
var test = require('prova'),
concat = require('concat-stream'),
parse = require('../../streams/parse'),
flatten = require('../../streams/flatten');
function evaluate(fn, callback) {
var stream = parse();
stream
.pipe(flatten())
.pipe(concat(callback));
stream.end({
file: __filename,
source: '(' + fn.toString() + ')'
});
}
test('flatten - name', function (t) {
evaluate(function () {
/** @name test */
return 0;
}, function (result) {
t.equal(result[0].name, 'test');
t.end();
});
});
test('flatten - memberof', function (t) {
evaluate(function () {
/** @memberof test */
return 0;
}, function (result) {
t.equal(result[0].memberof, 'test');
t.end();
});
});
test('flatten - classdesc', function (t) {
evaluate(function () {
/** @classdesc test */
return 0;
}, function (result) {
t.equal(result[0].classdesc, 'test');
t.end();
});
});
test('flatten - kind', function (t) {
evaluate(function () {
/** @kind class */
return 0;
}, function (result) {
t.equal(result[0].kind, 'class');
t.end();
});
});
test('flatten - param', function (t) {
evaluate(function () {
/** @param test */
return 0;
}, function (result) {
t.equal(result[0].params.length, 1);
t.equal(result[0].params[0].name, 'test');
t.end();
});
});
test('flatten - returns', function (t) {
evaluate(function () {
/** @returns {number} test */
return 0;
}, function (result) {
t.equal(result[0].returns.length, 1);
t.equal(result[0].returns[0].description, 'test');
t.end();
});
});
test('flatten - static', function (t) {
evaluate(function () {
/** @static */
return 0;
}, function (result) {
t.equal(result[0].scope, 'static');
t.end();
});
});
test('flatten - instance', function (t) {
evaluate(function () {
/** @instance */
return 0;
}, function (result) {
t.equal(result[0].scope, 'instance');
t.end();
});
});
test('flatten - access public', function (t) {
evaluate(function () {
/** @access public */
return 0;
}, function (result) {
t.notOk('access' in result[0]);
t.end();
});
});
test('flatten - access protected', function (t) {
evaluate(function () {
/** @access protected */
return 0;
}, function (result) {
t.equal(result[0].access, 'protected');
t.end();
});
});
test('flatten - access private', function (t) {
evaluate(function () {
/** @access private */
return 0;
}, function (result) {
t.equal(result[0].access, 'private');
t.end();
});
});
test('flatten - public', function (t) {
evaluate(function () {
/** @public */
return 0;
}, function (result) {
t.notOk('access' in result[0]);
t.end();
});
});
test('flatten - protected', function (t) {
evaluate(function () {
/** @protected */
return 0;
}, function (result) {
t.equal(result[0].access, 'protected');
t.end();
});
});
test('flatten - private', function (t) {
evaluate(function () {
/** @private */
return 0;
}, function (result) {
t.equal(result[0].access, 'private');
t.end();
});
});