Skip to content
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

use escallmatch module to describe target enhancement patterns #12

Merged
merged 42 commits into from
Aug 12, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
533a21a
feat(empower): use `escallmatch` module to describe target patterns
twada Aug 6, 2014
0957613
chore(empower): rebuild web bundle
twada Aug 6, 2014
f2fd1bc
refactor(empower): introduce index.js and split into modules
twada Aug 7, 2014
77ecd59
chore(empower): rebuild web bundle
twada Aug 7, 2014
bc21706
chore(gulpfile): watch index.js too
twada Aug 7, 2014
8ffcc49
feat(empower): option `targetMethods` does not required any more
twada Aug 7, 2014
5e1b360
test(empower): add test for assertion with optional message argument
twada Aug 7, 2014
5766063
refactor(empower): integrate decorateOneArg and decorateTwoArgs into …
twada Aug 7, 2014
d31dca8
feat(empower): support assertion methods with three or more arguments
twada Aug 7, 2014
46dc3d8
refactor(test): use not-empowered assert for more robust testing
twada Aug 7, 2014
c70a205
refactor(empower): extract numberOfArgumentsToCapture function out
twada Aug 8, 2014
ac30fc1
chore(empower): update escallmatch to 0.3.0
twada Aug 8, 2014
9400cc8
refactor(empower): assert function itself does not need receiver
twada Aug 8, 2014
feac850
refactor(empower): refactor internal in the OOP way
twada Aug 8, 2014
5c5b781
refactor(empower): use simple xtend/mutable instead of node.extend
twada Aug 8, 2014
62846d8
test(empower): test empower function preserves return value
twada Aug 9, 2014
3f8bc03
refactor(empower): use AssertionError in fake assertions
twada Aug 9, 2014
1d73a75
feat(empower): if not in patterns, do not empower assertion function …
twada Aug 9, 2014
e6760a4
test(empower): add test for default options behavior
twada Aug 9, 2014
c261cf0
refactor(empower): xtend can handle undefined well
twada Aug 9, 2014
7a5d103
refactor(empower): extract lib/capturable
twada Aug 9, 2014
9a11ff2
refactor(empower): extract lib/decorate
twada Aug 9, 2014
099c5f5
refactor(empower): reordering arguments
twada Aug 9, 2014
8a469a3
refactor(empower): invert predicate to make code simpler
twada Aug 9, 2014
57013ff
refactor(empower): adjust predicate name
twada Aug 9, 2014
c243d01
refactor(empower): extract enhancement container detection code
twada Aug 10, 2014
a668415
refactor(empower): filtering methods
twada Aug 10, 2014
40d9d28
refactor(empower): just map with escallmatch function
twada Aug 10, 2014
cbbb020
refactor(empower): use thisArg in concreteAssert
twada Aug 10, 2014
6749bbb
refactor(empower): extract parameter object
twada Aug 10, 2014
3d6820e
refactor(empower): extract parameter object
twada Aug 10, 2014
001be4a
refactor(empower): reordering arguments
twada Aug 10, 2014
5cb5597
refactor(empower): rename Decorator#decorated to Decorator#enhancement
twada Aug 10, 2014
dd5a1b9
refactor(empower): extract errorToRethrow method
twada Aug 10, 2014
d3f3d96
refactor(empower): prefer Array#concat over Array#push
twada Aug 10, 2014
30d7b8f
refactor(empower): just a reordering
twada Aug 10, 2014
0c8a88f
feat(empower): rename `modifyMessageOnFail` option to `modifyMessageO…
twada Aug 10, 2014
1f6133b
feat(empower): rename `saveContextOnFail` option to `saveContextOnRet…
twada Aug 10, 2014
fd217df
chore(empower): update dependencies
twada Aug 12, 2014
cfb9145
docs(README): add API and INSTALL section to README
twada Aug 12, 2014
54bee86
chore(empower): rebuild web bundle
twada Aug 12, 2014
6a6a3cb
docs(CHANGELOG): create CHANGELOG.md
twada Aug 12, 2014
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
86 changes: 86 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
## 0.8.0 (2014-08-12)


#### Features


