diff options
author | Johannes Ewald <mail@johannesewald.de> | 2013-03-13 04:33:40 +0400 |
---|---|---|
committer | Johannes Ewald <mail@johannesewald.de> | 2013-03-13 04:33:40 +0400 |
commit | ce7cbc88e6913e9039304126cce66e00f10166c7 (patch) | |
tree | 56d3715ffc776fedd26277eab336ac5b95246325 | |
parent | df5285aa66df5855d1a9eee8f1ede1b4a192abb6 (diff) |
- Added deprecation warning for client-side bundlers
- Updated package.json for node v0.10
- Removed tests for client-side bundlers
- Updated .travis.yml for node v0.10
- Updated README
-rw-r--r-- | .travis.yml | 2 | ||||
-rw-r--r-- | CHANGELOG.md | 4 | ||||
-rw-r--r-- | README.md | 25 | ||||
-rw-r--r-- | lib/bundlers/browserify/browserifyMiddleware.js | 2 | ||||
-rw-r--r-- | lib/bundlers/webpack/configureWebpack.js | 2 | ||||
-rw-r--r-- | package.json | 6 | ||||
-rw-r--r-- | test/bundlers.browserify.test.js | 60 | ||||
-rw-r--r-- | test/bundlers.getRewireRequires.test.js | 19 | ||||
-rw-r--r-- | test/bundlers.webpack.test.js | 71 | ||||
-rw-r--r-- | test/bundlers/browserify/index.html | 22 | ||||
-rw-r--r-- | test/bundlers/webpack/index.html | 22 | ||||
-rw-r--r-- | test/rewire.test.js | 186 | ||||
-rw-r--r-- | test/shims.js | 48 | ||||
-rw-r--r-- | test/testHelpers/browserShims.js | 44 | ||||
-rw-r--r-- | test/testHelpers/createFakePackageJSON.js | 13 | ||||
-rw-r--r-- | test/testHelpers/removeFakePackageJSON.js | 9 | ||||
-rw-r--r-- | test/testModules/sharedTestCases.js | 11 | ||||
-rw-r--r-- | test/testModules/throwError.js | 3 |
18 files changed, 198 insertions, 351 deletions
diff --git a/.travis.yml b/.travis.yml index aae0874..42f9d90 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: node_js node_js: - 0.8 - - 0.9 + - "0.10" script: - npm test
\ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 74da067..4638063 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ ##Changelog +###v1.1.2 +- Added deprecation warning for client-side bundlers +- Updated package.json for node v0.10 + ###v1.1.1 - Fixed bug with modules that had a comment on the last line @@ -12,6 +12,8 @@ rewire does **not** load the file and eval the contents to emulate node's requir Good news to all caffeine-addicts: rewire works also with [Coffee-Script](http://coffeescript.org/). Note that in this case CS needs to be listed in your devDependencies. +If you want to use rewire also on the client-side take a look at [client-side bundlers](https://github.com/jhnns/rewire#client-side-bundlers) + [![Build Status](https://secure.travis-ci.org/jhnns/rewire.png?branch=master)](http://travis-ci.org/jhnns/rewire) [![Dependency Status](http://david-dm.org/jhnns/rewire/status.png)](http://david-dm.org/jhnns/rewire) Dependency tracking by [David](http://david-dm.org/) @@ -131,31 +133,12 @@ Returns the private variable. ##Client-Side Bundlers -rewire comes also with support for client-side bundlers. But since it relies heavily on node's require mechanism it can't be used on the client-side without adding special middleware to the bundling process. Currently supported bundlers are: - -- [browserify](https://github.com/substack/node-browserify) @1.x -- [webpack](https://github.com/webpack/webpack) @ 0.8.x - -However, expect this feature to be extracted into own bundler-specific modules soon. - -**Please note:** Unfortunately the line numbers in stack traces have an offset of +2 (browserify) / +1 (webpack). -This is caused by generated code that is added during the bundling process. +###webpack +See [rewire-webpack](https://github.com/jhnns/rewire-webpack) ###browserify - rewire currently only supports browserify@1.x. I'm not planing to continue development, but if you're relying on this feature [please let me know](https://github.com/jhnns/rewire/issues/13). -```javascript -var b = browserify(); - -// Add rewire as browserify middleware -b.use(require("rewire").bundlers.browserify); -``` - -###webpack - -see [rewire-webpack](https://github.com/jhnns/rewire-webpack) - <br /> ##License diff --git a/lib/bundlers/browserify/browserifyMiddleware.js b/lib/bundlers/browserify/browserifyMiddleware.js index 3c26e96..a161369 100644 --- a/lib/bundlers/browserify/browserifyMiddleware.js +++ b/lib/bundlers/browserify/browserifyMiddleware.js @@ -21,6 +21,8 @@ var setterSrc = require("../../__set__.js").toString(), */ function browserifyMiddleware(b) { + console.log("(DEPRECATED) rewire won't support browserify anymore. Please let me know if you're relying on this feature (https://github.com/jhnns/rewire/issues/13)"); + /** * Does actually the injecting of the special code. It is called by browserify for every * js-module. diff --git a/lib/bundlers/webpack/configureWebpack.js b/lib/bundlers/webpack/configureWebpack.js index b180fe8..0738e16 100644 --- a/lib/bundlers/webpack/configureWebpack.js +++ b/lib/bundlers/webpack/configureWebpack.js @@ -9,6 +9,8 @@ * @param {Object} options a webpack option object */ function configureWebpack(options) { + console.log("(DEPRECATED) rewire itself doesn't support webpack anymore. Please use rewire-webpack (https://github.com/jhnns/rewire-webpack)"); + options.resolve = options.resolve || {}; options.postLoaders = options.postLoaders || []; options.resolve.postprocess = options.resolve.postprocess || {}; diff --git a/package.json b/package.json index b9f6969..76b1b43 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name" : "rewire", - "version" : "1.1.1", + "version" : "1.1.2", "description" : "Dependency injection for node.js applications", "keywords" : [ "dependency", @@ -28,13 +28,11 @@ "url": "git://github.com/jhnns/rewire.git" }, "engines" : { - "node" : "<0.10.x" + "node" : "<0.12.x" }, "devDependencies": { "mocha": "1.x", "expect.js": "0.x", - "browserify": "1.x", - "webpack": "0.8.x", "coffee-script": "1.x" }, "scripts" : { diff --git a/test/bundlers.browserify.test.js b/test/bundlers.browserify.test.js deleted file mode 100644 index 0a0ea73..0000000 --- a/test/bundlers.browserify.test.js +++ /dev/null @@ -1,60 +0,0 @@ -var vm = require("vm"), - fs = require("fs"), - expect = require("expect.js"), - browserify = require("browserify"); - -/** - * Executes the source in a context that pretends to be a browser - * @param {!String} src - */ -function runInFakeBrowserContext(src, filename) { - var context = { - describe: describe, - it: it, - before: before, - after: after, - beforeEach: beforeEach, - afterEach: afterEach, - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setInterval: setInterval, - clearInterval: clearInterval, - parseFloat: parseFloat, - parseInt: parseInt, - encodeURIComponent: function () {}, - decodeURIComponent: function () {}, - document: {}, - console: console, - testEnv: "browserify" - }; - context.window = context; - vm.runInNewContext(src, context, filename); -} - -describe("rewire bundled with browserify", function () { - before(require("./testHelpers/createFakePackageJSON.js")); - after(require("./testHelpers/removeFakePackageJSON.js")); - it("should run all sharedTestCases without exception", function () { - var b = browserify({ - debug: true - }), - middleware = require("rewire").bundlers.browserify, - browserOutput = __dirname + "/bundlers/browserify/bundle.js", - browserBundle, - vmBundle; - - b.use(middleware); - b.addEntry(__dirname + "/testModules/sharedTestCases.js"); - vmBundle = b.bundle(); - browserBundle = vmBundle; - - // Setup for mocha - browserBundle = "function enableTests() { " + browserBundle + " }"; - - // Output for browser-testing - fs.writeFileSync(browserOutput, browserBundle, "utf8"); - - // This should throw no exception. - runInFakeBrowserContext(vmBundle, browserOutput); - }); -});
\ No newline at end of file diff --git a/test/bundlers.getRewireRequires.test.js b/test/bundlers.getRewireRequires.test.js deleted file mode 100644 index 3f0b3af..0000000 --- a/test/bundlers.getRewireRequires.test.js +++ /dev/null @@ -1,19 +0,0 @@ -var expect = require("expect.js"), - getRewireRequires = require("../lib/bundlers/getRewireRequires.js"); - -describe("getRewireRequires", function () { - it("should detect a single rewire()", function () { - var src = "rewire('aaa/bbb/ccc.js');"; - - expect(getRewireRequires(src)).to.eql(["aaa/bbb/ccc.js"]); - }); - it("should detect multiple rewire()", function () { - var src = "var aaa = rewire('aaa/bbb/ccc.js'); var bbb = rewire('bbb/ccc/ddd.js');"; - - expect(getRewireRequires(src)).to.eql(["aaa/bbb/ccc.js", "bbb/ccc/ddd.js"]); - - src = "rewire('aaa/bbb/ccc.js'); rewire('bbb/ccc/ddd.js');"; - - expect(getRewireRequires(src)).to.eql(["aaa/bbb/ccc.js", "bbb/ccc/ddd.js"]); - }); -});
\ No newline at end of file diff --git a/test/bundlers.webpack.test.js b/test/bundlers.webpack.test.js deleted file mode 100644 index 3ee367b..0000000 --- a/test/bundlers.webpack.test.js +++ /dev/null @@ -1,71 +0,0 @@ -var vm = require("vm"), - fs = require("fs"), - expect = require("expect.js"), - webpack = require("webpack"), - configureWebpack = require("../lib/bundlers/webpack/configureWebpack.js"); - -/** - * Executes the source in a context that pretends to be a browser - * @param {!String} src - */ -function runInFakeBrowserContext(src, filename) { - var context = { - describe: describe, - it: it, - before: before, - after: after, - beforeEach: beforeEach, - afterEach: afterEach, - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setInterval: setInterval, - clearInterval: clearInterval, - parseFloat: parseFloat, - parseInt: parseInt, - encodeURIComponent: function () {}, - decodeURIComponent: function () {}, - document: {}, - console: console, - testEnv: "webpack" - }; - context.window = context; - vm.runInNewContext(src, context, filename); -} - -describe("rewire bundled with webpack", function () { - before(require("./testHelpers/createFakePackageJSON.js")); - after(require("./testHelpers/removeFakePackageJSON.js")); - it("should run all sharedTestCases without exception", function (done) { - var webpackOptions, - src, - outputPath = __dirname + "/bundlers/webpack/bundle.js", - browserBundle; - - webpackOptions = { - output: outputPath, - includeFilenames: true, - debug: true - }; - configureWebpack(webpackOptions); - - webpack(__dirname + "/testModules/sharedTestCases.js", webpackOptions, function onWebpackFinished(err, stats) { - expect(err).to.be(null); - expect(stats.errors).to.have.length(0); - expect(stats.warnings).to.have.length(0); - - // Read generated source - src = fs.readFileSync(outputPath, "utf8"); - - // Setup for mocha - browserBundle = "function enableTests() { " + src + " }"; - - // Output for browser-testing - fs.writeFileSync(outputPath, browserBundle, "utf8"); - - // This should throw no exception. - runInFakeBrowserContext(src, outputPath); - - done(); - }); - }); -});
\ No newline at end of file diff --git a/test/bundlers/browserify/index.html b/test/bundlers/browserify/index.html deleted file mode 100644 index 5374871..0000000 --- a/test/bundlers/browserify/index.html +++ /dev/null @@ -1,22 +0,0 @@ -<!doctype html> -<head> - <link rel="stylesheet" href="../../../node_modules/mocha/mocha.css" /> - <script src="../../../node_modules/mocha/mocha.js" type="text/javascript"></script> - <script src="../../testHelpers/browserShims.js" type="text/javascript"></script> - <script src="bundle.js" type="text/javascript"></script> -</head> -<body> - <script type="text/javascript"> - var testEnv = "browserify"; - window.onload = function () { - console.log("These tests will only work in all browsers with the console open"); - mocha.setup({ - ui: 'bdd', - globals: [ 'someGlobalVar' ] - }); - enableTests(); - mocha.run(); - }; - </script> - <div id="mocha"></div> -</body>
\ No newline at end of file diff --git a/test/bundlers/webpack/index.html b/test/bundlers/webpack/index.html deleted file mode 100644 index 5aea4b1..0000000 --- a/test/bundlers/webpack/index.html +++ /dev/null @@ -1,22 +0,0 @@ -<!doctype html> -<head> - <link rel="stylesheet" href="../../../node_modules/mocha/mocha.css" /> - <script src="../../../node_modules/mocha/mocha.js" type="text/javascript"></script> - <script src="../../testHelpers/browserShims.js" type="text/javascript"></script> - <script src="bundle.js" type="text/javascript"></script> -</head> -<body> - <script type="text/javascript"> - var testEnv = "webpack"; - window.onload = function () { - console.log("These tests will only work in all browsers with the console open"); - mocha.setup({ - ui: 'bdd', - globals: [ 'someGlobalVar' ] - }); - enableTests(); - mocha.run(); - }; - </script> - <div id="mocha"></div> -</body>
\ No newline at end of file diff --git a/test/rewire.test.js b/test/rewire.test.js index 5bb6d9a..9765f69 100644 --- a/test/rewire.test.js +++ b/test/rewire.test.js @@ -2,26 +2,178 @@ // In case this module was in strict mode, all other modules called by this would also be strict. // But when testing if the strict mode is preserved, we must ensure that this module is NOT strict. -var expect = require("expect.js"); +var path = require("path"), + expect = require("expect.js"), + rewire = require("../"); -var rewire; +function checkForTypeError(err) { + expect(err.constructor).to.be(TypeError); +} describe("rewire", function () { - before(require("./testHelpers/createFakePackageJSON.js")); - after(require("./testHelpers/removeFakePackageJSON.js")); - it("should pass all shared test cases", function () { - require("./testModules/sharedTestCases.js"); - }); - it("should also work with CoffeeScript", function () { - var coffeeModule; - - rewire = require("rewire"); - coffeeModule = rewire("./testModules/module.coffee"); - coffeeModule.__set__("fs", { - readFileSync: function () { - return "It works!"; - } + it("should work like require()", function () { + rewire("./testModules/moduleA.js").getFilename(); + require("./testModules/moduleA.js").getFilename(); + expect(rewire("./testModules/moduleA.js").getFilename()).to.eql(require("./testModules/moduleA.js").getFilename()); + expect(rewire(".testModules/someOtherModule.js").filename).to.eql(require("./testModules/someOtherModule.js").filename); + }); + it("should return a fresh instance of the module", function () { + var someOtherModule = require("./testModules/someOtherModule.js"), + rewiredSomeOtherModule; + + someOtherModule.fs = "This has been modified"; + rewiredSomeOtherModule = rewire("./testModules/someOtherModule.js"); + expect(rewiredSomeOtherModule.fs).not.to.be("This has been modified"); + }); + it("should not cache the rewired module", function () { + var rewired, + someOtherModule = require("./testModules/someOtherModule.js"); + + someOtherModule.fs = "This has been changed"; + + rewired = rewire("./testModules/someOtherModule.js"); + expect(someOtherModule).not.to.be(rewired); + expect(require("./testModules/moduleA.js").someOtherModule).not.to.be(rewired); + expect(require("./testModules/moduleA.js").someOtherModule).to.be(someOtherModule); + expect(require("./testModules/moduleA.js").someOtherModule.fs).to.be("This has been changed"); + }); + it("should modify the module so it provides a __set__ - function", function () { + expect(rewire("./testModules/moduleA.js").__set__).to.be.a(Function); + expect(rewire("./testModules/moduleB.js").__set__).to.be.a(Function); + }); + it("should modify the module so it provides a __get__ - function", function () { + expect(rewire("./testModules/moduleA.js").__get__).to.be.a(Function); + expect(rewire("./testModules/moduleB.js").__get__).to.be.a(Function); + }); + it("should not influence other modules", function () { + var rewiredModuleA = rewire("./testModules/moduleA.js"); + + expect(require("./testModules/someOtherModule.js").__set__).to.be(undefined); + expect(require("./testModules/someOtherModule.js").__get__).to.be(undefined); + }); + it("should not override/influence global objects by default", function () { + // This should throw no exception + rewire("./testModules/moduleA.js").checkSomeGlobals(); + rewire("./testModules/moduleB.js").checkSomeGlobals(); + }); + it("should provide the ability to set private vars", function () { + var rewiredModuleA = rewire("./testModules/moduleA.js"), + newObj = {}; + + expect(rewiredModuleA.getMyNumber()).to.be(0); + rewiredModuleA.__set__("myNumber", 2); + expect(rewiredModuleA.getMyNumber()).to.be(2); + rewiredModuleA.__set__("myObj", newObj); + expect(rewiredModuleA.getMyObj()).to.be(newObj); + rewiredModuleA.__set__("env", "ENVENV"); + }); + it("should provide the ability to get private vars", function () { + var rewiredModuleA = rewire("./testModules/moduleA.js"); + + expect(rewiredModuleA.__get__("myNumber")).to.be(rewiredModuleA.getMyNumber()); + expect(rewiredModuleA.__get__("myObj")).to.be(rewiredModuleA.getMyObj()); + }); + it("should provide the ability to inject mocks", function (done) { + var rewiredModuleA = rewire("./testModules/moduleA.js"), + mockedFs = { + readFileSync: function (file) { + expect(file).to.be("bla.txt"); + done(); + } + }; + + rewiredModuleA.__set__("fs", mockedFs); + rewiredModuleA.readFileSync(); + }); + it("should not influence other modules when injecting mocks", function () { + var rewiredModuleA = rewire("./testModules/moduleA.js"), + someOtherModule, + mockedFs = {}; + + rewiredModuleA.__set__("fs", mockedFs); + someOtherModule = require("./testModules/someOtherModule.js"); + expect(someOtherModule.fs).not.to.be(mockedFs); + }); + it("should provide the ability to mock global objects just within the module", function () { + var rewiredModuleA = rewire("./testModules/moduleA.js"), + rewiredModuleB = rewire("./testModules/moduleB.js"), + consoleMock = {}, + bufferMock = {}, + documentMock = {}, + newFilename = "myFile.js"; + + rewiredModuleA.__set__({ + console: consoleMock, + __filename: newFilename }); - expect(coffeeModule.readFileSync()).to.be("It works!"); + expect(rewiredModuleA.getConsole()).to.be(consoleMock); + expect(rewiredModuleB.getConsole()).not.to.be(consoleMock); + expect(console).not.to.be(consoleMock); + expect(rewiredModuleA.getFilename()).to.be(newFilename); + expect(rewiredModuleB.getFilename()).not.to.be(newFilename); + expect(console).not.to.be(newFilename); + if (typeof window === "undefined") { + rewiredModuleA.__set__("Buffer", bufferMock); + expect(rewiredModuleA.getBuffer()).to.be(bufferMock); + expect(rewiredModuleB.getBuffer()).not.to.be(bufferMock); + expect(Buffer).not.to.be(bufferMock); + } else { + rewiredModuleA.__set__("document", documentMock); + expect(rewiredModuleA.getDocument()).to.be(documentMock); + expect(rewiredModuleB.getDocument() === documentMock).to.be(false); + expect(document === documentMock).to.be(false); + } + }); + it("should be possible to mock global objects that are added on runtime", function () { + var rewiredModule; + + if (typeof window === "undefined") { + global.someGlobalVar = "test"; + rewiredModule = rewire("./testModules/moduleA.js"); + rewiredModule.__set__("someGlobalVar", "other value"); + expect(global.someGlobalVar).to.be("test"); + expect(rewiredModule.__get__("someGlobalVar")).to.be("other value"); + delete global.someGlobalVar; + } else { + window.someGlobalVar = "test"; + rewiredModule = rewire("./testModules/moduleA.js"); + rewiredModule.__set__("someGlobalVar", "other value"); + expect(window.someGlobalVar).to.be("test"); + expect(rewiredModule.__get__("someGlobalVar")).to.be("other value"); + if (typeof navigator !== "undefined" && /MSIE [6-8]\.[0-9]/g.test(navigator.userAgent) === false) { + delete window.someGlobalVar; + } + } + }); + it("should not be a problem to have a comment on file end", function () { + var rewired = rewire("./testModules/emptyModule.js"); + + rewired.__set__("someVar", "hello"); + expect(rewired.__get__("someVar")).to.be("hello"); + }); + it("should not influence the original require if nothing has been required within the rewired module", function () { + rewire("./testModules/emptyModule.js"); // nothing happens here because emptyModule doesn't require anything + expect(require("./testModules/moduleA.js").__set__).to.be(undefined); // if restoring the original node require didn't worked, the module would have a setter + }); + it("subsequent calls of rewire should always return a new instance", function () { + expect(rewire("./testModules/moduleA.js")).not.to.be(rewire("./testModules/moduleA.js")); + }); + it("should preserve the strict mode (not IE)", function () { + var strictModule = rewire("./testModules/strictModule.js"); + + expect(function () { + strictModule.doSomethingUnstrict(); + }).to.throwException(checkForTypeError); + }); + it("should not modify line numbers in stack traces", function () { + var throwError = rewire("./testModules/throwError.js"); + + try { + throwError(); + } catch (err) { + if (err.stack) { + expect(err.stack.split("\n")[1]).to.match(/:2:11/); + } + } }); });
\ No newline at end of file diff --git a/test/shims.js b/test/shims.js deleted file mode 100644 index a5ddafd..0000000 --- a/test/shims.js +++ /dev/null @@ -1,48 +0,0 @@ -// Taken from https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf#Compatibility -if (!Array.prototype.indexOf) { - Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) { - "use strict"; - if (this == null) { - throw new TypeError(); - } - var t = Object(this); - var len = t.length >>> 0; - if (len === 0) { - return -1; - } - var n = 0; - if (arguments.length > 0) { - n = Number(arguments[1]); - if (n != n) { // shortcut for verifying if it's NaN - n = 0; - } else if (n != 0 && n != Infinity && n != -Infinity) { - n = (n > 0 || -1) * Math.floor(Math.abs(n)); - } - } - if (n >= len) { - return -1; - } - var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); - for (; k < len; k++) { - if (k in t && t[k] === searchElement) { - return k; - } - } - return -1; - }; -} - - -// Taken from https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/trim#Compatibility -if(!String.prototype.trim) { - String.prototype.trim = function () { - return this.replace(/^\s+|\s+$/g,''); - }; -} - -// Taken from https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray#Compatibility -if(!Array.isArray) { - Array.isArray = function (vArg) { - return Object.prototype.toString.call(vArg) === "[object Array]"; - }; -}
\ No newline at end of file diff --git a/test/testHelpers/browserShims.js b/test/testHelpers/browserShims.js deleted file mode 100644 index ef29307..0000000 --- a/test/testHelpers/browserShims.js +++ /dev/null @@ -1,44 +0,0 @@ -if (!Array.prototype.indexOf) { - Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) { - "use strict"; - if (this == null) { - throw new TypeError(); - } - var t = Object(this); - var len = t.length >>> 0; - if (len === 0) { - return -1; - } - var n = 0; - if (arguments.length > 0) { - n = Number(arguments[1]); - if (n != n) { // shortcut for verifying if it's NaN - n = 0; - } else if (n != 0 && n != Infinity && n != -Infinity) { - n = (n > 0 || -1) * Math.floor(Math.abs(n)); - } - } - if (n >= len) { - return -1; - } - var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); - for (; k < len; k++) { - if (k in t && t[k] === searchElement) { - return k; - } - } - return -1; - } -} - -if(!String.prototype.trim) { - String.prototype.trim = function () { - return this.replace(/^\s+|\s+$/g,''); - }; -} - -if(!Array.isArray) { - Array.isArray = function (vArg) { - return Object.prototype.toString.call(vArg) === "[object Array]"; - }; -}
\ No newline at end of file diff --git a/test/testHelpers/createFakePackageJSON.js b/test/testHelpers/createFakePackageJSON.js deleted file mode 100644 index ec52a12..0000000 --- a/test/testHelpers/createFakePackageJSON.js +++ /dev/null @@ -1,13 +0,0 @@ -var fs = require("fs"),
- pathUtil = require("path"),
- nodeModulesDir = pathUtil.resolve(__dirname, "../../node_modules");
-
-module.exports = function createFakePackageJSON(done) {
- var fakePackageJSON = '{ "main": "../../lib/index.js" }';
-
- fs.mkdir(nodeModulesDir, function onMkDirNodeModules() {
- fs.mkdir(nodeModulesDir + "/rewire", function onRewireMkDir() {
- fs.writeFile(nodeModulesDir + "/rewire/package.json", fakePackageJSON, "utf8", done);
- });
- });
-};
\ No newline at end of file diff --git a/test/testHelpers/removeFakePackageJSON.js b/test/testHelpers/removeFakePackageJSON.js deleted file mode 100644 index 676339e..0000000 --- a/test/testHelpers/removeFakePackageJSON.js +++ /dev/null @@ -1,9 +0,0 @@ -var fs = require("fs"),
- pathUtil = require("path"),
- nodeModulesDir = pathUtil.resolve(__dirname, "../../node_modules");
-
-module.exports = function removeFakePackageJSON(done) {
- fs.unlink(nodeModulesDir + "/rewire/package.json", function onPackageJSONUnlink() {
- fs.rmdir(nodeModulesDir + "/rewire", done);
- });
-};
\ No newline at end of file diff --git a/test/testModules/sharedTestCases.js b/test/testModules/sharedTestCases.js index eb0c8c9..70bad49 100644 --- a/test/testModules/sharedTestCases.js +++ b/test/testModules/sharedTestCases.js @@ -165,4 +165,15 @@ describe("rewire " + (typeof testEnv === "undefined"? "(node)": "(" + testEnv + strictModule.doSomethingUnstrict(); }).to.throwException(checkForTypeError); }); + it("should not modify line numbers in stack traces", function () { + var throwError = rewire("./throwError.js"); + + try { + throwError(); + } catch (err) { + if (err.stack) { + expect(err.stack.split("\n")[1]).to.match(/:2:11/); + } + } + }); });
\ No newline at end of file diff --git a/test/testModules/throwError.js b/test/testModules/throwError.js new file mode 100644 index 0000000..9bdf68b --- /dev/null +++ b/test/testModules/throwError.js @@ -0,0 +1,3 @@ +module.exports = function () { + throw new Error(); +}; |