diff --git a/.gitignore b/.gitignore index e0c8856..2c4609d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ .DS_Store node_modules *.sock +.idea + diff --git a/.npmignore b/.npmignore index f1250e5..3f8d09a 100644 --- a/.npmignore +++ b/.npmignore @@ -2,3 +2,5 @@ support test examples *.sock +.idea/ + diff --git a/Readme.md b/Readme.md index 00f30e7..fc42e12 100644 --- a/Readme.md +++ b/Readme.md @@ -1,8 +1,7 @@ # better-assert - Better c-style assertions using [callsite](https://github.com/visionmedia/callsite) for - self-documenting failure messages. + Better c-style assertions for self-documenting failure messages. ## Installation diff --git a/index.js b/index.js index fd1c9b7..95263e5 100644 --- a/index.js +++ b/index.js @@ -4,7 +4,7 @@ var AssertionError = require('assert').AssertionError , callsite = require('callsite') - , fs = require('fs') + , fs = require('fs'); /** * Expose `assert`. @@ -21,18 +21,24 @@ module.exports = process.env.NO_ASSERT function assert(expr) { if (expr) return; - var stack = callsite(); - var call = stack[1]; - var file = call.getFileName(); - var lineno = call.getLineNumber(); - var src = fs.readFileSync(file, 'utf8'); - var line = src.split('\n')[lineno-1]; - var src = line.match(/assert\((.*)\)/)[1]; - - var err = new AssertionError({ - message: src, - stackStartFunction: stack[0].getFunction() - }); - - throw err; + var a = new Error(); + // 0 => Error + // 1 => at assert + // 2 => at Object. (/project/myproject/test/test-babel.js:15:1)', <= where the assert was raised ! + // ..... + // + var errorline = a.stack.split('\n')[2]; + var m = errorline.match(/at (.*)\((.*):([0-9]*):([0-9]*)\)/); + var func = m[1]; // Object. ( not very useful) + var file = m[2]; // filename + var lineno = parseInt(m[3]); + var fullsource = fs.readFileSync(file, 'utf8'); + var line = fullsource.split('\n')[lineno-1]; + var src = line.match(/.*assert\((.*)\)/)[1]; + var err = new AssertionError({ + message: src + "\n ", + stackStartFunction: assert + }); + throw err; } + diff --git a/package.json b/package.json index dbc1934..dfc7d55 100644 --- a/package.json +++ b/package.json @@ -1,28 +1,28 @@ { - "name": "better-assert", - "version": "1.0.2", - "license": "MIT", - "description": "Better assertions for node, reporting the expr, filename, lineno etc", - "keywords": [ - "assert", - "stack", - "trace", - "debug" - ], - "author": "TJ Holowaychuk ", - "contributors": [ - "TonyHe ", - "ForbesLindesay" - ], - "dependencies": { - "callsite": "1.0.0" - }, - "repository": { - "type": "git", - "url": "https://github.com/visionmedia/better-assert.git" - }, - "main": "index", - "engines": { - "node": "*" - } + "name": "better-assert", + "version": "1.1.0", + "license": "MIT", + "description": "Better assertions for node, reporting the expr, filename, lineno etc", + "keywords": [ + "assert", + "stack", + "trace", + "debug" + ], + "author": "TJ Holowaychuk ", + "contributors": [ + "TonyHe ", + "ForbesLindesay", + "Etienne Rossignon " + ], + "dependencies": { + }, + "repository": { + "type": "git", + "url": "https://github.com/visionmedia/better-assert.git" + }, + "main": "index", + "engines": { + "node": "*" + } } diff --git a/test/test-babel.js b/test/test-babel.js new file mode 100644 index 0000000..169b3e3 --- /dev/null +++ b/test/test-babel.js @@ -0,0 +1,27 @@ +// run with babel-node +// install: +// * npm install --save-dev babel-core +// * npm install --save-dev babel-preset-es2015 +// * npm install -g babel +// babel-node --presets es2015 ./test/test-babel.hs +// +// should display: +// throw err; +// ^ +// AssertionError: 1==2,"1 should be 2" +// +// at myFunction (/projects/better-assert/test/test-babel.js:23:5) +// at Object. /projects/better-assert/test/test-babel.js:20:1) +// at Module._compile (module.js:570:32) +//... + +import assert from ".."; + + + +function myFunction() { + assert(1==2,"1 should be 2"); + +} + +myFunction(); \ No newline at end of file diff --git a/test/testtest.js b/test/testtest.js new file mode 100644 index 0000000..0e8f6e1 --- /dev/null +++ b/test/testtest.js @@ -0,0 +1,11 @@ +// node test/test.js +const assert = require(".."); + +var a = 1; +var b = 2; + +function myFunction() { + assert(1==2,"1 should be 2"); +} + +myFunction(); \ No newline at end of file