* **empower:**
* [modularized by browserify](https://github.com/twada/empower/pull/12)
* use `escallmatch` module to describe target patterns ([533a21a0](https://github.com/twada/empower/commit/533a21a0374f23f5ca4e198c17d1e20f10d705fa))
* support assertion methods with three or more arguments ([d31dca86](https://github.com/twada/empower/commit/d31dca86de2b05ee88ca5df15579308368657d43))
* if not in patterns, do not empower assertion function itself ([1d73a756](https://github.com/twada/empower/commit/1d73a7560ef586a45a0a9259e57c143b3b60caaa))
* option `targetMethods` does not required any more ([8ffcc49f](https://github.com/twada/empower/commit/8ffcc49fcdb5523eb38e63a0e7cca34f752d9302))
* rename `saveContextOnFail` option to `saveContextOnRethrow` ([1f6133b2](https://github.com/twada/empower/commit/1f6133b24be672f32cfd3b66522a7d14ca5d22e1))
* rename `modifyMessageOnFail` option to `modifyMessageOnRethrow` ([0c8a88f0](https://github.com/twada/empower/commit/0c8a88f0592917ba15ac0c1bf21c8f39f39ab350))


#### Breaking Changes

* `saveContextOnFail` option is renamed to `saveContextOnRethrow`

There is nothing to change unless you are using `saveContextOnFail` option.

If you are using `saveContextOnFail` option, change your code from the following:

`empower(originalAssert, formatter, {saveContextOnFail: true})`

To:

`empower(originalAssert, formatter, {saveContextOnRethrow: true})`

([1f6133b2](https://github.com/twada/empower/commit/1f6133b24be672f32cfd3b66522a7d14ca5d22e1))

* `modifyMessageOnFail` option is renamed to `modifyMessageOnRethrow`

There is nothing to change unless you are using `modifyMessageOnFail` option.

If you are using `modifyMessageOnFail` option, change your code from the following:

`empower(originalAssert, formatter, {modifyMessageOnFail: true})`

To:

`empower(originalAssert, formatter, {modifyMessageOnRethrow: true})`

([0c8a88f0](https://github.com/twada/empower/commit/0c8a88f0592917ba15ac0c1bf21c8f39f39ab350))

* option `targetMethods` does not required any more

If you already customize enhancement pattern using `targetMethods`, you need to migarte. To migrate, change your code from the following:

```javascript
var yourAssert = require('./your-assert);
var empower = require('empower');
var formatter = require('power-assert-formatter')();
var options = {
targetMethods: {
oneArg: [
'okay'
],
twoArgs: [
'equal',
'customEqual'
]
}
};
var assert = empower(yourAssert, formatter, options);
```

To:

```javascript
var yourAssert = require('./your-assert);
var empower = require('empower');
var formatter = require('power-assert-formatter')();
var options = {
patterns: [
'yourAssert(value, [message])',
'yourAssert.okay(value, [message])',
'yourAssert.equal(actual, expected, [message])',
'yourAssert.customEqual(actual, expected, [message])'
]
};
var assert = empower(yourAssert, formatter, options);
```

([8ffcc49f](https://github.com/twada/empower/commit/8ffcc49fcdb5523eb38e63a0e7cca34f752d9302))
155 changes: 155 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ empower
[![NPM version](https://badge.fury.io/js/empower.svg)](http://badge.fury.io/js/empower)
[![Dependency Status](https://gemnasium.com/twada/empower.svg)](https://gemnasium.com/twada/empower)
[![Coverage Status](https://coveralls.io/repos/twada/empower/badge.png?branch=master)](https://coveralls.io/r/twada/empower?branch=master)
[![License](http://img.shields.io/badge/license-MIT-brightgreen.svg)](https://github.com/twada/empower/blob/master/MIT-LICENSE.txt)
[![Built with Gulp](http://img.shields.io/badge/built_with-gulp-brightgreen.svg)](http://gulpjs.com/)


Power Assert feature enhancer for assert function/object.

Expand All @@ -20,6 +23,137 @@ DESCRIPTION
Please note that `empower` is a beta version product. Pull-requests, issue reports and patches are always welcomed. See [power-assert](http://github.com/twada/power-assert) project for more documentation.


CHANGELOG
---------------------------------------
See [CHANGELOG](https://github.com/twada/empower/blob/master/CHANGELOG.md)


API
---------------------------------------

### var enhancedAssert = espower(originalAssert, formatter, [options])

| return type |
|:-----------------------|
| `function` or `object` |

`empower` function takes function or object(`originalAssert`) and `formatter` function created by [power-assert-formatter](http://github.com/twada/power-assert-formatter) then returns PowerAssert feature added function/object base on `originalAssert`.
If `destructive` option is falsy, `originalAssert` will be unchanged. If `destructive` option is truthy, `originalAssert` will be manipulated directly and returned `enhancedAssert` will be the same instance of `originalAssert`.


#### originalAssert

| type | default value |
|:-----------------------|:--------------|
| `function` or `object` | N/A |

`originalAssert` is an instance of standard `assert` function or any assert-like object. see [SUPPORTED ASSERTION LIBRARIES](https://github.com/twada/empower#supported-assertion-libraries) and [ASSERTION LIBRARIES KNOWN TO WORK](https://github.com/twada/empower#assertion-libraries-known-to-work) section. Be careful that `originalAssert` will be manipulated directly if `destructive` option is truthy.


#### formatter

| type | default value |
|:-----------|:--------------|
| `function` | N/A |

formatter function created by [power-assert-formatter](http://github.com/twada/power-assert-formatter).


#### options

| type | default value |
|:---------|:--------------|
| `object` | (return value of `empower.defaultOptions()`) |

Configuration options. If not passed, default options will be used.


#### options.destructive

| type | default value |
|:----------|:--------------|
| `boolean` | `false` |

If truthy, modify `originalAssert` destructively.

If `false`, espower mimics originalAssert as new object/function, so `originalAssert` will not be changed. If `true`, `originalAssert` will be manipulated directly and returned `enhancedAssert` will be the same instance of `originalAssert`.


#### options.modifyMessageOnRethrow

| type | default value |
|:----------|:--------------|
| `boolean` | `false` |

If truthy, modify `message` property of AssertionError on rethrow.


#### options.saveContextOnRethrow

| type | default value |
|:----------|:--------------|
| `boolean` | `false` |

If truthy, add `powerAssertContext` property to AssertionError on rethrow.


`modifyMessageOnRethrow` option and `saveContextOnRethrow` option makes behavior matrix as below.

| modifyMessageOnRethrow | saveContextOnRethrow | resulting behavior |
|:-----------------------|:---------------------|:--------------------------------------------------|
| `false` (default) | `false` (default) | Always modify assertion message argument directly |
| `true` | `false` | Modify `message` of AssertionError on fail |
| `false` | `true` | Do not modify `message` of AssertionError but add `powerAssertContext` property on fail |
| `true` | `true` | On fail, modify `message` of AssertionError and also add `powerAssertContext` property |


#### options.patterns

| type | default value |
|:--------------------|:--------------------|
| `Array` of `string` | objects shown below |

```javascript
[
'assert(value, [message])',
'assert.ok(value, [message])',
'assert.equal(actual, expected, [message])',
'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])'
]
```

Target patterns for power assert feature instrumentation.

Pattern detection is done by [escallmatch](http://github.com/twada/escallmatch). Any arguments enclosed in bracket (for example, `[message]`) means optional parameters. Without bracket means mandatory parameters.


### var options = empower.defaultOptions();

Returns default options object for `empower` function. In other words, returns

```javascript
{
destructive: false,
modifyMessageOnRethrow: false,
saveContextOnRethrow: false,
patterns: [
'assert(value, [message])',
'assert.ok(value, [message])',
'assert.equal(actual, expected, [message])',
'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])'
]
}
```


SUPPORTED ASSERTION LIBRARIES
---------------------------------------
* [Node assert API](http://nodejs.org/api/assert.html)
Expand All @@ -33,6 +167,27 @@ ASSERTION LIBRARIES KNOWN TO WORK
* [buster-assertions](http://docs.busterjs.org/en/latest/modules/buster-assertions/)


INSTALL
---------------------------------------

### via npm

Install

$ npm install --save-dev empower


### via bower

Install

$ bower install --save-dev empower

Then load (`empower` function is exported)

<script type="text/javascript" src="./path/to/bower_components/empower/build/empower.js"></script>


AUTHOR
---------------------------------------
* [Takuto Wada](http://github.com/twada)
Expand Down
4 changes: 2 additions & 2 deletions bower.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@
"url": "git://github.com/twada/empower.git"
},
"devDependencies": {
"espower-source": "~0.7.3",
"mocha": "~1.21.3",
"espower-source": "~0.8.0",
"mocha": "~1.21.4",
"requirejs": "~2.1.14",
"assert": "Jxck/assert",
"buster.js": "~0.7.0"
Expand Down