Skip to content

Commit

Permalink
Merge pull request #55 from power-assert-js/use-parameter-for-declara…
Browse files Browse the repository at this point in the history
…tions

Use `parameter` for declarations, `argument` for actual values
  • Loading branch information
twada committed Jun 14, 2019
2 parents 0b388de + d71ec63 commit 1535ee7
Show file tree
Hide file tree
Showing 36 changed files with 3,642 additions and 622 deletions.
10 changes: 5 additions & 5 deletions lib/create-pattern-matchers.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,21 @@ const createPatternMatchers = (options) => {
const expression = signatureAst.body[0].expression;
matcher = new CallMatcher(expression, options);
}
const args = matcher.argumentSignatures().map((sig, idx) => {
if (typeof p === 'object' && p !== null && Array.isArray(p.args)) {
return Object.assign({}, sig, p.args[idx]);
const params = matcher.argumentSignatures().map((sig, idx) => {
if (typeof p === 'object' && p !== null && Array.isArray(p.params)) {
return Object.assign({}, sig, p.params[idx]);
}
return sig;
});
const lastParam = args[args.length - 1];
const lastParam = params[params.length - 1];
if (lastParam.name === 'message' && lastParam.kind === 'optional') {
lastParam.message = true;
}
return {
matcher,
index,
pattern,
args
params
};
});
};
Expand Down
68 changes: 64 additions & 4 deletions lib/default-options.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,70 @@ const defaultOptions = () => {
'assert.notEqual(actual, expected, [message])',
'assert.strictEqual(actual, expected, [message])',
'assert.notStrictEqual(actual, expected, [message])',
'assert.deepEqual(actual, expected, [message])',
'assert.notDeepEqual(actual, expected, [message])',
'assert.deepStrictEqual(actual, expected, [message])',
'assert.notDeepStrictEqual(actual, expected, [message])'
{
pattern: 'assert.deepEqual(actual, expected, [message])',
params: [
{ name: 'actual', options: { maxDepth: 2 } },
{ name: 'expected', options: { maxDepth: 2 } },
{ name: 'message', message: true }
]
},
{
pattern: 'assert.notDeepEqual(actual, expected, [message])',
params: [
{ name: 'actual', options: { maxDepth: 2 } },
{ name: 'expected', options: { maxDepth: 2 } },
{ name: 'message', message: true }
]
},
{
pattern: 'assert.deepStrictEqual(actual, expected, [message])',
params: [
{ name: 'actual', options: { maxDepth: 2 } },
{ name: 'expected', options: { maxDepth: 2 } },
{ name: 'message', message: true }
]
},
{
pattern: 'assert.notDeepStrictEqual(actual, expected, [message])',
params: [
{ name: 'actual', options: { maxDepth: 2 } },
{ name: 'expected', options: { maxDepth: 2 } },
{ name: 'message', message: true }
]
},
{
pattern: 'assert.throws(fn, [error], [message])',
params: [
{ name: 'fn', block: true },
{ name: 'error', block: true },
{ name: 'message', message: true }
]
},
{
pattern: 'assert.doesNotThrow(fn, [error], [message])',
params: [
{ name: 'fn', block: true },
{ name: 'error', block: true },
{ name: 'message', message: true }
]
},
{
pattern: 'assert.rejects(asyncFn, [error], [message])',
params: [
{ name: 'asyncFn', block: true },
{ name: 'error', block: true },
{ name: 'message', message: true }
]
},
{
pattern: 'assert.doesNotReject(asyncFn, [error], [message])',
params: [
{ name: 'asyncFn', block: true },
{ name: 'error', block: true },
{ name: 'message', message: true }
]
}
]
};
};
Expand Down
6 changes: 3 additions & 3 deletions lib/templates/argument-recorder.json
Original file line number Diff line number Diff line change
Expand Up @@ -632,7 +632,7 @@
"type": "VariableDeclarator",
"id": {
"type": "Identifier",
"name": "argconf"
"name": "conf"
},
"init": {
"type": "MemberExpression",
Expand All @@ -644,7 +644,7 @@
},
"property": {
"type": "Identifier",
"name": "args"
"name": "params"
},
"computed": false
},
Expand Down Expand Up @@ -686,7 +686,7 @@
"type": "MemberExpression",
"object": {
"type": "Identifier",
"name": "argconf"
"name": "conf"
},
"property": {
"type": "Identifier",
Expand Down
24 changes: 12 additions & 12 deletions templates/argument-recorder.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ module.exports = function () {
* @property {number} line
* @property {number} version
* @property {string} pattern
* @property {array} args
* @property {array} params
* @property {boolean} [async] - true if enclosed in async function
* @property {boolean} [generator] - true if enclosed in generator function
* @property {string} [ast] - stringified AST
Expand All @@ -41,8 +41,8 @@ module.exports = function () {
/**
* record argument value and metadata silently
* @param {function} callee - callee of target argument
* @param {AssertionMetadata} am - tranpiler generated metadata for target assertion
* @param {number} matchIndex - match index of argument
* @param {AssertionMetadata} am - generated metadata for target assertion
* @param {number} matchIndex - index of matched parameter
*/
constructor (callee, am, matchIndex) {
this._callee = callee;
Expand All @@ -51,8 +51,8 @@ module.exports = function () {
this._recorded = null;
this._val = null;
this._idx = matchIndex;
const argconf = am.args[matchIndex];
this._isBlock = !!argconf.block;
const conf = am.params[matchIndex];
this._isBlock = !!conf.block;
}

/**
Expand All @@ -70,17 +70,17 @@ module.exports = function () {
}

/**
* @return {any} - recorded actual value of target argument
* @return {*} - recorded actual value of target argument
*/
val () {
return this._val;
}

/**
* tap capturable node value with its espath then store them as a Log
* @param {any} value - actual value of target node
* @param {*} value - actual value of target node
* @param {string} espath - espath of target node in AST
* @return {any} - the original value
* @return {*} - the original value
*/
_tap (value, espath) {
this._logs.push({
Expand All @@ -93,9 +93,9 @@ module.exports = function () {
/**
* record argument value silently then clear captured logs
* optionally, proxy block argument then store its result as a Log
* @param {any} value - actual value of target argument
* @param {*} value - actual value of target argument
* @param {string} [espath] - espath of target node in AST
* @return {any|ArgumentRecorder} - ArgumentRecorder or actual value of target argument
* @return {*|ArgumentRecorder} - ArgumentRecorder or actual value of target argument
*/
_rec (value, espath) {
const empowered = this._callee && this._callee._empowered;
Expand Down Expand Up @@ -139,13 +139,13 @@ module.exports = function () {

/**
* @typedef {Object} Log
* @property {any} value - recorded actual value of target node
* @property {*} value - recorded actual value of target node
* @property {string} espath - espath of target node in AST
*/

/**
* @typedef {Object} RecordedData
* @property {any} value - recorded actual value of target argument
* @property {*} value - recorded actual value of target argument
* @property {Log[]} logs - recorded Logs
*/

Expand Down
8 changes: 4 additions & 4 deletions templates/assertion-message.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ module.exports = function () {

/**
* @param {AssertionMetadata} am - AssertionMetadata for target assertion
* @param {number} matchIndex - match index of argument
* @param {number} matchIndex - index of matched parameter
* @param {string|ArgumentRecorder} [msgOrRec] - maybe enhanced message
*/
constructor (am, matchIndex, msgOrRec) {
Expand All @@ -44,7 +44,7 @@ module.exports = function () {
}

/**
* @return {any} - maybe enhanced message
* @return {*} - maybe enhanced message
*/
val () {
if (this._msgOrRec && typeof this._msgOrRec.val === 'function') {
Expand All @@ -56,13 +56,13 @@ module.exports = function () {

/**
* @typedef {Object} Log
* @property {any} value - recorded actual value of target node
* @property {*} value - recorded actual value of target node
* @property {string} espath - espath of target node in AST
*/

/**
* @typedef {Object} RecordedData
* @property {any} value - recorded actual value of target argument
* @property {*} value - recorded actual value of target argument
* @property {Log[]} logs - recorded Logs
*/

Expand Down
78 changes: 69 additions & 9 deletions test/espower_option_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,70 @@ describe('espower.defaultOptions()', function () {
'assert.notEqual(actual, expected, [message])',
'assert.strictEqual(actual, expected, [message])',
'assert.notStrictEqual(actual, expected, [message])',
'assert.deepEqual(actual, expected, [message])',
'assert.notDeepEqual(actual, expected, [message])',
'assert.deepStrictEqual(actual, expected, [message])',
'assert.notDeepStrictEqual(actual, expected, [message])'
{
pattern: 'assert.deepEqual(actual, expected, [message])',
params: [
{ name: 'actual', options: { maxDepth: 2 } },
{ name: 'expected', options: { maxDepth: 2 } },
{ name: 'message', message: true }
]
},
{
pattern: 'assert.notDeepEqual(actual, expected, [message])',
params: [
{ name: 'actual', options: { maxDepth: 2 } },
{ name: 'expected', options: { maxDepth: 2 } },
{ name: 'message', message: true }
]
},
{
pattern: 'assert.deepStrictEqual(actual, expected, [message])',
params: [
{ name: 'actual', options: { maxDepth: 2 } },
{ name: 'expected', options: { maxDepth: 2 } },
{ name: 'message', message: true }
]
},
{
pattern: 'assert.notDeepStrictEqual(actual, expected, [message])',
params: [
{ name: 'actual', options: { maxDepth: 2 } },
{ name: 'expected', options: { maxDepth: 2 } },
{ name: 'message', message: true }
]
},
{
pattern: 'assert.throws(fn, [error], [message])',
params: [
{ name: 'fn', block: true },
{ name: 'error', block: true },
{ name: 'message', message: true }
]
},
{
pattern: 'assert.doesNotThrow(fn, [error], [message])',
params: [
{ name: 'fn', block: true },
{ name: 'error', block: true },
{ name: 'message', message: true }
]
},
{
pattern: 'assert.rejects(asyncFn, [error], [message])',
params: [
{ name: 'asyncFn', block: true },
{ name: 'error', block: true },
{ name: 'message', message: true }
]
},
{
pattern: 'assert.doesNotReject(asyncFn, [error], [message])',
params: [
{ name: 'asyncFn', block: true },
{ name: 'error', block: true },
{ name: 'message', message: true }
]
}
]);
});
});
Expand Down Expand Up @@ -108,7 +168,7 @@ describe('instrumentation tests for options', function () {
]
},
prelude: [
"var _pwmeta1=(ptnidx,content,filepath,line,extra)=>{const version=2,patterns=[{pattern:'refute(value)',args:[{index:0,name:'value',kind:'mandatory'}]}];return Object.assign({version,content,filepath,line},extra,patterns[ptnidx]);};"
"var _pwmeta1=(ptnidx,content,filepath,line,extra)=>{const version=2,patterns=[{pattern:'refute(value)',params:[{index:0,name:'value',kind:'mandatory'}]}];return Object.assign({version,content,filepath,line},extra,patterns[ptnidx]);};"
],
postlude: [
"var _am1=_pwmeta1(0,'refute(falsyStr)','path/to/some_test.js',1);",
Expand All @@ -126,7 +186,7 @@ describe('instrumentation tests for options', function () {
]
},
prelude: [
"var _pwmeta1=(ptnidx,content,filepath,line,extra)=>{const version=2,patterns=[{pattern:'refute.equal(actual, expected)',args:[{index:0,name:'actual',kind:'mandatory'},{index:1,name:'expected',kind:'mandatory'}]}];return Object.assign({version,content,filepath,line},extra,patterns[ptnidx]);};"
"var _pwmeta1=(ptnidx,content,filepath,line,extra)=>{const version=2,patterns=[{pattern:'refute.equal(actual, expected)',params:[{index:0,name:'actual',kind:'mandatory'},{index:1,name:'expected',kind:'mandatory'}]}];return Object.assign({version,content,filepath,line},extra,patterns[ptnidx]);};"
],
postlude: [
"var _am1=_pwmeta1(0,'refute.equal(foo, bar)','path/to/some_test.js',1);",
Expand All @@ -146,7 +206,7 @@ describe('instrumentation tests for options', function () {
]
},
prelude: [
"var _pwmeta1=(ptnidx,content,filepath,line,extra)=>{const version=2,patterns=[{pattern:'browser.assert.element(selection, [message])',args:[{index:0,name:'selection',kind:'mandatory'},{index:1,name:'message',kind:'optional',message:true}]}];return Object.assign({version,content,filepath,line},extra,patterns[ptnidx]);};"
"var _pwmeta1=(ptnidx,content,filepath,line,extra)=>{const version=2,patterns=[{pattern:'browser.assert.element(selection, [message])',params:[{index:0,name:'selection',kind:'mandatory'},{index:1,name:'message',kind:'optional',message:true}]}];return Object.assign({version,content,filepath,line},extra,patterns[ptnidx]);};"
],
postlude: [
"var _am1=_pwmeta1(0,'browser.assert.element(foo)','path/to/some_test.js',1);",
Expand Down Expand Up @@ -336,7 +396,7 @@ describe('lineSeparator', function () {
});

describe('incoming SourceMap support', function () {
const metagen = "var _pwmeta1=(ptnidx,content,filepath,line,extra)=>{const version=2,patterns=[{pattern:'assert.equal(actual, expected, [message])',args:[{index:0,name:'actual',kind:'mandatory'},{index:1,name:'expected',kind:'mandatory'},{index:2,name:'message',kind:'optional',message:true}]}];return Object.assign({version,content,filepath,line},extra,patterns[ptnidx]);};";
const metagen = "var _pwmeta1=(ptnidx,content,filepath,line,extra)=>{const version=2,patterns=[{pattern:'assert.equal(actual, expected, [message])',params:[{index:0,name:'actual',kind:'mandatory'},{index:1,name:'expected',kind:'mandatory'},{index:2,name:'message',kind:'optional',message:true}]}];return Object.assign({version,content,filepath,line},extra,patterns[ptnidx]);};";

function incomingSourceMapTest (testName, opts) {
it(testName, function () {
Expand Down Expand Up @@ -484,7 +544,7 @@ describe('sourceRoot option', function () {
sourceFile: config.incomingFilepath
},
prelude: [
"var _pwmeta1=(ptnidx,content,filepath,line,extra)=>{const version=2,patterns=[{pattern:'assert(value)',args:[{index:0,name:'value',kind:'mandatory'}]}];return Object.assign({version,content,filepath,line},extra,patterns[ptnidx]);};"
"var _pwmeta1=(ptnidx,content,filepath,line,extra)=>{const version=2,patterns=[{pattern:'assert(value)',params:[{index:0,name:'value',kind:'mandatory'}]}];return Object.assign({version,content,filepath,line},extra,patterns[ptnidx]);};"
],
postlude: [
`var _am1=_pwmeta1(0,'assert(falsyStr)','${config.filepathInGeneratedCode}',1);`,
Expand Down

0 comments on commit 1535ee7

Please sign in to comment.