Comparing version 1.2.0 to 1.2.1
@@ -0,1 +1,7 @@ | ||
### [1.2.1](https://github.com/power-assert-js/espower/releases/tag/v1.2.1) (2015-11-06) | ||
* [disambiguate between function calls and async/yield expressions](https://github.com/power-assert-js/espower/pull/23) (by [@jamestalmage](https://github.com/jamestalmage)) | ||
## [1.2.0](https://github.com/power-assert-js/espower/releases/tag/v1.2.0) (2015-11-05) | ||
@@ -2,0 +8,0 @@ |
@@ -31,3 +31,3 @@ 'use strict'; | ||
function AssertionVisitor (matcher, assertionPath, options) { | ||
function AssertionVisitor (matcher, assertionPath, enclosingFunc, options) { | ||
this.matcher = matcher; | ||
@@ -41,2 +41,4 @@ this.assertionPath = [].concat(assertionPath); | ||
this.argumentModified = false; | ||
this.withinGenerator = enclosingFunc && enclosingFunc.generator; | ||
this.withinAsync = enclosingFunc && enclosingFunc.async; | ||
} | ||
@@ -153,4 +155,10 @@ | ||
var newCalleeObject = updateLocRecursively(espurify(this.powerAssertCalleeObject), n, this.options.visitorKeys); | ||
if (this.withinAsync) { | ||
addLiteralTo(props, n, 'async', true); | ||
} | ||
addLiteralTo(props, n, 'content', this.canonicalCode); | ||
addLiteralTo(props, n, 'filepath', this.filepath); | ||
if (this.withinGenerator) { | ||
addLiteralTo(props, n, 'generator', true); | ||
} | ||
addLiteralTo(props, n, 'line', this.lineNum); | ||
@@ -157,0 +165,0 @@ return n({ |
@@ -40,3 +40,4 @@ 'use strict'; | ||
// entering target assertion | ||
assertionVisitor = new AssertionVisitor(candidates[0], path, that.options); | ||
var enclosingFunc = findEnclosingFunction(controller.parents()); | ||
assertionVisitor = new AssertionVisitor(candidates[0], path, enclosingFunc, that.options); | ||
assertionVisitor.enter(currentNode, parentNode); | ||
@@ -87,2 +88,19 @@ return undefined; | ||
function isFunction(node) { | ||
return [ | ||
syntax.FunctionDeclaration, | ||
syntax.FunctionExpression, | ||
syntax.ArrowFunctionExpression | ||
].indexOf(node.type) !== -1; | ||
} | ||
function findEnclosingFunction(parents) { | ||
for (var i = parents.length - 1; i >= 0; i--) { | ||
if (isFunction(parents[i])) { | ||
return parents[i]; | ||
} | ||
} | ||
return null; | ||
} | ||
function verifyAstPrerequisites (ast, options) { | ||
@@ -89,0 +107,0 @@ var errorMessage; |
{ | ||
"name": "espower", | ||
"description": "Power Assert feature instrumentor based on the ECMAScript AST", | ||
"version": "1.2.0", | ||
"version": "1.2.1", | ||
"author": { | ||
@@ -6,0 +6,0 @@ "name": "Takuto Wada", |
@@ -33,7 +33,7 @@ (function (root, factory) { | ||
describe('with loc, range', function () { | ||
var options = {ecmaVersion: 7, locations: true, ranges: true, plugins: {asyncawait: {awaitAnywhere: true}}}; | ||
var options = {ecmaVersion: 7, locations: true, ranges: true, plugins: {asyncawait: true}}; | ||
testWithParserOptions(jsCode, expected, options); | ||
}); | ||
describe('with loc', function () { | ||
var options = {ecmaVersion: 7, locations: true, plugins: {asyncawait: {awaitAnywhere: true}}}; | ||
var options = {ecmaVersion: 7, locations: true, plugins: {asyncawait: true}}; | ||
testWithParserOptions(jsCode, expected, options); | ||
@@ -404,10 +404,44 @@ }); | ||
inst("function *gen() {assert((yield bigOrSmall(size)) === 'big')}", | ||
"function*gen(){assert(assert._expr(assert._capt(assert._capt(yield bigOrSmall(assert._capt(size,'arguments/0/left/argument/arguments/0')),'arguments/0/left')==='big','arguments/0'),{content:'assert((yield bigOrSmall(size)) === \\'big\\')',filepath:'path/to/some_test.js',line:1}));}"); | ||
"function*gen(){assert(assert._expr(assert._capt(assert._capt(yield bigOrSmall(assert._capt(size,'arguments/0/left/argument/arguments/0')),'arguments/0/left')==='big','arguments/0'),{content:'assert((yield bigOrSmall(size)) === \\'big\\')',filepath:'path/to/some_test.js',generator:true,line:1}));}"); | ||
}); | ||
describe('YieldExpression vs FunctionCall disambiguation', function () { | ||
inst("function baz() {assert((yield (foo)) === bar)}", | ||
"function baz(){assert(assert._expr(assert._capt(assert._capt(yield(assert._capt(foo,'arguments/0/left/arguments/0')),'arguments/0/left')===assert._capt(bar,'arguments/0/right'),'arguments/0'),{content:'assert(yield(foo) === bar)',filepath:'path/to/some_test.js',line:1}));}"); | ||
inst("function *baz() {assert((yield (foo)) === bar)}", | ||
"function*baz(){assert(assert._expr(assert._capt(assert._capt(yield foo,'arguments/0/left')===assert._capt(bar,'arguments/0/right'),'arguments/0'),{content:'assert((yield foo) === bar)',filepath:'path/to/some_test.js',generator:true,line:1}));}"); | ||
inst("var baz = function () {assert((yield (foo)) === bar)}", | ||
"var baz=function(){assert(assert._expr(assert._capt(assert._capt(yield(assert._capt(foo,'arguments/0/left/arguments/0')),'arguments/0/left')===assert._capt(bar,'arguments/0/right'),'arguments/0'),{content:'assert(yield(foo) === bar)',filepath:'path/to/some_test.js',line:1}));};"); | ||
inst("var baz = function *() {assert((yield (foo)) === bar)}", | ||
"var baz=function*(){assert(assert._expr(assert._capt(assert._capt(yield foo,'arguments/0/left')===assert._capt(bar,'arguments/0/right'),'arguments/0'),{content:'assert((yield foo) === bar)',filepath:'path/to/some_test.js',generator:true,line:1}));};"); | ||
}); | ||
describe('AwaitExpression', function () { | ||
inst("function *gen() {assert((await bigOrSmall(size)) === 'big')}", | ||
"function*gen(){assert(assert._expr(assert._capt(assert._capt(await bigOrSmall(assert._capt(size,'arguments/0/left/argument/arguments/0')),'arguments/0/left')==='big','arguments/0'),{content:'assert((await bigOrSmall(size)) === \\'big\\')',filepath:'path/to/some_test.js',line:1}));}"); | ||
inst("async function gen() {assert((await bigOrSmall(size)) === 'big')}", | ||
"async function gen(){assert(assert._expr(assert._capt(assert._capt(await bigOrSmall(assert._capt(size,'arguments/0/left/argument/arguments/0')),'arguments/0/left')==='big','arguments/0'),{async:true,content:'assert((await bigOrSmall(size)) === \\'big\\')',filepath:'path/to/some_test.js',line:1}));}"); | ||
}); | ||
describe('AwaitExpression vs FunctionCall disambiguation', function () { | ||
inst("function baz() {assert((await (foo)) === bar)}", | ||
"function baz(){assert(assert._expr(assert._capt(assert._capt(await(assert._capt(foo,'arguments/0/left/arguments/0')),'arguments/0/left')===assert._capt(bar,'arguments/0/right'),'arguments/0'),{content:'assert(await(foo) === bar)',filepath:'path/to/some_test.js',line:1}));}"); | ||
inst("async function baz() {assert((await (foo)) === bar)}", | ||
"async function baz(){assert(assert._expr(assert._capt(assert._capt(await foo,'arguments/0/left')===assert._capt(bar,'arguments/0/right'),'arguments/0'),{async:true,content:'assert((await foo) === bar)',filepath:'path/to/some_test.js',line:1}));}"); | ||
inst("var baz = function () {assert((await (foo)) === bar)}", | ||
"var baz=function(){assert(assert._expr(assert._capt(assert._capt(await(assert._capt(foo,'arguments/0/left/arguments/0')),'arguments/0/left')===assert._capt(bar,'arguments/0/right'),'arguments/0'),{content:'assert(await(foo) === bar)',filepath:'path/to/some_test.js',line:1}));};"); | ||
inst("var baz = async function () {assert((await (foo)) === bar)}", | ||
"var baz=async function(){assert(assert._expr(assert._capt(assert._capt(await foo,'arguments/0/left')===assert._capt(bar,'arguments/0/right'),'arguments/0'),{async:true,content:'assert((await foo) === bar)',filepath:'path/to/some_test.js',line:1}));};"); | ||
inst("var baz = () => {assert((await (foo)) === bar)};", | ||
"var baz=()=>{assert(assert._expr(assert._capt(assert._capt(await(assert._capt(foo,'arguments/0/left/arguments/0')),'arguments/0/left')===assert._capt(bar,'arguments/0/right'),'arguments/0'),{content:'assert(await(foo) === bar)',filepath:'path/to/some_test.js',line:1}));};"); | ||
inst("var baz = async () => {assert((await (foo)) === bar)}", | ||
"var baz=async()=>{assert(assert._expr(assert._capt(assert._capt(await foo,'arguments/0/left')===assert._capt(bar,'arguments/0/right'),'arguments/0'),{async:true,content:'assert((await foo) === bar)',filepath:'path/to/some_test.js',line:1}));};"); | ||
}); | ||
describe('Enhanced Object Literals', function () { | ||
@@ -414,0 +448,0 @@ |
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
826780
19647