From 8d9aa5ddc60d04a128f66533a8d8b0efa73f87f7 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Fri, 27 Mar 2015 12:15:55 -0700 Subject: [PATCH] More flattening --- streams/flatten.js | 29 ++++++++ test/streams/flatten.js | 161 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 190 insertions(+) create mode 100644 test/streams/flatten.js diff --git a/streams/flatten.js b/streams/flatten.js index a4f20de..980ba6b 100644 --- a/streams/flatten.js +++ b/streams/flatten.js @@ -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'; } }; diff --git a/test/streams/flatten.js b/test/streams/flatten.js new file mode 100644 index 0000000..be93a29 --- /dev/null +++ b/test/streams/flatten.js @@ -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(); + }); +});