@webex/jsdoctrinetest 2.59.2 → 2.59.3-next.1
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/.eslintrc.js +6 -6
- package/README.md +51 -51
- package/babel.config.js +3 -3
- package/dist/assertions/literal.js +14 -14
- package/dist/assertions/literal.js.map +1 -1
- package/dist/extract.js +23 -23
- package/dist/extract.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/mocha-template.js +8 -8
- package/dist/mocha-template.js.map +1 -1
- package/dist/parse.js +7 -7
- package/dist/parse.js.map +1 -1
- package/dist/transform.js +13 -13
- package/dist/transform.js.map +1 -1
- package/jest.config.js +3 -3
- package/package.json +13 -12
- package/process +1 -1
- package/src/assertions/literal.js +73 -73
- package/src/extract.js +119 -119
- package/src/index.js +55 -55
- package/src/mocha-template.js +43 -43
- package/src/parse.js +38 -38
- package/src/transform.js +68 -68
- package/test/unit/spec/default.js +11 -11
package/.eslintrc.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
const config = {
|
|
2
|
-
root: true,
|
|
3
|
-
extends: ['@webex/eslint-config-legacy'],
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
module.exports = config;
|
|
1
|
+
const config = {
|
|
2
|
+
root: true,
|
|
3
|
+
extends: ['@webex/eslint-config-legacy'],
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
module.exports = config;
|
package/README.md
CHANGED
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
# @webex/jsdoctrinetest
|
|
2
|
-
|
|
3
|
-
[](https://github.com/RichardLitt/standard-readme)
|
|
4
|
-
|
|
5
|
-
> Mocha plugin which parses source code for doc blocks containing assertions and runs them as mocha specs.
|
|
6
|
-
|
|
7
|
-
- [Install](#install)
|
|
8
|
-
- [Usage](#usage)
|
|
9
|
-
- [Contribute](#contribute)
|
|
10
|
-
- [Maintainers](#maintainers)
|
|
11
|
-
- [License](#license)
|
|
12
|
-
|
|
13
|
-
## Install
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
npm install --save @webex/jsdoctrinetest
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Usage
|
|
20
|
-
|
|
21
|
-
Assuming your source code is in `./src` and you've got code like
|
|
22
|
-
|
|
23
|
-
```js
|
|
24
|
-
/**
|
|
25
|
-
* @example
|
|
26
|
-
* fn();
|
|
27
|
-
* //=> true
|
|
28
|
-
* @returns {boolean}
|
|
29
|
-
*/
|
|
30
|
-
exports.fn = function fn() {
|
|
31
|
-
return true;
|
|
32
|
-
};
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
The following command will create a run a mocha spec asserting the result of `fn()` is `true`.
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
mocha -r @webex/jsdoctrinetest ./src
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
## Maintainers
|
|
42
|
-
|
|
43
|
-
This package is maintained by [Cisco Webex for Developers](https://developer.webex.com/).
|
|
44
|
-
|
|
45
|
-
## Contribute
|
|
46
|
-
|
|
47
|
-
Pull requests welcome. Please see [CONTRIBUTING.md](https://github.com/webex/webex-js-sdk/blob/master/CONTRIBUTING.md) for more details.
|
|
48
|
-
|
|
49
|
-
## License
|
|
50
|
-
|
|
51
|
-
© 2016-2020 Cisco and/or its affiliates. All Rights Reserved.
|
|
1
|
+
# @webex/jsdoctrinetest
|
|
2
|
+
|
|
3
|
+
[](https://github.com/RichardLitt/standard-readme)
|
|
4
|
+
|
|
5
|
+
> Mocha plugin which parses source code for doc blocks containing assertions and runs them as mocha specs.
|
|
6
|
+
|
|
7
|
+
- [Install](#install)
|
|
8
|
+
- [Usage](#usage)
|
|
9
|
+
- [Contribute](#contribute)
|
|
10
|
+
- [Maintainers](#maintainers)
|
|
11
|
+
- [License](#license)
|
|
12
|
+
|
|
13
|
+
## Install
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install --save @webex/jsdoctrinetest
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
Assuming your source code is in `./src` and you've got code like
|
|
22
|
+
|
|
23
|
+
```js
|
|
24
|
+
/**
|
|
25
|
+
* @example
|
|
26
|
+
* fn();
|
|
27
|
+
* //=> true
|
|
28
|
+
* @returns {boolean}
|
|
29
|
+
*/
|
|
30
|
+
exports.fn = function fn() {
|
|
31
|
+
return true;
|
|
32
|
+
};
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The following command will create a run a mocha spec asserting the result of `fn()` is `true`.
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
mocha -r @webex/jsdoctrinetest ./src
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Maintainers
|
|
42
|
+
|
|
43
|
+
This package is maintained by [Cisco Webex for Developers](https://developer.webex.com/).
|
|
44
|
+
|
|
45
|
+
## Contribute
|
|
46
|
+
|
|
47
|
+
Pull requests welcome. Please see [CONTRIBUTING.md](https://github.com/webex/webex-js-sdk/blob/master/CONTRIBUTING.md) for more details.
|
|
48
|
+
|
|
49
|
+
## License
|
|
50
|
+
|
|
51
|
+
© 2016-2020 Cisco and/or its affiliates. All Rights Reserved.
|
package/babel.config.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
const babelConfigLegacy = require('@webex/babel-config-legacy');
|
|
2
|
-
|
|
3
|
-
module.exports = babelConfigLegacy;
|
|
1
|
+
const babelConfigLegacy = require('@webex/babel-config-legacy');
|
|
2
|
+
|
|
3
|
+
module.exports = babelConfigLegacy;
|
|
@@ -13,26 +13,26 @@ var _parseFloat2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-j
|
|
|
13
13
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/typeof"));
|
|
14
14
|
var _template = _interopRequireDefault(require("@babel/template"));
|
|
15
15
|
var _types = require("@babel/types");
|
|
16
|
-
/*!
|
|
17
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
16
|
+
/*!
|
|
17
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
var pattern = /^\s*?=>( async)?\s*/;
|
|
21
21
|
var tpl = (0, _template.default)("\n (function() {\n var assert = require('assert');\n assert.equal(result, ASSERTION);\n })();\n");
|
|
22
22
|
|
|
23
|
-
/**
|
|
24
|
-
* Indicates whether the specified value defines a literal assertion
|
|
25
|
-
* @param {string} value
|
|
26
|
-
* @returns {Boolean}
|
|
23
|
+
/**
|
|
24
|
+
* Indicates whether the specified value defines a literal assertion
|
|
25
|
+
* @param {string} value
|
|
26
|
+
* @returns {Boolean}
|
|
27
27
|
*/
|
|
28
28
|
function test(value) {
|
|
29
29
|
return pattern.test(value);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
/**
|
|
33
|
-
* Builds a literal assertion
|
|
34
|
-
* @param {string} value
|
|
35
|
-
* @returns {ast}
|
|
32
|
+
/**
|
|
33
|
+
* Builds a literal assertion
|
|
34
|
+
* @param {string} value
|
|
35
|
+
* @returns {ast}
|
|
36
36
|
*/
|
|
37
37
|
function build(value) {
|
|
38
38
|
return tpl({
|
|
@@ -40,10 +40,10 @@ function build(value) {
|
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
/**
|
|
44
|
-
* Coerces a string into a type
|
|
45
|
-
* @param {string} l
|
|
46
|
-
* @returns {Literal}
|
|
43
|
+
/**
|
|
44
|
+
* Coerces a string into a type
|
|
45
|
+
* @param {string} l
|
|
46
|
+
* @returns {Literal}
|
|
47
47
|
*/
|
|
48
48
|
function literal(l) {
|
|
49
49
|
/* eslint complexity: [0] */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_template","_interopRequireDefault","require","_types","pattern","tpl","template","test","value","build","ASSERTION","literal","replace","l","f","i","_typeof2","default","booleanLiteral","numericLiteral","_parseInt2","_isNan","_parseFloat2","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,IAAAA,SAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AALA;AACA;AACA;;AAKA,IAAME,OAAO,GAAG,qBAAqB;AAErC,IAAMC,GAAG,GAAG,IAAAC,iBAAQ,4GAKlB;;AAEF;AACA;AACA;AACA;AACA;AACO,SAASC,IAAIA,CAACC,KAAK,EAAE;EAC1B,OAAOJ,OAAO,CAACG,IAAI,CAACC,KAAK,CAAC;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASC,KAAKA,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,OAAOA,CAACE,CAAC,EAAE;EAClB;EACA;EACA,IAAIC,CAAC;EACL,IAAIC,CAAC;EAEL,YAAAC,QAAA,CAAAC,OAAA,EAAeJ,CAAC;IACd,KAAK,SAAS;MACZ,OAAO,IAAAK,qBAAc,EAACL,CAAC,CAAC;IAC1B,KAAK,QAAQ;MACX,OAAO,IAAAM,qBAAc,EAACN,CAAC,CAAC;IAC1B,KAAK,QAAQ;MACX,IAAIA,CAAC,KAAK,MAAM,EAAE;QAChB,OAAO,IAAAK,qBAAc,EAAC,IAAI,CAAC;MAC7B;MACA,IAAIL,CAAC,KAAK,OAAO,EAAE;QACjB,OAAO,IAAAK,qBAAc,EAAC,KAAK,CAAC;MAC9B;MACAH,CAAC,GAAG,IAAAK,UAAA,CAAAH,OAAA,EAASJ,CAAC,EAAE,EAAE,CAAC;MACnB,IAAI,CAAC,IAAAQ,MAAA,CAAAJ,OAAA,EAAaF,CAAC,CAAC,EAAE;QACpB,OAAO,IAAAI,qBAAc,EAACJ,CAAC,CAAC;MAC1B;MACAD,CAAC,GAAG,IAAAQ,YAAA,CAAAL,OAAA,EAAWJ,CAAC,CAAC;MACjB,IAAI,CAAC,IAAAQ,MAAA,CAAAJ,OAAA,EAAaH,CAAC,CAAC,EAAE;QACpB,OAAO,IAAAK,qBAAc,EAACL,CAAC,CAAC;MAC1B;MAEA,OAAO,IAAAS,oBAAa,EAACV,CAAC,CAAC;IACzB;MACE,MAAM,IAAIW,KAAK,CAAC,0BAA0B,CAAC;EAAC;AAElD"}
|
|
1
|
+
{"version":3,"names":["_template","_interopRequireDefault","require","_types","pattern","tpl","template","test","value","build","ASSERTION","literal","replace","l","f","i","_typeof2","default","booleanLiteral","numericLiteral","_parseInt2","_isNan","_parseFloat2","stringLiteral","Error"],"sources":["literal.js"],"sourcesContent":["/*!\r\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\r\n */\r\n\r\nimport template from '@babel/template';\r\nimport {booleanLiteral, numericLiteral, stringLiteral} from '@babel/types';\r\n\r\nconst pattern = /^\\s*?=>( async)?\\s*/;\r\n\r\nconst tpl = template(`\r\n (function() {\r\n var assert = require('assert');\r\n assert.equal(result, ASSERTION);\r\n })();\r\n`);\r\n\r\n/**\r\n * Indicates whether the specified value defines a literal assertion\r\n * @param {string} value\r\n * @returns {Boolean}\r\n */\r\nexport function test(value) {\r\n return pattern.test(value);\r\n}\r\n\r\n/**\r\n * Builds a literal assertion\r\n * @param {string} value\r\n * @returns {ast}\r\n */\r\nexport function build(value) {\r\n return tpl({\r\n ASSERTION: literal(value.replace(pattern, '')),\r\n });\r\n}\r\n\r\n/**\r\n * Coerces a string into a type\r\n * @param {string} l\r\n * @returns {Literal}\r\n */\r\nfunction literal(l) {\r\n /* eslint complexity: [0] */\r\n // eslint-disable-next-line prefer-const\r\n let f;\r\n let i;\r\n\r\n switch (typeof l) {\r\n case 'boolean':\r\n return booleanLiteral(l);\r\n case 'number':\r\n return numericLiteral(l);\r\n case 'string':\r\n if (l === 'true') {\r\n return booleanLiteral(true);\r\n }\r\n if (l === 'false') {\r\n return booleanLiteral(false);\r\n }\r\n i = parseInt(l, 10);\r\n if (!Number.isNaN(i)) {\r\n return numericLiteral(i);\r\n }\r\n f = parseFloat(l);\r\n if (!Number.isNaN(f)) {\r\n return numericLiteral(f);\r\n }\r\n\r\n return stringLiteral(l);\r\n default:\r\n throw new Error('Unsupported literal type');\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;;AAIA,IAAAA,SAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AALA;AACA;AACA;;AAKA,IAAME,OAAO,GAAG,qBAAqB;AAErC,IAAMC,GAAG,GAAG,IAAAC,iBAAQ,4GAKlB;;AAEF;AACA;AACA;AACA;AACA;AACO,SAASC,IAAIA,CAACC,KAAK,EAAE;EAC1B,OAAOJ,OAAO,CAACG,IAAI,CAACC,KAAK,CAAC;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASC,KAAKA,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,OAAOA,CAACE,CAAC,EAAE;EAClB;EACA;EACA,IAAIC,CAAC;EACL,IAAIC,CAAC;EAEL,YAAAC,QAAA,CAAAC,OAAA,EAAeJ,CAAC;IACd,KAAK,SAAS;MACZ,OAAO,IAAAK,qBAAc,EAACL,CAAC,CAAC;IAC1B,KAAK,QAAQ;MACX,OAAO,IAAAM,qBAAc,EAACN,CAAC,CAAC;IAC1B,KAAK,QAAQ;MACX,IAAIA,CAAC,KAAK,MAAM,EAAE;QAChB,OAAO,IAAAK,qBAAc,EAAC,IAAI,CAAC;MAC7B;MACA,IAAIL,CAAC,KAAK,OAAO,EAAE;QACjB,OAAO,IAAAK,qBAAc,EAAC,KAAK,CAAC;MAC9B;MACAH,CAAC,GAAG,IAAAK,UAAA,CAAAH,OAAA,EAASJ,CAAC,EAAE,EAAE,CAAC;MACnB,IAAI,CAAC,IAAAQ,MAAA,CAAAJ,OAAA,EAAaF,CAAC,CAAC,EAAE;QACpB,OAAO,IAAAI,qBAAc,EAACJ,CAAC,CAAC;MAC1B;MACAD,CAAC,GAAG,IAAAQ,YAAA,CAAAL,OAAA,EAAWJ,CAAC,CAAC;MACjB,IAAI,CAAC,IAAAQ,MAAA,CAAAJ,OAAA,EAAaH,CAAC,CAAC,EAAE;QACpB,OAAO,IAAAK,qBAAc,EAACL,CAAC,CAAC;MAC1B;MAEA,OAAO,IAAAS,oBAAa,EAACV,CAAC,CAAC;IACzB;MACE,MAAM,IAAIW,KAAK,CAAC,0BAA0B,CAAC;EAAC;AAElD"}
|
package/dist/extract.js
CHANGED
|
@@ -11,25 +11,25 @@ var _traverse = _interopRequireDefault(require("@babel/traverse"));
|
|
|
11
11
|
var _doctrine = _interopRequireDefault(require("doctrine"));
|
|
12
12
|
var _types = require("@babel/types");
|
|
13
13
|
var _parse = _interopRequireDefault(require("./parse"));
|
|
14
|
-
/*!
|
|
15
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
14
|
+
/*!
|
|
15
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
/**
|
|
19
|
-
* transform function which operates on each discovered example block
|
|
20
|
-
* @callback transformCallback
|
|
21
|
-
* @param {Object} options
|
|
22
|
-
* @param {ast} options.comment
|
|
23
|
-
* @param {string} options.name
|
|
24
|
-
* @param {string} options.filename
|
|
25
|
-
* @param {string} options.type
|
|
18
|
+
/**
|
|
19
|
+
* transform function which operates on each discovered example block
|
|
20
|
+
* @callback transformCallback
|
|
21
|
+
* @param {Object} options
|
|
22
|
+
* @param {ast} options.comment
|
|
23
|
+
* @param {string} options.name
|
|
24
|
+
* @param {string} options.filename
|
|
25
|
+
* @param {string} options.type
|
|
26
26
|
*/
|
|
27
27
|
|
|
28
|
-
/**
|
|
29
|
-
* Extracts comment blocks from the source code in the specified file
|
|
30
|
-
* @param {transformCallback} transform
|
|
31
|
-
* @param {string} filename
|
|
32
|
-
* @returns {Array<ast>}
|
|
28
|
+
/**
|
|
29
|
+
* Extracts comment blocks from the source code in the specified file
|
|
30
|
+
* @param {transformCallback} transform
|
|
31
|
+
* @param {string} filename
|
|
32
|
+
* @returns {Array<ast>}
|
|
33
33
|
*/
|
|
34
34
|
function extract(transform, filename) {
|
|
35
35
|
// eslint-disable-next-line no-sync
|
|
@@ -81,10 +81,10 @@ function extract(transform, filename) {
|
|
|
81
81
|
return ast;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
/**
|
|
85
|
-
* Extracts the name from the specified node
|
|
86
|
-
* @param {Node} node
|
|
87
|
-
* @returns {string}
|
|
84
|
+
/**
|
|
85
|
+
* Extracts the name from the specified node
|
|
86
|
+
* @param {Node} node
|
|
87
|
+
* @returns {string}
|
|
88
88
|
*/
|
|
89
89
|
function getNodeName(node) {
|
|
90
90
|
if (node.id) {
|
|
@@ -95,10 +95,10 @@ function getNodeName(node) {
|
|
|
95
95
|
}
|
|
96
96
|
throw new Error('Could not find name for node');
|
|
97
97
|
}
|
|
98
|
-
/**
|
|
99
|
-
* Indicates if the specified comment block is a doc block
|
|
100
|
-
* @param {CommentBlock} comment
|
|
101
|
-
* @returns {Boolean}
|
|
98
|
+
/**
|
|
99
|
+
* Indicates if the specified comment block is a doc block
|
|
100
|
+
* @param {CommentBlock} comment
|
|
101
|
+
* @returns {Boolean}
|
|
102
102
|
*/
|
|
103
103
|
function isJSDocComment(comment) {
|
|
104
104
|
var asterisks = comment.value.match(/^(\*+)/);
|
package/dist/extract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_fs","_interopRequireDefault","require","_traverse","_doctrine","_types","_parse","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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"}
|
|
1
|
+
{"version":3,"names":["_fs","_interopRequireDefault","require","_traverse","_doctrine","_types","_parse","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":["/*!\r\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\r\n */\r\n\r\nimport fs from 'fs';\r\n\r\nimport traverse from '@babel/traverse';\r\nimport doctrine from 'doctrine';\r\nimport {isProgram} from '@babel/types';\r\n\r\nimport parse from './parse';\r\n/**\r\n * transform function which operates on each discovered example block\r\n * @callback transformCallback\r\n * @param {Object} options\r\n * @param {ast} options.comment\r\n * @param {string} options.name\r\n * @param {string} options.filename\r\n * @param {string} options.type\r\n */\r\n\r\n/**\r\n * Extracts comment blocks from the source code in the specified file\r\n * @param {transformCallback} transform\r\n * @param {string} filename\r\n * @returns {Array<ast>}\r\n */\r\nexport default function extract(transform, filename) {\r\n // eslint-disable-next-line no-sync\r\n const code = fs.readFileSync(filename, {encoding: 'utf8'});\r\n\r\n const ast = parse(code, {sourceFilename: filename});\r\n\r\n const results = [];\r\n\r\n let done = false;\r\n\r\n traverse(ast, {\r\n enter(path) {\r\n if (path.node.leadingComments) {\r\n path.node.leadingComments.filter(isJSDocComment).forEach((comment) => {\r\n const result = doctrine.parse(comment.value, {\r\n unwrap: true,\r\n sloppy: true,\r\n recoverable: true,\r\n lineNumbers: true,\r\n });\r\n\r\n if (result.tags) {\r\n result.tags.forEach((tag) => {\r\n if (tag.title === 'example') {\r\n results.push(\r\n transform({\r\n comment: tag.description,\r\n name: getNodeName(path.node),\r\n filename: path.node.loc.filename,\r\n type: path.node.type,\r\n })\r\n );\r\n }\r\n });\r\n }\r\n });\r\n }\r\n },\r\n Program: {\r\n exit(path) {\r\n if (isProgram(path)) {\r\n if (done) {\r\n return;\r\n }\r\n path.pushContainer('body', results);\r\n done = true;\r\n }\r\n },\r\n },\r\n });\r\n\r\n return ast;\r\n}\r\n\r\n/**\r\n * Extracts the name from the specified node\r\n * @param {Node} node\r\n * @returns {string}\r\n */\r\nfunction getNodeName(node) {\r\n if (node.id) {\r\n return node.id.name;\r\n }\r\n\r\n if (node.key) {\r\n return node.key.name;\r\n }\r\n\r\n throw new Error('Could not find name for node');\r\n}\r\n/**\r\n * Indicates if the specified comment block is a doc block\r\n * @param {CommentBlock} comment\r\n * @returns {Boolean}\r\n */\r\nfunction isJSDocComment(comment) {\r\n const asterisks = comment.value.match(/^(\\*+)/);\r\n\r\n if (comment.value.startsWith('/*') && comment.value.endsWith('*/')) {\r\n return false;\r\n }\r\n\r\n // eslint-disable-next-line\r\n return (\r\n (comment.type === 'CommentBlock' || // estree\r\n // eslint-disable-next-line\r\n comment.type === `Block`) && // get-comments / traditional\r\n // eslint-disable-next-line\r\n asterisks &&\r\n asterisks[1].length === 1\r\n );\r\n}\r\n"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,8 +5,8 @@ var _path = _interopRequireDefault(require("path"));
|
|
|
5
5
|
var _generator = _interopRequireDefault(require("@babel/generator"));
|
|
6
6
|
var _extract = _interopRequireDefault(require("./extract"));
|
|
7
7
|
var _transform = _interopRequireDefault(require("./transform"));
|
|
8
|
-
/*!
|
|
9
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
8
|
+
/*!
|
|
9
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
/* eslint require-jsdoc: [0] */
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_path","_interopRequireDefault","require","_generator","_extract","_transform","isNodeModule","filename","includes","inject","module","_generate","generate","extract","transform","compact","quotes","code","process","env","JSDOCTRINETEST_VERBOSE","console","log","_compile","enableSpecInjection","dir","load","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,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,QAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,UAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAZA;AACA;AACA;;AAEA;AACA;;AASA,SAASI,YAAYA,CAACC,QAAQ,EAAE;EAC9B,OAAOA,QAAQ,CAACC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAACD,QAAQ,CAACC,QAAQ,CAAC,uBAAuB,CAAC;AACzF;AAEA,SAASC,MAAMA,CAACC,MAAM,EAAEH,QAAQ,EAAE;EAChC,IAAAI,SAAA,GAAe,IAAAC,kBAAQ,EAAC,IAAAC,gBAAO,EAACC,kBAAS,EAAEP,QAAQ,CAAC,EAAE;MACpDQ,OAAO,EAAE,KAAK;MACdC,MAAM,EAAE;IACV,CAAC,CAAC;IAHKC,IAAI,GAAAN,SAAA,CAAJM,IAAI;EAKX,IAAIC,OAAO,CAACC,GAAG,CAACC,sBAAsB,EAAE;IACtCC,OAAO,CAACC,GAAG,CAACf,QAAQ,CAAC;IACrBc,OAAO,CAACC,GAAG,CAACL,IAAI,CAAC;IACjBI,OAAO,CAACC,GAAG,EAAE;EACf;EACAZ,MAAM,CAACa,QAAQ,CAACN,IAAI,EAAEV,QAAQ,CAAC;AACjC;AAEA,SAASiB,mBAAmBA,CAAA,EAAG;EAC7B,IAAIC,GAAG;EACP,IAAMC,IAAI,GAAGxB,OAAO,CAACyB,UAAU,CAAC,KAAK,CAAC;EAEtCzB,OAAO,CAACyB,UAAU,CAAC,KAAK,CAAC,GAAG,SAASC,aAAaA,CAACC,CAAC,EAAEtB,QAAQ,EAAE;IAC9D,IAAID,YAAY,CAACC,QAAQ,CAAC,EAAE;MAC1B,OAAOmB,IAAI,CAACG,CAAC,EAAEtB,QAAQ,CAAC;IAC1B;IACA;IACA;IACA,IAAI,CAACkB,GAAG,EAAE;MACRA,GAAG,GAAGK,aAAI,CAACC,OAAO,CAACxB,QAAQ,CAAC;IAC9B;IAEA,IAAI,CAACA,QAAQ,CAACC,QAAQ,CAACiB,GAAG,CAAC,EAAE;MAC3B,OAAOC,IAAI,CAACG,CAAC,EAAEtB,QAAQ,CAAC;IAC1B;IAEA,OAAOE,MAAM,CAACoB,CAAC,EAAEtB,QAAQ,CAAC;EAC5B,CAAC;AACH;AAEAiB,mBAAmB,EAAE"}
|
|
1
|
+
{"version":3,"names":["_path","_interopRequireDefault","require","_generator","_extract","_transform","isNodeModule","filename","includes","inject","module","_generate","generate","extract","transform","compact","quotes","code","process","env","JSDOCTRINETEST_VERBOSE","console","log","_compile","enableSpecInjection","dir","load","extensions","loadWithSpecs","m","path","dirname"],"sources":["index.js"],"sourcesContent":["/*!\r\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\r\n */\r\n\r\n/* eslint require-jsdoc: [0] */\r\n/* eslint no-console: [0] */\r\n\r\nimport path from 'path';\r\n\r\nimport generate from '@babel/generator';\r\n\r\nimport extract from './extract';\r\nimport transform from './transform';\r\n\r\nfunction isNodeModule(filename) {\r\n return filename.includes('node_modules') && !filename.includes('packages/node_modules');\r\n}\r\n\r\nfunction inject(module, filename) {\r\n const {code} = generate(extract(transform, filename), {\r\n compact: false,\r\n quotes: 'single',\r\n });\r\n\r\n if (process.env.JSDOCTRINETEST_VERBOSE) {\r\n console.log(filename);\r\n console.log(code);\r\n console.log();\r\n }\r\n module._compile(code, filename);\r\n}\r\n\r\nfunction enableSpecInjection() {\r\n let dir;\r\n const load = require.extensions['.js'];\r\n\r\n require.extensions['.js'] = function loadWithSpecs(m, filename) {\r\n if (isNodeModule(filename)) {\r\n return load(m, filename);\r\n }\r\n // this is really janky, but so far seems to properly ensure we only load\r\n // files in the directories specified to mocha\r\n if (!dir) {\r\n dir = path.dirname(filename);\r\n }\r\n\r\n if (!filename.includes(dir)) {\r\n return load(m, filename);\r\n }\r\n\r\n return inject(m, filename);\r\n };\r\n}\r\n\r\nenableSpecInjection();\r\n"],"mappings":";;;AAOA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,QAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,UAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAZA;AACA;AACA;;AAEA;AACA;;AASA,SAASI,YAAYA,CAACC,QAAQ,EAAE;EAC9B,OAAOA,QAAQ,CAACC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAACD,QAAQ,CAACC,QAAQ,CAAC,uBAAuB,CAAC;AACzF;AAEA,SAASC,MAAMA,CAACC,MAAM,EAAEH,QAAQ,EAAE;EAChC,IAAAI,SAAA,GAAe,IAAAC,kBAAQ,EAAC,IAAAC,gBAAO,EAACC,kBAAS,EAAEP,QAAQ,CAAC,EAAE;MACpDQ,OAAO,EAAE,KAAK;MACdC,MAAM,EAAE;IACV,CAAC,CAAC;IAHKC,IAAI,GAAAN,SAAA,CAAJM,IAAI;EAKX,IAAIC,OAAO,CAACC,GAAG,CAACC,sBAAsB,EAAE;IACtCC,OAAO,CAACC,GAAG,CAACf,QAAQ,CAAC;IACrBc,OAAO,CAACC,GAAG,CAACL,IAAI,CAAC;IACjBI,OAAO,CAACC,GAAG,EAAE;EACf;EACAZ,MAAM,CAACa,QAAQ,CAACN,IAAI,EAAEV,QAAQ,CAAC;AACjC;AAEA,SAASiB,mBAAmBA,CAAA,EAAG;EAC7B,IAAIC,GAAG;EACP,IAAMC,IAAI,GAAGxB,OAAO,CAACyB,UAAU,CAAC,KAAK,CAAC;EAEtCzB,OAAO,CAACyB,UAAU,CAAC,KAAK,CAAC,GAAG,SAASC,aAAaA,CAACC,CAAC,EAAEtB,QAAQ,EAAE;IAC9D,IAAID,YAAY,CAACC,QAAQ,CAAC,EAAE;MAC1B,OAAOmB,IAAI,CAACG,CAAC,EAAEtB,QAAQ,CAAC;IAC1B;IACA;IACA;IACA,IAAI,CAACkB,GAAG,EAAE;MACRA,GAAG,GAAGK,aAAI,CAACC,OAAO,CAACxB,QAAQ,CAAC;IAC9B;IAEA,IAAI,CAACA,QAAQ,CAACC,QAAQ,CAACiB,GAAG,CAAC,EAAE;MAC3B,OAAOC,IAAI,CAACG,CAAC,EAAEtB,QAAQ,CAAC;IAC1B;IAEA,OAAOE,MAAM,CAACoB,CAAC,EAAEtB,QAAQ,CAAC;EAC5B,CAAC;AACH;AAEAiB,mBAAmB,EAAE"}
|
package/dist/mocha-template.js
CHANGED
|
@@ -8,19 +8,19 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.default = generateSpec;
|
|
9
9
|
var _types = require("@babel/types");
|
|
10
10
|
var _template = _interopRequireDefault(require("@babel/template"));
|
|
11
|
-
/*!
|
|
12
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
11
|
+
/*!
|
|
12
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
15
|
var makeDescribeBlock = (0, _template.default)("\n describe(DESCRIBED_THING, function() {\n IT_BLOCK\n });\n");
|
|
16
16
|
var makeItBlock = (0, _template.default)("\n it(DOES_A_THING, function() {\n STATEMENTS\n });\n");
|
|
17
17
|
|
|
18
|
-
/**
|
|
19
|
-
* Wraps a test case in a Mocha it-block
|
|
20
|
-
* @param {Object} a
|
|
21
|
-
* @param {string} a.name
|
|
22
|
-
* @param {Object} a.testCase
|
|
23
|
-
* @returns {[type]}
|
|
18
|
+
/**
|
|
19
|
+
* Wraps a test case in a Mocha it-block
|
|
20
|
+
* @param {Object} a
|
|
21
|
+
* @param {string} a.name
|
|
22
|
+
* @param {Object} a.testCase
|
|
23
|
+
* @returns {[type]}
|
|
24
24
|
*/
|
|
25
25
|
function generateSpec(a) {
|
|
26
26
|
var itLine = a.name;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","_template","_interopRequireDefault","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,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAC,sBAAA,CAAAF,OAAA;AALA;AACA;AACA;;AAKA,IAAMG,iBAAiB,GAAG,IAAAC,iBAAQ,sEAIhC;AAEF,IAAMC,WAAW,GAAG,IAAAD,iBAAQ,+DAI1B;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASE,YAAYA,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"}
|
|
1
|
+
{"version":3,"names":["_types","require","_template","_interopRequireDefault","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":["/*!\r\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\r\n */\r\n\r\nimport {stringLiteral} from '@babel/types';\r\nimport template from '@babel/template';\r\n\r\nconst makeDescribeBlock = template(`\r\n describe(DESCRIBED_THING, function() {\r\n IT_BLOCK\r\n });\r\n`);\r\n\r\nconst makeItBlock = template(`\r\n it(DOES_A_THING, function() {\r\n STATEMENTS\r\n });\r\n`);\r\n\r\n/**\r\n * Wraps a test case in a Mocha it-block\r\n * @param {Object} a\r\n * @param {string} a.name\r\n * @param {Object} a.testCase\r\n * @returns {[type]}\r\n */\r\nexport default function generateSpec(a) {\r\n let itLine = a.name;\r\n\r\n if (a.type.toLowerCase().includes('function')) {\r\n itLine += '()';\r\n }\r\n\r\n const d = makeDescribeBlock({\r\n DESCRIBED_THING: stringLiteral(a.filename),\r\n IT_BLOCK: makeItBlock({\r\n DOES_A_THING: stringLiteral(itLine),\r\n STATEMENTS: a.testCase,\r\n }),\r\n });\r\n\r\n return d;\r\n}\r\n"],"mappings":";;;;;;;;AAIA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAC,sBAAA,CAAAF,OAAA;AALA;AACA;AACA;;AAKA,IAAMG,iBAAiB,GAAG,IAAAC,iBAAQ,sEAIhC;AAEF,IAAMC,WAAW,GAAG,IAAAD,iBAAQ,+DAI1B;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASE,YAAYA,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
|
@@ -8,15 +8,15 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.default = parse;
|
|
9
9
|
var _defaults2 = _interopRequireDefault(require("lodash/defaults"));
|
|
10
10
|
var _babylon = require("babylon");
|
|
11
|
-
/*!
|
|
12
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
11
|
+
/*!
|
|
12
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
/**
|
|
16
|
-
* Wrapper around babylon's parse with defaults set
|
|
17
|
-
* @param {string} code
|
|
18
|
-
* @param {object} options
|
|
19
|
-
* @returns {ast}
|
|
15
|
+
/**
|
|
16
|
+
* Wrapper around babylon's parse with defaults set
|
|
17
|
+
* @param {string} code
|
|
18
|
+
* @param {object} options
|
|
19
|
+
* @returns {ast}
|
|
20
20
|
*/
|
|
21
21
|
function parse(code, options) {
|
|
22
22
|
return (0, _babylon.parse)(code, (0, _defaults2.default)(options, {
|
package/dist/parse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_babylon","require","parse","code","options","babelParse","_defaults2","default","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,IAAAA,QAAA,GAAAC,OAAA;AAJA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACe,SAASC,KAAKA,CAACC,IAAI,EAAEC,OAAO,EAAE;EAC3C,OAAO,IAAAC,cAAU,EACfF,IAAI,EACJ,IAAAG,UAAA,CAAAC,OAAA,EAASH,OAAO,EAAE;IAChBI,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"}
|
|
1
|
+
{"version":3,"names":["_babylon","require","parse","code","options","babelParse","_defaults2","default","allowImportExportEverywhere","sourceType","plugins"],"sources":["parse.js"],"sourcesContent":["/*!\r\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\r\n */\r\n\r\nimport {parse as babelParse} from 'babylon';\r\nimport {defaults} from 'lodash';\r\n\r\n/**\r\n * Wrapper around babylon's parse with defaults set\r\n * @param {string} code\r\n * @param {object} options\r\n * @returns {ast}\r\n */\r\nexport default function parse(code, options) {\r\n return babelParse(\r\n code,\r\n defaults(options, {\r\n allowImportExportEverywhere: true,\r\n sourceType: 'module',\r\n plugins: [\r\n 'jsx',\r\n 'flow',\r\n 'asyncFunctions',\r\n 'classConstructorCall',\r\n 'doExpressions',\r\n 'trailingFunctionCommas',\r\n 'objectRestSpread',\r\n 'decorators',\r\n 'classProperties',\r\n 'exportExtensions',\r\n 'exponentiationOperator',\r\n 'asyncGenerators',\r\n 'functionBind',\r\n 'functionSent',\r\n ],\r\n })\r\n );\r\n}\r\n"],"mappings":";;;;;;;;;AAIA,IAAAA,QAAA,GAAAC,OAAA;AAJA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACe,SAASC,KAAKA,CAACC,IAAI,EAAEC,OAAO,EAAE;EAC3C,OAAO,IAAAC,cAAU,EACfF,IAAI,EACJ,IAAAG,UAAA,CAAAC,OAAA,EAASH,OAAO,EAAE;IAChBI,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
|
@@ -12,19 +12,19 @@ var _traverse = _interopRequireDefault(require("@babel/traverse"));
|
|
|
12
12
|
var _parse = _interopRequireDefault(require("./parse"));
|
|
13
13
|
var _mochaTemplate = _interopRequireDefault(require("./mocha-template"));
|
|
14
14
|
var _literal = require("./assertions/literal");
|
|
15
|
-
/*!
|
|
16
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
15
|
+
/*!
|
|
16
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
var assertionStatementTemplate = (0, _template.default)("\n return Promise.resolve(ORIGINAL)\n .then(function(result) {\n ASSERTIONS\n })\n");
|
|
20
20
|
|
|
21
|
-
/**
|
|
22
|
-
* @param {Object} options
|
|
23
|
-
* @param {ast} options.comment
|
|
24
|
-
* @param {string} options.name
|
|
25
|
-
* @param {string} options.filename
|
|
26
|
-
* @param {string} options.type
|
|
27
|
-
* @returns {ast}
|
|
21
|
+
/**
|
|
22
|
+
* @param {Object} options
|
|
23
|
+
* @param {ast} options.comment
|
|
24
|
+
* @param {string} options.name
|
|
25
|
+
* @param {string} options.filename
|
|
26
|
+
* @param {string} options.type
|
|
27
|
+
* @returns {ast}
|
|
28
28
|
*/
|
|
29
29
|
function transform(_ref) {
|
|
30
30
|
var comment = _ref.comment,
|
|
@@ -54,10 +54,10 @@ function transform(_ref) {
|
|
|
54
54
|
});
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
/**
|
|
58
|
-
* Takes a trailing comment from an example block and changes it to an assertion
|
|
59
|
-
* @param {CommentBlock} comment
|
|
60
|
-
* @returns {ast}
|
|
57
|
+
/**
|
|
58
|
+
* Takes a trailing comment from an example block and changes it to an assertion
|
|
59
|
+
* @param {CommentBlock} comment
|
|
60
|
+
* @returns {ast}
|
|
61
61
|
*/
|
|
62
62
|
function makeAsserter(comment) {
|
|
63
63
|
if ((0, _literal.test)(comment.value)) {
|
package/dist/transform.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_template","_interopRequireDefault","require","_traverse","_parse","_mochaTemplate","_literal","assertionStatementTemplate","template","transform","_ref","comment","name","filename","type","ast","parse","traverse","enter","path","node","trailingComments","assertions","map","makeAsserter","length","_deleteProperty","default","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,IAAAA,SAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,MAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,cAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,QAAA,GAAAJ,OAAA;AATA;AACA;AACA;;AASA,IAAMK,0BAA0B,GAAG,IAAAC,iBAAQ,mGAKzC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASC,SAASA,CAAAC,IAAA,EAAkC;EAAA,IAAhCC,OAAO,GAAAD,IAAA,CAAPC,OAAO;IAAEC,IAAI,GAAAF,IAAA,CAAJE,IAAI;IAAEC,QAAQ,GAAAH,IAAA,CAARG,QAAQ;IAAEC,IAAI,GAAAJ,IAAA,CAAJI,IAAI;EAC9D,IAAMC,GAAG,GAAG,IAAAC,cAAK,EAACL,OAAO,CAAC;EAE1B,IAAAM,iBAAQ,EAACF,GAAG,EAAE;IACZG,KAAK,WAAAA,MAACC,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,IAAAC,eAAA,CAAAC,OAAA,EAAuBR,IAAI,CAACC,IAAI,EAAE,kBAAkB,CAAC;UAErDD,IAAI,CAACS,WAAW,CACdrB,0BAA0B,CAAC;YACzBsB,QAAQ,EAAEV,IAAI,CAACC,IAAI;YACnBU,UAAU,EAAER;UACd,CAAC,CAAC,CACH;QACH;MACF;IACF;EACF,CAAC,CAAC;EAEF,OAAO,IAAAS,sBAAY,EAAC;IAClBC,QAAQ,EAAEjB,GAAG;IACbH,IAAI,EAAJA,IAAI;IACJC,QAAQ,EAARA,QAAQ;IACRC,IAAI,EAAJA;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASU,YAAYA,CAACb,OAAO,EAAE;EAC7B,IAAI,IAAAsB,aAAoB,EAACtB,OAAO,CAACuB,KAAK,CAAC,EAAE;IACvC,OAAO,IAAAC,cAAqB,EAACxB,OAAO,CAACuB,KAAK,CAAC;EAC7C;EAEA,OAAO,IAAI;AACb"}
|
|
1
|
+
{"version":3,"names":["_template","_interopRequireDefault","require","_traverse","_parse","_mochaTemplate","_literal","assertionStatementTemplate","template","transform","_ref","comment","name","filename","type","ast","parse","traverse","enter","path","node","trailingComments","assertions","map","makeAsserter","length","_deleteProperty","default","replaceWith","ORIGINAL","ASSERTIONS","generateSpec","testCase","literalAssertionTest","value","buildLiteralAssertion"],"sources":["transform.js"],"sourcesContent":["/*!\r\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\r\n */\r\n\r\nimport template from '@babel/template';\r\nimport traverse from '@babel/traverse';\r\n\r\nimport parse from './parse';\r\nimport generateSpec from './mocha-template';\r\nimport {build as buildLiteralAssertion, test as literalAssertionTest} from './assertions/literal';\r\n\r\nconst assertionStatementTemplate = template(`\r\n return Promise.resolve(ORIGINAL)\r\n .then(function(result) {\r\n ASSERTIONS\r\n })\r\n`);\r\n\r\n/**\r\n * @param {Object} options\r\n * @param {ast} options.comment\r\n * @param {string} options.name\r\n * @param {string} options.filename\r\n * @param {string} options.type\r\n * @returns {ast}\r\n */\r\nexport default function transform({comment, name, filename, type}) {\r\n const ast = parse(comment);\r\n\r\n traverse(ast, {\r\n enter(path) {\r\n if (path.node.trailingComments) {\r\n const assertions = path.node.trailingComments.map(makeAsserter);\r\n\r\n if (assertions.length) {\r\n Reflect.deleteProperty(path.node, 'trailingComments');\r\n\r\n path.replaceWith(\r\n assertionStatementTemplate({\r\n ORIGINAL: path.node,\r\n ASSERTIONS: assertions,\r\n })\r\n );\r\n }\r\n }\r\n },\r\n });\r\n\r\n return generateSpec({\r\n testCase: ast,\r\n name,\r\n filename,\r\n type,\r\n });\r\n}\r\n\r\n/**\r\n * Takes a trailing comment from an example block and changes it to an assertion\r\n * @param {CommentBlock} comment\r\n * @returns {ast}\r\n */\r\nfunction makeAsserter(comment) {\r\n if (literalAssertionTest(comment.value)) {\r\n return buildLiteralAssertion(comment.value);\r\n }\r\n\r\n return null;\r\n}\r\n"],"mappings":";;;;;;;;;AAIA,IAAAA,SAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,MAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,cAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,QAAA,GAAAJ,OAAA;AATA;AACA;AACA;;AASA,IAAMK,0BAA0B,GAAG,IAAAC,iBAAQ,mGAKzC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASC,SAASA,CAAAC,IAAA,EAAkC;EAAA,IAAhCC,OAAO,GAAAD,IAAA,CAAPC,OAAO;IAAEC,IAAI,GAAAF,IAAA,CAAJE,IAAI;IAAEC,QAAQ,GAAAH,IAAA,CAARG,QAAQ;IAAEC,IAAI,GAAAJ,IAAA,CAAJI,IAAI;EAC9D,IAAMC,GAAG,GAAG,IAAAC,cAAK,EAACL,OAAO,CAAC;EAE1B,IAAAM,iBAAQ,EAACF,GAAG,EAAE;IACZG,KAAK,WAAAA,MAACC,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,IAAAC,eAAA,CAAAC,OAAA,EAAuBR,IAAI,CAACC,IAAI,EAAE,kBAAkB,CAAC;UAErDD,IAAI,CAACS,WAAW,CACdrB,0BAA0B,CAAC;YACzBsB,QAAQ,EAAEV,IAAI,CAACC,IAAI;YACnBU,UAAU,EAAER;UACd,CAAC,CAAC,CACH;QACH;MACF;IACF;EACF,CAAC,CAAC;EAEF,OAAO,IAAAS,sBAAY,EAAC;IAClBC,QAAQ,EAAEjB,GAAG;IACbH,IAAI,EAAJA,IAAI;IACJC,QAAQ,EAARA,QAAQ;IACRC,IAAI,EAAJA;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASU,YAAYA,CAACb,OAAO,EAAE;EAC7B,IAAI,IAAAsB,aAAoB,EAACtB,OAAO,CAACuB,KAAK,CAAC,EAAE;IACvC,OAAO,IAAAC,cAAqB,EAACxB,OAAO,CAACuB,KAAK,CAAC;EAC7C;EAEA,OAAO,IAAI;AACb"}
|
package/jest.config.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
const config = require('@webex/jest-config-legacy');
|
|
2
|
-
|
|
3
|
-
module.exports = config;
|
|
1
|
+
const config = require('@webex/jest-config-legacy');
|
|
2
|
+
|
|
3
|
+
module.exports = config;
|
package/package.json
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/jsdoctrinetest",
|
|
3
|
-
"version": "2.59.2",
|
|
4
3
|
"description": "",
|
|
5
4
|
"license": "MIT",
|
|
6
5
|
"contributors": [
|
|
@@ -40,19 +39,19 @@
|
|
|
40
39
|
"@babel/template": "^7.14.5",
|
|
41
40
|
"@babel/traverse": "^7.14.9",
|
|
42
41
|
"@babel/types": "^7.14.9",
|
|
43
|
-
"@webex/babel-config-legacy": "
|
|
44
|
-
"@webex/eslint-config-legacy": "
|
|
45
|
-
"@webex/jest-config-legacy": "
|
|
46
|
-
"@webex/legacy-tools": "
|
|
47
|
-
"@webex/test-helper-chai": "2.59.
|
|
48
|
-
"@webex/test-helper-mocha": "2.59.
|
|
49
|
-
"@webex/test-helper-mock-webex": "2.59.
|
|
50
|
-
"@webex/test-helper-test-users": "2.59.
|
|
42
|
+
"@webex/babel-config-legacy": "^0.0.0",
|
|
43
|
+
"@webex/eslint-config-legacy": "^0.0.0",
|
|
44
|
+
"@webex/jest-config-legacy": "^0.0.0",
|
|
45
|
+
"@webex/legacy-tools": "^0.0.0",
|
|
46
|
+
"@webex/test-helper-chai": "^2.59.3-next.1",
|
|
47
|
+
"@webex/test-helper-mocha": "^2.59.3-next.1",
|
|
48
|
+
"@webex/test-helper-mock-webex": "^2.59.3-next.1",
|
|
49
|
+
"@webex/test-helper-test-users": "^2.59.3-next.1",
|
|
51
50
|
"eslint": "^8.24.0",
|
|
52
51
|
"prettier": "^2.7.1"
|
|
53
52
|
},
|
|
54
53
|
"dependencies": {
|
|
55
|
-
"@webex/test-helper-chai": "2.59.
|
|
54
|
+
"@webex/test-helper-chai": "^2.59.3-next.1",
|
|
56
55
|
"babylon": "^6.18.0",
|
|
57
56
|
"doctrine": "^2.1.0",
|
|
58
57
|
"lodash": "^4.17.21"
|
|
@@ -60,10 +59,12 @@
|
|
|
60
59
|
"scripts": {
|
|
61
60
|
"build": "yarn build:src",
|
|
62
61
|
"build:src": "webex-legacy-tools build -dest \"./dist\" -src \"./src\" -js -ts -maps",
|
|
62
|
+
"deploy:npm": "yarn npm publish",
|
|
63
63
|
"test": "yarn test:style && yarn test:unit && yarn test:integration && yarn test:browser",
|
|
64
64
|
"test:browser": "webex-legacy-tools test --integration --unit --runner karma",
|
|
65
65
|
"test:integration": "webex-legacy-tools test --integration --runner mocha",
|
|
66
66
|
"test:style": "eslint ./src/**/*.*",
|
|
67
67
|
"test:unit": "webex-legacy-tools test --unit --runner jest"
|
|
68
|
-
}
|
|
69
|
-
|
|
68
|
+
},
|
|
69
|
+
"version": "2.59.3-next.1"
|
|
70
|
+
}
|
package/process
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
module.exports = {browser: true};
|
|
1
|
+
module.exports = {browser: true};
|