Skip to content

Babel 6.x support #5

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 53 commits into from
Nov 13, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
1fab54c
chore(package): change and update to babel-core 6.0.x
twada Oct 30, 2015
2a31bc7
test(babel-plugin-espower): reduce testcases to wrestle with Babel6
twada Oct 30, 2015
bbf5562
fix(babel-plugin-espower): dealing with new Plugin API
twada Oct 30, 2015
2d2c04d
fix(babel-plugin-espower): dealing with internal plugin SPI changes
twada Oct 30, 2015
92018a8
fix(babel-plugin-espower): avoid re-visiting generated node
twada Oct 30, 2015
c0730d9
feat(babel-plugin-espower): extend espower.AssertionVisitor to genera…
twada Oct 30, 2015
dd207fb
chore(babel-plugin-espower): File is a Map
twada Oct 30, 2015
ad3e3f8
feat(babel-plugin-espower): use babel-generator to generate canonical…
twada Oct 31, 2015
d1b3361
test(babel-plugin-espower): bring comprehensive testsuite back
twada Oct 31, 2015
4fe36d1
test(babel-plugin-espower): do not use preset since it makes too much…
twada Oct 31, 2015
0e95022
chore(babel-plugin-espower): adjust with ArrowFunctionExpression outp…
twada Oct 31, 2015
fa3d6a7
test(babel-plugin-espower): update expectations since babel separates…
twada Oct 31, 2015
0d87f4a
chore(babel-plugin-espower): override toBeSkipped and toBeCaptured me…
twada Nov 1, 2015
e7c9c61
fix(babel-plugin-espower): dealing with Babel6 breaking changes of Pr…
twada Nov 1, 2015
5b7b029
chore(babel-plugin-espower): use babel.types for node type inquiry
twada Nov 1, 2015
14d8dd0
chore(package): update espower to 1.1.0
twada Nov 4, 2015
198e325
test(babel-plugin-espower): add transforms individually for debugging
twada Nov 4, 2015
dfb95fc
chore(babel-plugin-espower): using babel's NodePath instead of array …
twada Nov 4, 2015
7817a7c
chore(babel-plugin-espower): store original espath by ahead of time t…
twada Nov 4, 2015
ff21a4d
chore(babel-plugin-espower): expected output under `presets-es2015`
twada Nov 4, 2015
29d58a2
chore(babel-plugin-espower): comment debugging code out
twada Nov 4, 2015
f369b0b
Merge branch 'presets-es2015' into babel6
twada Nov 4, 2015
6b61ddf
test(babel-plugin-espower): TaggedTemplateExpression output with pres…
twada Nov 5, 2015
bf25056
fix(babel-plugin-espower): store NodePath as a flag of skipping espow…
twada Nov 5, 2015
48b89f5
Merge branch 'master' into babel6
twada Nov 11, 2015
aaef459
chore(babel-plugin-espower): babylon does not allow `yield` as CallEx…
twada Nov 11, 2015
20a443d
chore(babel-plugin-espower): babylon does not allow `yield` as CallEx…
twada Nov 11, 2015
6fb0721
chore(babel-plugin-espower): babylon does not allow `await` as CallEx…
twada Nov 11, 2015
9723330
chore(package): use presets since debugging is almost done
twada Nov 11, 2015
900919b
test(babel-plugin-espower): fighting with bizarre insertion order bet…
twada Nov 11, 2015
f0049a5
chore(babel-plugin-espower): copy AssertionVisitor#enter for debugging
twada Nov 11, 2015
157e586
chore(babel-plugin-espower): Node interted by regenerator doesn't hav…
twada Nov 11, 2015
5b3c371
feat(babel-plugin-espower): make it work, make it right, then make it…
twada Nov 11, 2015
c6370f2
chore(babel-plugin-espower): everything is working again
twada Nov 11, 2015
edf2f41
refactor(babel-plugin-espower): remove dirty hacks
twada Nov 12, 2015
c3238f1
feat(babel-plugin-espower): re-support capturing of YieldExpression a…
twada Nov 12, 2015
05142b9
style(babel-plugin-espower): styling and remove consoles
twada Nov 12, 2015
bf9d797
refactor(babel-plugin-espower): use hidden property to mark generated…
twada Nov 12, 2015
4920139
refactor(babel-plugin-espower): combine conditionals
twada Nov 12, 2015
0a4448a
refactor(babel-plugin-espower): make it clear to capture argument if …
twada Nov 12, 2015
0be1089
docs(README): docs for Babel 6.x support
twada Nov 12, 2015
fa0ed42
refactor(babel-plugin-espower): flatten conditionals
twada Nov 12, 2015
ae5b295
docs(CHANGELOG): add CHANGELOG for 2.0.0
twada Nov 12, 2015
a9c6db8
refactor(babel-plugin-espower): inline variable
twada Nov 12, 2015
be002c8
docs(README): docs for Babel 6.x, presets and .babelrc
twada Nov 12, 2015
b8bd94e
docs(README): update examples
twada Nov 12, 2015
d9acc98
chore(travis): add Node 4.2 CI build
twada Nov 12, 2015
f9b870b
refactor(babel-plugin-espower): simplify type predicates
twada Nov 13, 2015
0dd52d4
refactor(babel-plugin-espower): intention revealing names
twada Nov 13, 2015
f9f0141
chore(babel-plugin-espower): does not have to skip since generated pa…
twada Nov 13, 2015
a3ea77b
docs(README): update babelify usage
twada Nov 13, 2015
b5f0927
test(babel-plugin-espower): adjust expected output with latest babel
twada Nov 13, 2015
5d57824
chore(package): respect semver range of babel-generator
twada Nov 13, 2015
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ sudo: false
node_js:
- "0.10"
- "0.12"
- "4.2"
- "stable"
script:
- "npm test"
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,20 @@
## [2.0.0](https://github.com/power-assert-js/babel-plugin-espower/releases/tag/v2.0.0) (2015-11-12)


