@webex/jsdoctrinetest 3.0.0-beta.9 → 3.0.0-beta.91
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/assertions/literal.js +6 -26
- package/dist/assertions/literal.js.map +1 -1
- package/dist/extract.js +8 -24
- package/dist/extract.js.map +1 -1
- package/dist/index.js +7 -21
- package/dist/index.js.map +1 -1
- package/dist/mocha-template.js +2 -9
- package/dist/mocha-template.js.map +1 -1
- package/dist/parse.js +0 -6
- package/dist/parse.js.map +1 -1
- package/dist/transform.js +6 -18
- package/dist/transform.js.map +1 -1
- package/package.json +2 -2
- package/src/assertions/literal.js +4 -7
- package/src/extract.js +28 -26
- package/src/index.js +1 -1
- package/src/mocha-template.js +2 -2
- package/src/parse.js +23 -20
- package/src/transform.js +10 -14
package/README.md
CHANGED
|
@@ -28,8 +28,8 @@ Assuming your source code is in `./src` and you've got code like
|
|
|
28
28
|
* @returns {boolean}
|
|
29
29
|
*/
|
|
30
30
|
exports.fn = function fn() {
|
|
31
|
-
return true
|
|
32
|
-
}
|
|
31
|
+
return true;
|
|
32
|
+
};
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
The following command will create a run a mocha spec asserting the result of `fn()` is `true`.
|
|
@@ -1,96 +1,76 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
-
|
|
5
4
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
-
|
|
7
5
|
_Object$defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
|
-
|
|
11
8
|
exports.build = build;
|
|
12
9
|
exports.test = test;
|
|
13
|
-
|
|
14
10
|
var _parseInt2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/parse-int"));
|
|
15
|
-
|
|
16
11
|
var _isNan = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/number/is-nan"));
|
|
17
|
-
|
|
18
12
|
var _parseFloat2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/parse-float"));
|
|
19
|
-
|
|
20
13
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/typeof"));
|
|
21
|
-
|
|
22
14
|
var _template = _interopRequireDefault(require("@babel/template"));
|
|
23
|
-
|
|
24
15
|
var _types = require("@babel/types");
|
|
25
|
-
|
|
26
16
|
/*!
|
|
27
17
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
28
18
|
*/
|
|
19
|
+
|
|
29
20
|
var pattern = /^\s*?=>( async)?\s*/;
|
|
30
21
|
var tpl = (0, _template.default)("\n (function() {\n var assert = require('assert');\n assert.equal(result, ASSERTION);\n })();\n");
|
|
22
|
+
|
|
31
23
|
/**
|
|
32
24
|
* Indicates whether the specified value defines a literal assertion
|
|
33
25
|
* @param {string} value
|
|
34
26
|
* @returns {Boolean}
|
|
35
27
|
*/
|
|
36
|
-
|
|
37
28
|
function test(value) {
|
|
38
29
|
return pattern.test(value);
|
|
39
30
|
}
|
|
31
|
+
|
|
40
32
|
/**
|
|
41
33
|
* Builds a literal assertion
|
|
42
34
|
* @param {string} value
|
|
43
35
|
* @returns {ast}
|
|
44
36
|
*/
|
|
45
|
-
|
|
46
|
-
|
|
47
37
|
function build(value) {
|
|
48
38
|
return tpl({
|
|
49
39
|
ASSERTION: literal(value.replace(pattern, ''))
|
|
50
40
|
});
|
|
51
41
|
}
|
|
42
|
+
|
|
52
43
|
/**
|
|
53
44
|
* Coerces a string into a type
|
|
54
45
|
* @param {string} l
|
|
55
46
|
* @returns {Literal}
|
|
56
47
|
*/
|
|
57
|
-
|
|
58
|
-
|
|
59
48
|
function literal(l) {
|
|
60
49
|
/* eslint complexity: [0] */
|
|
61
50
|
// eslint-disable-next-line prefer-const
|
|
62
|
-
var f
|
|
63
|
-
|
|
51
|
+
var f;
|
|
52
|
+
var i;
|
|
64
53
|
switch ((0, _typeof2.default)(l)) {
|
|
65
54
|
case 'boolean':
|
|
66
55
|
return (0, _types.booleanLiteral)(l);
|
|
67
|
-
|
|
68
56
|
case 'number':
|
|
69
57
|
return (0, _types.numericLiteral)(l);
|
|
70
|
-
|
|
71
58
|
case 'string':
|
|
72
59
|
if (l === 'true') {
|
|
73
60
|
return (0, _types.booleanLiteral)(true);
|
|
74
61
|
}
|
|
75
|
-
|
|
76
62
|
if (l === 'false') {
|
|
77
63
|
return (0, _types.booleanLiteral)(false);
|
|
78
64
|
}
|
|
79
|
-
|
|
80
65
|
i = (0, _parseInt2.default)(l, 10);
|
|
81
|
-
|
|
82
66
|
if (!(0, _isNan.default)(i)) {
|
|
83
67
|
return (0, _types.numericLiteral)(i);
|
|
84
68
|
}
|
|
85
|
-
|
|
86
69
|
f = (0, _parseFloat2.default)(l);
|
|
87
|
-
|
|
88
70
|
if (!(0, _isNan.default)(f)) {
|
|
89
71
|
return (0, _types.numericLiteral)(f);
|
|
90
72
|
}
|
|
91
|
-
|
|
92
73
|
return (0, _types.stringLiteral)(l);
|
|
93
|
-
|
|
94
74
|
default:
|
|
95
75
|
throw new Error('Unsupported literal type');
|
|
96
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["pattern","tpl","template","test","value","build","ASSERTION","literal","replace","l","f","i","booleanLiteral","numericLiteral","stringLiteral","Error"],"sources":["literal.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport template from '@babel/template';\nimport {
|
|
1
|
+
{"version":3,"names":["pattern","tpl","template","test","value","build","ASSERTION","literal","replace","l","f","i","booleanLiteral","numericLiteral","stringLiteral","Error"],"sources":["literal.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport template from '@babel/template';\nimport {booleanLiteral, numericLiteral, stringLiteral} from '@babel/types';\n\nconst pattern = /^\\s*?=>( async)?\\s*/;\n\nconst tpl = template(`\n (function() {\n var assert = require('assert');\n assert.equal(result, ASSERTION);\n })();\n`);\n\n/**\n * Indicates whether the specified value defines a literal assertion\n * @param {string} value\n * @returns {Boolean}\n */\nexport function test(value) {\n return pattern.test(value);\n}\n\n/**\n * Builds a literal assertion\n * @param {string} value\n * @returns {ast}\n */\nexport function build(value) {\n return tpl({\n ASSERTION: literal(value.replace(pattern, '')),\n });\n}\n\n/**\n * Coerces a string into a type\n * @param {string} l\n * @returns {Literal}\n */\nfunction literal(l) {\n /* eslint complexity: [0] */\n // eslint-disable-next-line prefer-const\n let f;\n let i;\n\n switch (typeof l) {\n case 'boolean':\n return booleanLiteral(l);\n case 'number':\n return numericLiteral(l);\n case 'string':\n if (l === 'true') {\n return booleanLiteral(true);\n }\n if (l === 'false') {\n return booleanLiteral(false);\n }\n i = parseInt(l, 10);\n if (!Number.isNaN(i)) {\n return numericLiteral(i);\n }\n f = parseFloat(l);\n if (!Number.isNaN(f)) {\n return numericLiteral(f);\n }\n\n return stringLiteral(l);\n default:\n throw new Error('Unsupported literal type');\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAIA;AACA;AALA;AACA;AACA;;AAKA,IAAMA,OAAO,GAAG,qBAAqB;AAErC,IAAMC,GAAG,GAAG,IAAAC,iBAAQ,4GAKlB;;AAEF;AACA;AACA;AACA;AACA;AACO,SAASC,IAAI,CAACC,KAAK,EAAE;EAC1B,OAAOJ,OAAO,CAACG,IAAI,CAACC,KAAK,CAAC;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASC,KAAK,CAACD,KAAK,EAAE;EAC3B,OAAOH,GAAG,CAAC;IACTK,SAAS,EAAEC,OAAO,CAACH,KAAK,CAACI,OAAO,CAACR,OAAO,EAAE,EAAE,CAAC;EAC/C,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASO,OAAO,CAACE,CAAC,EAAE;EAClB;EACA;EACA,IAAIC,CAAC;EACL,IAAIC,CAAC;EAEL,8BAAeF,CAAC;IACd,KAAK,SAAS;MACZ,OAAO,IAAAG,qBAAc,EAACH,CAAC,CAAC;IAC1B,KAAK,QAAQ;MACX,OAAO,IAAAI,qBAAc,EAACJ,CAAC,CAAC;IAC1B,KAAK,QAAQ;MACX,IAAIA,CAAC,KAAK,MAAM,EAAE;QAChB,OAAO,IAAAG,qBAAc,EAAC,IAAI,CAAC;MAC7B;MACA,IAAIH,CAAC,KAAK,OAAO,EAAE;QACjB,OAAO,IAAAG,qBAAc,EAAC,KAAK,CAAC;MAC9B;MACAD,CAAC,GAAG,wBAASF,CAAC,EAAE,EAAE,CAAC;MACnB,IAAI,CAAC,oBAAaE,CAAC,CAAC,EAAE;QACpB,OAAO,IAAAE,qBAAc,EAACF,CAAC,CAAC;MAC1B;MACAD,CAAC,GAAG,0BAAWD,CAAC,CAAC;MACjB,IAAI,CAAC,oBAAaC,CAAC,CAAC,EAAE;QACpB,OAAO,IAAAG,qBAAc,EAACH,CAAC,CAAC;MAC1B;MAEA,OAAO,IAAAI,oBAAa,EAACL,CAAC,CAAC;IACzB;MACE,MAAM,IAAIM,KAAK,CAAC,0BAA0B,CAAC;EAAC;AAElD"}
|
package/dist/extract.js
CHANGED
|
@@ -1,25 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
-
|
|
5
4
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
-
|
|
7
5
|
_Object$defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
|
-
|
|
11
8
|
exports.default = extract;
|
|
12
|
-
|
|
13
9
|
var _fs = _interopRequireDefault(require("fs"));
|
|
14
|
-
|
|
15
10
|
var _traverse = _interopRequireDefault(require("@babel/traverse"));
|
|
16
|
-
|
|
17
11
|
var _doctrine = _interopRequireDefault(require("doctrine"));
|
|
18
|
-
|
|
19
12
|
var _types = require("@babel/types");
|
|
20
|
-
|
|
21
13
|
var _parse = _interopRequireDefault(require("./parse"));
|
|
22
|
-
|
|
23
14
|
/*!
|
|
24
15
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
25
16
|
*/
|
|
@@ -45,7 +36,6 @@ function extract(transform, filename) {
|
|
|
45
36
|
var code = _fs.default.readFileSync(filename, {
|
|
46
37
|
encoding: 'utf8'
|
|
47
38
|
});
|
|
48
|
-
|
|
49
39
|
var ast = (0, _parse.default)(code, {
|
|
50
40
|
sourceFilename: filename
|
|
51
41
|
});
|
|
@@ -61,7 +51,6 @@ function extract(transform, filename) {
|
|
|
61
51
|
recoverable: true,
|
|
62
52
|
lineNumbers: true
|
|
63
53
|
});
|
|
64
|
-
|
|
65
54
|
if (result.tags) {
|
|
66
55
|
result.tags.forEach(function (tag) {
|
|
67
56
|
if (tag.title === 'example') {
|
|
@@ -83,7 +72,6 @@ function extract(transform, filename) {
|
|
|
83
72
|
if (done) {
|
|
84
73
|
return;
|
|
85
74
|
}
|
|
86
|
-
|
|
87
75
|
path.pushContainer('body', results);
|
|
88
76
|
done = true;
|
|
89
77
|
}
|
|
@@ -92,22 +80,19 @@ function extract(transform, filename) {
|
|
|
92
80
|
});
|
|
93
81
|
return ast;
|
|
94
82
|
}
|
|
83
|
+
|
|
95
84
|
/**
|
|
96
85
|
* Extracts the name from the specified node
|
|
97
86
|
* @param {Node} node
|
|
98
87
|
* @returns {string}
|
|
99
88
|
*/
|
|
100
|
-
|
|
101
|
-
|
|
102
89
|
function getNodeName(node) {
|
|
103
90
|
if (node.id) {
|
|
104
91
|
return node.id.name;
|
|
105
92
|
}
|
|
106
|
-
|
|
107
93
|
if (node.key) {
|
|
108
94
|
return node.key.name;
|
|
109
95
|
}
|
|
110
|
-
|
|
111
96
|
throw new Error('Could not find name for node');
|
|
112
97
|
}
|
|
113
98
|
/**
|
|
@@ -115,20 +100,19 @@ function getNodeName(node) {
|
|
|
115
100
|
* @param {CommentBlock} comment
|
|
116
101
|
* @returns {Boolean}
|
|
117
102
|
*/
|
|
118
|
-
|
|
119
|
-
|
|
120
103
|
function isJSDocComment(comment) {
|
|
121
104
|
var asterisks = comment.value.match(/^(\*+)/);
|
|
122
|
-
|
|
123
105
|
if (comment.value.startsWith('/*') && comment.value.endsWith('*/')) {
|
|
124
106
|
return false;
|
|
125
|
-
}
|
|
126
|
-
|
|
107
|
+
}
|
|
127
108
|
|
|
128
|
-
return (comment.type === "CommentBlock" || // estree
|
|
129
109
|
// eslint-disable-next-line
|
|
130
|
-
comment.type ===
|
|
110
|
+
return (comment.type === 'CommentBlock' ||
|
|
111
|
+
// estree
|
|
112
|
+
// eslint-disable-next-line
|
|
113
|
+
comment.type === "Block") &&
|
|
114
|
+
// get-comments / traditional
|
|
131
115
|
// eslint-disable-next-line
|
|
132
|
-
|
|
116
|
+
asterisks && asterisks[1].length === 1;
|
|
133
117
|
}
|
|
134
118
|
//# sourceMappingURL=extract.js.map
|
package/dist/extract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["extract","transform","filename","code","fs","readFileSync","encoding","ast","parse","sourceFilename","results","done","traverse","enter","path","node","leadingComments","filter","isJSDocComment","forEach","comment","result","doctrine","value","unwrap","sloppy","recoverable","lineNumbers","tags","tag","title","push","description","name","getNodeName","loc","type","Program","exit","isProgram","pushContainer","id","key","Error","asterisks","match","startsWith","endsWith","length"],"sources":["extract.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\
|
|
1
|
+
{"version":3,"names":["extract","transform","filename","code","fs","readFileSync","encoding","ast","parse","sourceFilename","results","done","traverse","enter","path","node","leadingComments","filter","isJSDocComment","forEach","comment","result","doctrine","value","unwrap","sloppy","recoverable","lineNumbers","tags","tag","title","push","description","name","getNodeName","loc","type","Program","exit","isProgram","pushContainer","id","key","Error","asterisks","match","startsWith","endsWith","length"],"sources":["extract.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport fs from 'fs';\n\nimport traverse from '@babel/traverse';\nimport doctrine from 'doctrine';\nimport {isProgram} from '@babel/types';\n\nimport parse from './parse';\n/**\n * transform function which operates on each discovered example block\n * @callback transformCallback\n * @param {Object} options\n * @param {ast} options.comment\n * @param {string} options.name\n * @param {string} options.filename\n * @param {string} options.type\n */\n\n/**\n * Extracts comment blocks from the source code in the specified file\n * @param {transformCallback} transform\n * @param {string} filename\n * @returns {Array<ast>}\n */\nexport default function extract(transform, filename) {\n // eslint-disable-next-line no-sync\n const code = fs.readFileSync(filename, {encoding: 'utf8'});\n\n const ast = parse(code, {sourceFilename: filename});\n\n const results = [];\n\n let done = false;\n\n traverse(ast, {\n enter(path) {\n if (path.node.leadingComments) {\n path.node.leadingComments.filter(isJSDocComment).forEach((comment) => {\n const result = doctrine.parse(comment.value, {\n unwrap: true,\n sloppy: true,\n recoverable: true,\n lineNumbers: true,\n });\n\n if (result.tags) {\n result.tags.forEach((tag) => {\n if (tag.title === 'example') {\n results.push(\n transform({\n comment: tag.description,\n name: getNodeName(path.node),\n filename: path.node.loc.filename,\n type: path.node.type,\n })\n );\n }\n });\n }\n });\n }\n },\n Program: {\n exit(path) {\n if (isProgram(path)) {\n if (done) {\n return;\n }\n path.pushContainer('body', results);\n done = true;\n }\n },\n },\n });\n\n return ast;\n}\n\n/**\n * Extracts the name from the specified node\n * @param {Node} node\n * @returns {string}\n */\nfunction getNodeName(node) {\n if (node.id) {\n return node.id.name;\n }\n\n if (node.key) {\n return node.key.name;\n }\n\n throw new Error('Could not find name for node');\n}\n/**\n * Indicates if the specified comment block is a doc block\n * @param {CommentBlock} comment\n * @returns {Boolean}\n */\nfunction isJSDocComment(comment) {\n const asterisks = comment.value.match(/^(\\*+)/);\n\n if (comment.value.startsWith('/*') && comment.value.endsWith('*/')) {\n return false;\n }\n\n // eslint-disable-next-line\n return (\n (comment.type === 'CommentBlock' || // estree\n // eslint-disable-next-line\n comment.type === `Block`) && // get-comments / traditional\n // eslint-disable-next-line\n asterisks &&\n asterisks[1].length === 1\n );\n}\n"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,64 +1,50 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
var _path = _interopRequireDefault(require("path"));
|
|
6
|
-
|
|
7
5
|
var _generator = _interopRequireDefault(require("@babel/generator"));
|
|
8
|
-
|
|
9
6
|
var _extract = _interopRequireDefault(require("./extract"));
|
|
10
|
-
|
|
11
7
|
var _transform = _interopRequireDefault(require("./transform"));
|
|
12
|
-
|
|
13
8
|
/*!
|
|
14
9
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
15
10
|
*/
|
|
16
11
|
|
|
17
12
|
/* eslint require-jsdoc: [0] */
|
|
18
|
-
|
|
19
13
|
/* eslint no-console: [0] */
|
|
14
|
+
|
|
20
15
|
function isNodeModule(filename) {
|
|
21
16
|
return filename.includes('node_modules') && !filename.includes('packages/node_modules');
|
|
22
17
|
}
|
|
23
|
-
|
|
24
18
|
function inject(module, filename) {
|
|
25
19
|
var _generate = (0, _generator.default)((0, _extract.default)(_transform.default, filename), {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
20
|
+
compact: false,
|
|
21
|
+
quotes: 'single'
|
|
22
|
+
}),
|
|
23
|
+
code = _generate.code;
|
|
31
24
|
if (process.env.JSDOCTRINETEST_VERBOSE) {
|
|
32
25
|
console.log(filename);
|
|
33
26
|
console.log(code);
|
|
34
27
|
console.log();
|
|
35
28
|
}
|
|
36
|
-
|
|
37
29
|
module._compile(code, filename);
|
|
38
30
|
}
|
|
39
|
-
|
|
40
31
|
function enableSpecInjection() {
|
|
41
32
|
var dir;
|
|
42
33
|
var load = require.extensions['.js'];
|
|
43
|
-
|
|
44
34
|
require.extensions['.js'] = function loadWithSpecs(m, filename) {
|
|
45
35
|
if (isNodeModule(filename)) {
|
|
46
36
|
return load(m, filename);
|
|
47
|
-
}
|
|
37
|
+
}
|
|
38
|
+
// this is really janky, but so far seems to properly ensure we only load
|
|
48
39
|
// files in the directories specified to mocha
|
|
49
|
-
|
|
50
|
-
|
|
51
40
|
if (!dir) {
|
|
52
41
|
dir = _path.default.dirname(filename);
|
|
53
42
|
}
|
|
54
|
-
|
|
55
43
|
if (!filename.includes(dir)) {
|
|
56
44
|
return load(m, filename);
|
|
57
45
|
}
|
|
58
|
-
|
|
59
46
|
return inject(m, filename);
|
|
60
47
|
};
|
|
61
48
|
}
|
|
62
|
-
|
|
63
49
|
enableSpecInjection();
|
|
64
50
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["isNodeModule","filename","includes","inject","module","generate","extract","transform","compact","quotes","code","process","env","JSDOCTRINETEST_VERBOSE","console","log","_compile","enableSpecInjection","dir","load","require","extensions","loadWithSpecs","m","path","dirname"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint require-jsdoc: [0] */\n/* eslint no-console: [0] */\n\nimport path from 'path';\n\nimport generate from '@babel/generator';\n\nimport extract from './extract';\nimport transform from './transform';\n\nfunction isNodeModule(filename) {\n return filename.includes('node_modules') && !filename.includes('packages/node_modules');\n}\n\nfunction inject(module, filename) {\n const {code} = generate(extract(transform, filename), {\n compact: false,\n quotes: 'single'
|
|
1
|
+
{"version":3,"names":["isNodeModule","filename","includes","inject","module","generate","extract","transform","compact","quotes","code","process","env","JSDOCTRINETEST_VERBOSE","console","log","_compile","enableSpecInjection","dir","load","require","extensions","loadWithSpecs","m","path","dirname"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint require-jsdoc: [0] */\n/* eslint no-console: [0] */\n\nimport path from 'path';\n\nimport generate from '@babel/generator';\n\nimport extract from './extract';\nimport transform from './transform';\n\nfunction isNodeModule(filename) {\n return filename.includes('node_modules') && !filename.includes('packages/node_modules');\n}\n\nfunction inject(module, filename) {\n const {code} = generate(extract(transform, filename), {\n compact: false,\n quotes: 'single',\n });\n\n if (process.env.JSDOCTRINETEST_VERBOSE) {\n console.log(filename);\n console.log(code);\n console.log();\n }\n module._compile(code, filename);\n}\n\nfunction enableSpecInjection() {\n let dir;\n const load = require.extensions['.js'];\n\n require.extensions['.js'] = function loadWithSpecs(m, filename) {\n if (isNodeModule(filename)) {\n return load(m, filename);\n }\n // this is really janky, but so far seems to properly ensure we only load\n // files in the directories specified to mocha\n if (!dir) {\n dir = path.dirname(filename);\n }\n\n if (!filename.includes(dir)) {\n return load(m, filename);\n }\n\n return inject(m, filename);\n };\n}\n\nenableSpecInjection();\n"],"mappings":";;;AAOA;AAEA;AAEA;AACA;AAZA;AACA;AACA;;AAEA;AACA;;AASA,SAASA,YAAY,CAACC,QAAQ,EAAE;EAC9B,OAAOA,QAAQ,CAACC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAACD,QAAQ,CAACC,QAAQ,CAAC,uBAAuB,CAAC;AACzF;AAEA,SAASC,MAAM,CAACC,MAAM,EAAEH,QAAQ,EAAE;EAChC,gBAAe,IAAAI,kBAAQ,EAAC,IAAAC,gBAAO,EAACC,kBAAS,EAAEN,QAAQ,CAAC,EAAE;MACpDO,OAAO,EAAE,KAAK;MACdC,MAAM,EAAE;IACV,CAAC,CAAC;IAHKC,IAAI,aAAJA,IAAI;EAKX,IAAIC,OAAO,CAACC,GAAG,CAACC,sBAAsB,EAAE;IACtCC,OAAO,CAACC,GAAG,CAACd,QAAQ,CAAC;IACrBa,OAAO,CAACC,GAAG,CAACL,IAAI,CAAC;IACjBI,OAAO,CAACC,GAAG,EAAE;EACf;EACAX,MAAM,CAACY,QAAQ,CAACN,IAAI,EAAET,QAAQ,CAAC;AACjC;AAEA,SAASgB,mBAAmB,GAAG;EAC7B,IAAIC,GAAG;EACP,IAAMC,IAAI,GAAGC,OAAO,CAACC,UAAU,CAAC,KAAK,CAAC;EAEtCD,OAAO,CAACC,UAAU,CAAC,KAAK,CAAC,GAAG,SAASC,aAAa,CAACC,CAAC,EAAEtB,QAAQ,EAAE;IAC9D,IAAID,YAAY,CAACC,QAAQ,CAAC,EAAE;MAC1B,OAAOkB,IAAI,CAACI,CAAC,EAAEtB,QAAQ,CAAC;IAC1B;IACA;IACA;IACA,IAAI,CAACiB,GAAG,EAAE;MACRA,GAAG,GAAGM,aAAI,CAACC,OAAO,CAACxB,QAAQ,CAAC;IAC9B;IAEA,IAAI,CAACA,QAAQ,CAACC,QAAQ,CAACgB,GAAG,CAAC,EAAE;MAC3B,OAAOC,IAAI,CAACI,CAAC,EAAEtB,QAAQ,CAAC;IAC1B;IAEA,OAAOE,MAAM,CAACoB,CAAC,EAAEtB,QAAQ,CAAC;EAC5B,CAAC;AACH;AAEAgB,mBAAmB,EAAE"}
|
package/dist/mocha-template.js
CHANGED
|
@@ -1,24 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
-
|
|
5
4
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
-
|
|
7
5
|
_Object$defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
|
-
|
|
11
8
|
exports.default = generateSpec;
|
|
12
|
-
|
|
13
9
|
var _types = require("@babel/types");
|
|
14
|
-
|
|
15
10
|
var _template = _interopRequireDefault(require("@babel/template"));
|
|
16
|
-
|
|
17
11
|
/*!
|
|
18
12
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
19
13
|
*/
|
|
14
|
+
|
|
20
15
|
var makeDescribeBlock = (0, _template.default)("\n describe(DESCRIBED_THING, function() {\n IT_BLOCK\n });\n");
|
|
21
16
|
var makeItBlock = (0, _template.default)("\n it(DOES_A_THING, function() {\n STATEMENTS\n });\n");
|
|
17
|
+
|
|
22
18
|
/**
|
|
23
19
|
* Wraps a test case in a Mocha it-block
|
|
24
20
|
* @param {Object} a
|
|
@@ -26,14 +22,11 @@ var makeItBlock = (0, _template.default)("\n it(DOES_A_THING, function() {\n
|
|
|
26
22
|
* @param {Object} a.testCase
|
|
27
23
|
* @returns {[type]}
|
|
28
24
|
*/
|
|
29
|
-
|
|
30
25
|
function generateSpec(a) {
|
|
31
26
|
var itLine = a.name;
|
|
32
|
-
|
|
33
27
|
if (a.type.toLowerCase().includes('function')) {
|
|
34
28
|
itLine += '()';
|
|
35
29
|
}
|
|
36
|
-
|
|
37
30
|
var d = makeDescribeBlock({
|
|
38
31
|
DESCRIBED_THING: (0, _types.stringLiteral)(a.filename),
|
|
39
32
|
IT_BLOCK: makeItBlock({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["makeDescribeBlock","template","makeItBlock","generateSpec","a","itLine","name","type","toLowerCase","includes","d","DESCRIBED_THING","stringLiteral","filename","IT_BLOCK","DOES_A_THING","STATEMENTS","testCase"],"sources":["mocha-template.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {stringLiteral} from '@babel/types';\nimport template from '@babel/template';\n\nconst makeDescribeBlock = template(`\n describe(DESCRIBED_THING, function() {\n IT_BLOCK\n });\n`);\n\nconst makeItBlock = template(`\n it(DOES_A_THING, function() {\n STATEMENTS\n });\n`);\n\n/**\n * Wraps a test case in a Mocha it-block\n * @param {Object} a\n * @param {string} a.name\n * @param {Object} a.testCase\n * @returns {[type]}\n */\nexport default function generateSpec(a) {\n let itLine = a.name;\n\n if (a.type.toLowerCase().includes('function')) {\n itLine += '()';\n }\n\n const d = makeDescribeBlock({\n DESCRIBED_THING: stringLiteral(a.filename),\n IT_BLOCK: makeItBlock({\n DOES_A_THING: stringLiteral(itLine),\n STATEMENTS: a.testCase
|
|
1
|
+
{"version":3,"names":["makeDescribeBlock","template","makeItBlock","generateSpec","a","itLine","name","type","toLowerCase","includes","d","DESCRIBED_THING","stringLiteral","filename","IT_BLOCK","DOES_A_THING","STATEMENTS","testCase"],"sources":["mocha-template.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {stringLiteral} from '@babel/types';\nimport template from '@babel/template';\n\nconst makeDescribeBlock = template(`\n describe(DESCRIBED_THING, function() {\n IT_BLOCK\n });\n`);\n\nconst makeItBlock = template(`\n it(DOES_A_THING, function() {\n STATEMENTS\n });\n`);\n\n/**\n * Wraps a test case in a Mocha it-block\n * @param {Object} a\n * @param {string} a.name\n * @param {Object} a.testCase\n * @returns {[type]}\n */\nexport default function generateSpec(a) {\n let itLine = a.name;\n\n if (a.type.toLowerCase().includes('function')) {\n itLine += '()';\n }\n\n const d = makeDescribeBlock({\n DESCRIBED_THING: stringLiteral(a.filename),\n IT_BLOCK: makeItBlock({\n DOES_A_THING: stringLiteral(itLine),\n STATEMENTS: a.testCase,\n }),\n });\n\n return d;\n}\n"],"mappings":";;;;;;;;AAIA;AACA;AALA;AACA;AACA;;AAKA,IAAMA,iBAAiB,GAAG,IAAAC,iBAAQ,sEAIhC;AAEF,IAAMC,WAAW,GAAG,IAAAD,iBAAQ,+DAI1B;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASE,YAAY,CAACC,CAAC,EAAE;EACtC,IAAIC,MAAM,GAAGD,CAAC,CAACE,IAAI;EAEnB,IAAIF,CAAC,CAACG,IAAI,CAACC,WAAW,EAAE,CAACC,QAAQ,CAAC,UAAU,CAAC,EAAE;IAC7CJ,MAAM,IAAI,IAAI;EAChB;EAEA,IAAMK,CAAC,GAAGV,iBAAiB,CAAC;IAC1BW,eAAe,EAAE,IAAAC,oBAAa,EAACR,CAAC,CAACS,QAAQ,CAAC;IAC1CC,QAAQ,EAAEZ,WAAW,CAAC;MACpBa,YAAY,EAAE,IAAAH,oBAAa,EAACP,MAAM,CAAC;MACnCW,UAAU,EAAEZ,CAAC,CAACa;IAChB,CAAC;EACH,CAAC,CAAC;EAEF,OAAOP,CAAC;AACV"}
|
package/dist/parse.js
CHANGED
|
@@ -1,19 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
-
|
|
5
4
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
-
|
|
7
5
|
_Object$defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
|
-
|
|
11
8
|
exports.default = parse;
|
|
12
|
-
|
|
13
9
|
var _defaults2 = _interopRequireDefault(require("lodash/defaults"));
|
|
14
|
-
|
|
15
10
|
var _babylon = require("babylon");
|
|
16
|
-
|
|
17
11
|
/*!
|
|
18
12
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
19
13
|
*/
|
package/dist/parse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["parse","code","options","babelParse","allowImportExportEverywhere","sourceType","plugins"],"sources":["parse.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {parse as babelParse} from 'babylon';\nimport {defaults} from 'lodash';\n\n/**\n * Wrapper around babylon's parse with defaults set\n * @param {string} code\n * @param {object} options\n * @returns {ast}\n */\nexport default function parse(code, options) {\n return babelParse(code
|
|
1
|
+
{"version":3,"names":["parse","code","options","babelParse","allowImportExportEverywhere","sourceType","plugins"],"sources":["parse.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {parse as babelParse} from 'babylon';\nimport {defaults} from 'lodash';\n\n/**\n * Wrapper around babylon's parse with defaults set\n * @param {string} code\n * @param {object} options\n * @returns {ast}\n */\nexport default function parse(code, options) {\n return babelParse(\n code,\n defaults(options, {\n allowImportExportEverywhere: true,\n sourceType: 'module',\n plugins: [\n 'jsx',\n 'flow',\n 'asyncFunctions',\n 'classConstructorCall',\n 'doExpressions',\n 'trailingFunctionCommas',\n 'objectRestSpread',\n 'decorators',\n 'classProperties',\n 'exportExtensions',\n 'exponentiationOperator',\n 'asyncGenerators',\n 'functionBind',\n 'functionSent',\n ],\n })\n );\n}\n"],"mappings":";;;;;;;;;AAIA;AAJA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACe,SAASA,KAAK,CAACC,IAAI,EAAEC,OAAO,EAAE;EAC3C,OAAO,IAAAC,cAAU,EACfF,IAAI,EACJ,wBAASC,OAAO,EAAE;IAChBE,2BAA2B,EAAE,IAAI;IACjCC,UAAU,EAAE,QAAQ;IACpBC,OAAO,EAAE,CACP,KAAK,EACL,MAAM,EACN,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,cAAc,EACd,cAAc;EAElB,CAAC,CAAC,CACH;AACH"}
|
package/dist/transform.js
CHANGED
|
@@ -1,31 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
-
|
|
5
4
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
-
|
|
7
5
|
_Object$defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
|
-
|
|
11
8
|
exports.default = transform;
|
|
12
|
-
|
|
13
9
|
var _deleteProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/delete-property"));
|
|
14
|
-
|
|
15
10
|
var _template = _interopRequireDefault(require("@babel/template"));
|
|
16
|
-
|
|
17
11
|
var _traverse = _interopRequireDefault(require("@babel/traverse"));
|
|
18
|
-
|
|
19
12
|
var _parse = _interopRequireDefault(require("./parse"));
|
|
20
|
-
|
|
21
13
|
var _mochaTemplate = _interopRequireDefault(require("./mocha-template"));
|
|
22
|
-
|
|
23
14
|
var _literal = require("./assertions/literal");
|
|
24
|
-
|
|
25
15
|
/*!
|
|
26
16
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
27
17
|
*/
|
|
18
|
+
|
|
28
19
|
var assertionStatementTemplate = (0, _template.default)("\n return Promise.resolve(ORIGINAL)\n .then(function(result) {\n ASSERTIONS\n })\n");
|
|
20
|
+
|
|
29
21
|
/**
|
|
30
22
|
* @param {Object} options
|
|
31
23
|
* @param {ast} options.comment
|
|
@@ -34,18 +26,16 @@ var assertionStatementTemplate = (0, _template.default)("\n return Promise.reso
|
|
|
34
26
|
* @param {string} options.type
|
|
35
27
|
* @returns {ast}
|
|
36
28
|
*/
|
|
37
|
-
|
|
38
29
|
function transform(_ref) {
|
|
39
30
|
var comment = _ref.comment,
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
31
|
+
name = _ref.name,
|
|
32
|
+
filename = _ref.filename,
|
|
33
|
+
type = _ref.type;
|
|
43
34
|
var ast = (0, _parse.default)(comment);
|
|
44
35
|
(0, _traverse.default)(ast, {
|
|
45
36
|
enter: function enter(path) {
|
|
46
37
|
if (path.node.trailingComments) {
|
|
47
38
|
var assertions = path.node.trailingComments.map(makeAsserter);
|
|
48
|
-
|
|
49
39
|
if (assertions.length) {
|
|
50
40
|
(0, _deleteProperty.default)(path.node, 'trailingComments');
|
|
51
41
|
path.replaceWith(assertionStatementTemplate({
|
|
@@ -63,18 +53,16 @@ function transform(_ref) {
|
|
|
63
53
|
type: type
|
|
64
54
|
});
|
|
65
55
|
}
|
|
56
|
+
|
|
66
57
|
/**
|
|
67
58
|
* Takes a trailing comment from an example block and changes it to an assertion
|
|
68
59
|
* @param {CommentBlock} comment
|
|
69
60
|
* @returns {ast}
|
|
70
61
|
*/
|
|
71
|
-
|
|
72
|
-
|
|
73
62
|
function makeAsserter(comment) {
|
|
74
63
|
if ((0, _literal.test)(comment.value)) {
|
|
75
64
|
return (0, _literal.build)(comment.value);
|
|
76
65
|
}
|
|
77
|
-
|
|
78
66
|
return null;
|
|
79
67
|
}
|
|
80
68
|
//# sourceMappingURL=transform.js.map
|
package/dist/transform.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["assertionStatementTemplate","template","transform","comment","name","filename","type","ast","parse","traverse","enter","path","node","trailingComments","assertions","map","makeAsserter","length","replaceWith","ORIGINAL","ASSERTIONS","generateSpec","testCase","literalAssertionTest","value","buildLiteralAssertion"],"sources":["transform.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\
|
|
1
|
+
{"version":3,"names":["assertionStatementTemplate","template","transform","comment","name","filename","type","ast","parse","traverse","enter","path","node","trailingComments","assertions","map","makeAsserter","length","replaceWith","ORIGINAL","ASSERTIONS","generateSpec","testCase","literalAssertionTest","value","buildLiteralAssertion"],"sources":["transform.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport template from '@babel/template';\nimport traverse from '@babel/traverse';\n\nimport parse from './parse';\nimport generateSpec from './mocha-template';\nimport {build as buildLiteralAssertion, test as literalAssertionTest} from './assertions/literal';\n\nconst assertionStatementTemplate = template(`\n return Promise.resolve(ORIGINAL)\n .then(function(result) {\n ASSERTIONS\n })\n`);\n\n/**\n * @param {Object} options\n * @param {ast} options.comment\n * @param {string} options.name\n * @param {string} options.filename\n * @param {string} options.type\n * @returns {ast}\n */\nexport default function transform({comment, name, filename, type}) {\n const ast = parse(comment);\n\n traverse(ast, {\n enter(path) {\n if (path.node.trailingComments) {\n const assertions = path.node.trailingComments.map(makeAsserter);\n\n if (assertions.length) {\n Reflect.deleteProperty(path.node, 'trailingComments');\n\n path.replaceWith(\n assertionStatementTemplate({\n ORIGINAL: path.node,\n ASSERTIONS: assertions,\n })\n );\n }\n }\n },\n });\n\n return generateSpec({\n testCase: ast,\n name,\n filename,\n type,\n });\n}\n\n/**\n * Takes a trailing comment from an example block and changes it to an assertion\n * @param {CommentBlock} comment\n * @returns {ast}\n */\nfunction makeAsserter(comment) {\n if (literalAssertionTest(comment.value)) {\n return buildLiteralAssertion(comment.value);\n }\n\n return null;\n}\n"],"mappings":";;;;;;;;;AAIA;AACA;AAEA;AACA;AACA;AATA;AACA;AACA;;AASA,IAAMA,0BAA0B,GAAG,IAAAC,iBAAQ,mGAKzC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASC,SAAS,OAAkC;EAAA,IAAhCC,OAAO,QAAPA,OAAO;IAAEC,IAAI,QAAJA,IAAI;IAAEC,QAAQ,QAARA,QAAQ;IAAEC,IAAI,QAAJA,IAAI;EAC9D,IAAMC,GAAG,GAAG,IAAAC,cAAK,EAACL,OAAO,CAAC;EAE1B,IAAAM,iBAAQ,EAACF,GAAG,EAAE;IACZG,KAAK,iBAACC,IAAI,EAAE;MACV,IAAIA,IAAI,CAACC,IAAI,CAACC,gBAAgB,EAAE;QAC9B,IAAMC,UAAU,GAAGH,IAAI,CAACC,IAAI,CAACC,gBAAgB,CAACE,GAAG,CAACC,YAAY,CAAC;QAE/D,IAAIF,UAAU,CAACG,MAAM,EAAE;UACrB,6BAAuBN,IAAI,CAACC,IAAI,EAAE,kBAAkB,CAAC;UAErDD,IAAI,CAACO,WAAW,CACdlB,0BAA0B,CAAC;YACzBmB,QAAQ,EAAER,IAAI,CAACC,IAAI;YACnBQ,UAAU,EAAEN;UACd,CAAC,CAAC,CACH;QACH;MACF;IACF;EACF,CAAC,CAAC;EAEF,OAAO,IAAAO,sBAAY,EAAC;IAClBC,QAAQ,EAAEf,GAAG;IACbH,IAAI,EAAJA,IAAI;IACJC,QAAQ,EAARA,QAAQ;IACRC,IAAI,EAAJA;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASU,YAAY,CAACb,OAAO,EAAE;EAC7B,IAAI,IAAAoB,aAAoB,EAACpB,OAAO,CAACqB,KAAK,CAAC,EAAE;IACvC,OAAO,IAAAC,cAAqB,EAACtB,OAAO,CAACqB,KAAK,CAAC;EAC7C;EAEA,OAAO,IAAI;AACb"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/jsdoctrinetest",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.91",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"contributors": [
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"@babel/types": "^7.14.9"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@webex/test-helper-chai": "3.0.0-beta.
|
|
44
|
+
"@webex/test-helper-chai": "3.0.0-beta.91",
|
|
45
45
|
"babylon": "^6.18.0",
|
|
46
46
|
"doctrine": "^2.1.0",
|
|
47
47
|
"lodash": "^4.17.21"
|
|
@@ -3,11 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import template from '@babel/template';
|
|
6
|
-
import {
|
|
7
|
-
booleanLiteral,
|
|
8
|
-
numericLiteral,
|
|
9
|
-
stringLiteral
|
|
10
|
-
} from '@babel/types';
|
|
6
|
+
import {booleanLiteral, numericLiteral, stringLiteral} from '@babel/types';
|
|
11
7
|
|
|
12
8
|
const pattern = /^\s*?=>( async)?\s*/;
|
|
13
9
|
|
|
@@ -34,7 +30,7 @@ export function test(value) {
|
|
|
34
30
|
*/
|
|
35
31
|
export function build(value) {
|
|
36
32
|
return tpl({
|
|
37
|
-
ASSERTION: literal(value.replace(pattern, ''))
|
|
33
|
+
ASSERTION: literal(value.replace(pattern, '')),
|
|
38
34
|
});
|
|
39
35
|
}
|
|
40
36
|
|
|
@@ -46,7 +42,8 @@ export function build(value) {
|
|
|
46
42
|
function literal(l) {
|
|
47
43
|
/* eslint complexity: [0] */
|
|
48
44
|
// eslint-disable-next-line prefer-const
|
|
49
|
-
let f
|
|
45
|
+
let f;
|
|
46
|
+
let i;
|
|
50
47
|
|
|
51
48
|
switch (typeof l) {
|
|
52
49
|
case 'boolean':
|
package/src/extract.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
|
|
6
5
|
import fs from 'fs';
|
|
7
6
|
|
|
8
7
|
import traverse from '@babel/traverse';
|
|
@@ -39,29 +38,29 @@ export default function extract(transform, filename) {
|
|
|
39
38
|
traverse(ast, {
|
|
40
39
|
enter(path) {
|
|
41
40
|
if (path.node.leadingComments) {
|
|
42
|
-
path.node.leadingComments
|
|
43
|
-
.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
lineNumbers: true
|
|
50
|
-
});
|
|
41
|
+
path.node.leadingComments.filter(isJSDocComment).forEach((comment) => {
|
|
42
|
+
const result = doctrine.parse(comment.value, {
|
|
43
|
+
unwrap: true,
|
|
44
|
+
sloppy: true,
|
|
45
|
+
recoverable: true,
|
|
46
|
+
lineNumbers: true,
|
|
47
|
+
});
|
|
51
48
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
49
|
+
if (result.tags) {
|
|
50
|
+
result.tags.forEach((tag) => {
|
|
51
|
+
if (tag.title === 'example') {
|
|
52
|
+
results.push(
|
|
53
|
+
transform({
|
|
56
54
|
comment: tag.description,
|
|
57
55
|
name: getNodeName(path.node),
|
|
58
56
|
filename: path.node.loc.filename,
|
|
59
|
-
type: path.node.type
|
|
60
|
-
})
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
57
|
+
type: path.node.type,
|
|
58
|
+
})
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
});
|
|
65
64
|
}
|
|
66
65
|
},
|
|
67
66
|
Program: {
|
|
@@ -73,8 +72,8 @@ export default function extract(transform, filename) {
|
|
|
73
72
|
path.pushContainer('body', results);
|
|
74
73
|
done = true;
|
|
75
74
|
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
75
|
+
},
|
|
76
|
+
},
|
|
78
77
|
});
|
|
79
78
|
|
|
80
79
|
return ast;
|
|
@@ -109,9 +108,12 @@ function isJSDocComment(comment) {
|
|
|
109
108
|
}
|
|
110
109
|
|
|
111
110
|
// eslint-disable-next-line
|
|
112
|
-
return (
|
|
113
|
-
//
|
|
114
|
-
|
|
111
|
+
return (
|
|
112
|
+
(comment.type === 'CommentBlock' || // estree
|
|
113
|
+
// eslint-disable-next-line
|
|
114
|
+
comment.type === `Block`) && // get-comments / traditional
|
|
115
115
|
// eslint-disable-next-line
|
|
116
|
-
|
|
116
|
+
asterisks &&
|
|
117
|
+
asterisks[1].length === 1
|
|
118
|
+
);
|
|
117
119
|
}
|
package/src/index.js
CHANGED
package/src/mocha-template.js
CHANGED
package/src/parse.js
CHANGED
|
@@ -12,24 +12,27 @@ import {defaults} from 'lodash';
|
|
|
12
12
|
* @returns {ast}
|
|
13
13
|
*/
|
|
14
14
|
export default function parse(code, options) {
|
|
15
|
-
return babelParse(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
'
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
15
|
+
return babelParse(
|
|
16
|
+
code,
|
|
17
|
+
defaults(options, {
|
|
18
|
+
allowImportExportEverywhere: true,
|
|
19
|
+
sourceType: 'module',
|
|
20
|
+
plugins: [
|
|
21
|
+
'jsx',
|
|
22
|
+
'flow',
|
|
23
|
+
'asyncFunctions',
|
|
24
|
+
'classConstructorCall',
|
|
25
|
+
'doExpressions',
|
|
26
|
+
'trailingFunctionCommas',
|
|
27
|
+
'objectRestSpread',
|
|
28
|
+
'decorators',
|
|
29
|
+
'classProperties',
|
|
30
|
+
'exportExtensions',
|
|
31
|
+
'exponentiationOperator',
|
|
32
|
+
'asyncGenerators',
|
|
33
|
+
'functionBind',
|
|
34
|
+
'functionSent',
|
|
35
|
+
],
|
|
36
|
+
})
|
|
37
|
+
);
|
|
35
38
|
}
|
package/src/transform.js
CHANGED
|
@@ -2,16 +2,12 @@
|
|
|
2
2
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
|
|
6
5
|
import template from '@babel/template';
|
|
7
6
|
import traverse from '@babel/traverse';
|
|
8
7
|
|
|
9
8
|
import parse from './parse';
|
|
10
9
|
import generateSpec from './mocha-template';
|
|
11
|
-
import {
|
|
12
|
-
build as buildLiteralAssertion,
|
|
13
|
-
test as literalAssertionTest
|
|
14
|
-
} from './assertions/literal';
|
|
10
|
+
import {build as buildLiteralAssertion, test as literalAssertionTest} from './assertions/literal';
|
|
15
11
|
|
|
16
12
|
const assertionStatementTemplate = template(`
|
|
17
13
|
return Promise.resolve(ORIGINAL)
|
|
@@ -28,9 +24,7 @@ const assertionStatementTemplate = template(`
|
|
|
28
24
|
* @param {string} options.type
|
|
29
25
|
* @returns {ast}
|
|
30
26
|
*/
|
|
31
|
-
export default function transform({
|
|
32
|
-
comment, name, filename, type
|
|
33
|
-
}) {
|
|
27
|
+
export default function transform({comment, name, filename, type}) {
|
|
34
28
|
const ast = parse(comment);
|
|
35
29
|
|
|
36
30
|
traverse(ast, {
|
|
@@ -41,20 +35,22 @@ export default function transform({
|
|
|
41
35
|
if (assertions.length) {
|
|
42
36
|
Reflect.deleteProperty(path.node, 'trailingComments');
|
|
43
37
|
|
|
44
|
-
path.replaceWith(
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
38
|
+
path.replaceWith(
|
|
39
|
+
assertionStatementTemplate({
|
|
40
|
+
ORIGINAL: path.node,
|
|
41
|
+
ASSERTIONS: assertions,
|
|
42
|
+
})
|
|
43
|
+
);
|
|
48
44
|
}
|
|
49
45
|
}
|
|
50
|
-
}
|
|
46
|
+
},
|
|
51
47
|
});
|
|
52
48
|
|
|
53
49
|
return generateSpec({
|
|
54
50
|
testCase: ast,
|
|
55
51
|
name,
|
|
56
52
|
filename,
|
|
57
|
-
type
|
|
53
|
+
type,
|
|
58
54
|
});
|
|
59
55
|
}
|
|
60
56
|
|