#### Features

* [Babel 6.x support](https://github.com/power-assert-js/babel-plugin-espower/pull/5)


#### Breaking Changes

Babel6 is incompatible with Babel5. For Babel 5 or lower, you need to use the 1.x release of babel-plugin-espower.

```
$ npm install --save-dev [email protected]
```


## [1.1.0](https://github.com/power-assert-js/babel-plugin-espower/releases/tag/v1.1.0) (2015-11-06)


Expand Down
80 changes: 54 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Babel plugin for power-assert.

DESCRIPTION
---------------------------------------

`babel-plugin-espower` is a [Babel](http://babeljs.io/) plugin for [power-assert](http://github.com/power-assert-js/power-assert).

`power-assert` provides descriptive assertion messages for your tests, like this.
Expand Down Expand Up @@ -46,20 +47,35 @@ $ npm install --save-dev babel-plugin-espower
```


HOW TO USE
CAUTION
---------------------------------------


### via [Babel CLI](http://babeljs.io/docs/usage/cli/)
Babel6 is incompatible with Babel5. For Babel 5 or lower, you need to use the 1.x release of babel-plugin-espower.

```
$ $(npm bin)/babel --plugins babel-plugin-espower /path/to/test/some_test.js > /path/to/build/some_test.js
$ npm install --save-dev babel-plugin-espower@1.1.0
```

or shortly,

HOW TO USE
---------------------------------------


### via [.babelrc](http://babeljs.io/docs/usage/babelrc/)

```javascript
{
"presets": [
...
],
"plugins": [
"babel-plugin-espower"
]
}
```

```
$ $(npm bin)/babel --plugins espower /path/to/test/some_test.js > /path/to/build/some_test.js
$ babel /path/to/test/some_test.js > /path/to/build/some_test.js
```


Expand All @@ -69,6 +85,7 @@ $ $(npm bin)/babel --plugins espower /path/to/test/some_test.js > /path/to/build
var babel = require('babel-core');
var jsCode = fs.readFileSync('/path/to/test/some_test.js');
var transformed = babel.transform(jsCode, {
presets: [...],
plugins: ['babel-plugin-espower']
});
console.log(transformed.code);
Expand All @@ -78,10 +95,9 @@ console.log(transformed.code);
### via [Babel Require Hook](http://babeljs.io/docs/usage/require/)

```javascript
require('babel/register')({
only: /test\/tobe_instrumented/,
plugins: ['babel-plugin-espower'],
extensions: ['.es6', '.js']
require('babel-register')({
presets: [...],
plugins: ['babel-plugin-espower']
});
```

Expand All @@ -100,14 +116,17 @@ var browserify = require('browserify');
var babelify = require('babelify');
var glob = require('glob'),
browserify({ entries: glob.sync('./test/*_test.js'), debug: true })
.transform(babelify.configure({ plugins: ['babel-plugin-espower'] }))
.transform(babelify.configure({
presets: [...],
plugins: ['babel-plugin-espower']
}))
.bundle()
.on('error', function (err) { console.log('Error : ' + err.message); })
.pipe(fs.createWriteStream('all_test.js'));
```

```
$ $(npm bin)/browserify -d -e ./test/*_test.js -t [ babelify --plugins babel-plugin-espower ]
$ $(npm bin)/browserify -d -e ./test/*_test.js -t [ babelify --presets ... --plugins babel-plugin-espower ]
```


Expand All @@ -121,6 +140,7 @@ gulp.task('build_test', function() {
var files = glob.sync('./test/*_test.js');
var b = browserify({entries: files, debug: true});
b.transform(babelify.configure({
presets: [...],
plugins: ['babel-plugin-espower']
}));
return b.bundle()
Expand All @@ -145,7 +165,12 @@ module.exports = function(config) {
browserify: {
debug: true,
transform: [
['babelify', {plugins: ['babel-plugin-espower']}]
[
'babelify', {
presets: [...],
plugins: ['babel-plugin-espower']
}
]
]
},
// ...
Expand All @@ -156,7 +181,7 @@ EXAMPLE
---------------------------------------


For given test file `demo_test.js` below,
For given test file `test/demo_test.js` below,

```javascript
import assert from 'power-assert';
Expand Down Expand Up @@ -184,16 +209,19 @@ describe('ES6 demo', () => {
});
```

Run `babel` with `--plugins espower` to transform tests.
prepare `babel_hook.js` to transform tests.

```
$ $(npm bin)/babel --plugins espower /path/to/test/demo_test.js > /path/to/build/demo_test.js
```javascript
require('babel-register')({
presets: [...], // presets of your choice
plugins: ['babel-plugin-espower']
});
```

Then run. You will see the power-assert output appears.
Run `mocha` with `--require` option. You will see the power-assert output appears.

```
$ $(npm bin)/mocha /path/to/build/demo_test.js
$ $(npm bin)/mocha --require ./babel_hook test/demo_test.js

ES6 demo
1) Destructuring and TemplateLiteral
Expand Down Expand Up @@ -222,7 +250,7 @@ $ $(npm bin)/mocha /path/to/build/demo_test.js
-bob and alice
+alice and bob

at Context.<anonymous> (build/demo_test.js:19:28)
at Context.<anonymous> (test/demo_test.js:19:28)

2) ES6 demo ArrowFunctionExpression and SpreadElement:

Expand All @@ -239,7 +267,7 @@ $ $(npm bin)/mocha /path/to/build/demo_test.js
[number] seven
=> 7

at Context.<anonymous> (build/demo_test.js:29:28)
at Context.<anonymous> (test/demo_test.js:29:28)

3) ES6 demo Enhanced Object Literals:
AssertionError: # test/demo_test.js:17
Expand All @@ -251,7 +279,7 @@ $ $(npm bin)/mocha /path/to/build/demo_test.js
| "bobby's greet"
Object{name:"bobby","bobby's greet":"Hello, I'm bobby"}

at Context.<anonymous> (build/demo_test.js:40:29)
at Context.<anonymous> (test/demo_test.js:40:29)
```


Expand All @@ -267,6 +295,7 @@ var babel = require('babel-core');
var createEspowerPlugin = require('babel-plugin-espower/create');
var jsCode = fs.readFileSync('/path/to/test/some_test.js');
var transformed = babel.transform(jsCode, {
presets: [...],
plugins: [
createEspowerPlugin(babel, {
patterns: [
Expand All @@ -284,8 +313,8 @@ or via [Require Hook](http://babeljs.io/docs/usage/require/).

```javascript
var createEspowerPlugin = require('babel-plugin-espower/create');
require('babel/register')({
only: /test\/tobe_instrumented/,
require('babel-register')({
presets: [...],
plugins: [
createEspowerPlugin(babel, {
patterns: [
Expand All @@ -294,8 +323,7 @@ require('babel/register')({
'assert.near(actual, expected, delta, [message])'
]
})
],
extensions: ['.es6', '.js']
]
});
```

Expand Down
2 changes: 1 addition & 1 deletion create.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
var createEspowerVisitor = require('./lib/create-espower-visitor');

module.exports = function createEspowerPlugin (babel, options) {
return new babel.Transformer('babel-plugin-espower', createEspowerVisitor(babel, options));
return createEspowerVisitor(babel, options);
};
71 changes: 71 additions & 0 deletions lib/babel-assertion-visitor.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
'use strict';

var espower = require('espower');
var inherits = require('util').inherits;
var babelgen = require('babel-generator');
var define = require('define-properties');
var toBeCaptured = require('./to-be-captured');
var toBeSkipped = require('./to-be-skipped');

function BabelAssertionVisitor (babel, matcher, esPath, enclosingFunc, options) {
espower.AssertionVisitor.call(this, matcher, esPath, enclosingFunc, options);
this.babel = babel;
}
inherits(BabelAssertionVisitor, espower.AssertionVisitor);

BabelAssertionVisitor.prototype.generateCanonicalCode = function (node) {
var gen = new babelgen.CodeGenerator(node, { concise: true });
return gen.generate().code;
};

BabelAssertionVisitor.prototype.isArgumentModified = function () {
return !!this.argumentModified;
};

BabelAssertionVisitor.prototype.captureArgument = function (node) {
var t = this.babel.types;
var props = {
content: this.canonicalCode,
filepath: this.filepath,
line: this.lineNum
};
if (this.withinAsync) {
props.async = true;
}
if (this.withinGenerator) {
props.generator = true;
}
var newNode = t.callExpression(
t.memberExpression(this.powerAssertCalleeObject, t.identifier('_expr')),
[
node,
t.valueToNode(props)
]
);
define(newNode, { _generatedByEspower: true });
return newNode;
};

BabelAssertionVisitor.prototype.captureNode = function (target, path) {
var t = this.babel.types;
this.argumentModified = true;
var relativeEsPath = path.slice(this.assertionPath.length).join('/');
var newNode = t.callExpression(
t.memberExpression(this.powerAssertCalleeObject, t.identifier('_capt')),
[
target,
t.valueToNode(relativeEsPath)
]);
define(newNode, { _generatedByEspower: true });
return newNode;
};

BabelAssertionVisitor.prototype.toBeSkipped = function (currentNode, parentNode, currentKey) {
return toBeSkipped(this.babel.types, currentNode, parentNode, currentKey);
};

BabelAssertionVisitor.prototype.toBeCaptured = function (currentNode, parentNode, currentKey) {
return toBeCaptured(this.babel.types, currentNode, parentNode, currentKey);
};

module.exports = BabelAssertionVisitor;
Loading