Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/rewire.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Ewald <mail@johannesewald.de>2013-03-13 04:33:40 +0400
committerJohannes Ewald <mail@johannesewald.de>2013-03-13 04:33:40 +0400
commitce7cbc88e6913e9039304126cce66e00f10166c7 (patch)
tree56d3715ffc776fedd26277eab336ac5b95246325
parentdf5285aa66df5855d1a9eee8f1ede1b4a192abb6 (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.yml2
-rw-r--r--CHANGELOG.md4
-rw-r--r--README.md25
-rw-r--r--lib/bundlers/browserify/browserifyMiddleware.js2
-rw-r--r--lib/bundlers/webpack/configureWebpack.js2
-rw-r--r--package.json6
-rw-r--r--test/bundlers.browserify.test.js60
-rw-r--r--test/bundlers.getRewireRequires.test.js19
-rw-r--r--test/bundlers.webpack.test.js71
-rw-r--r--test/bundlers/browserify/index.html22
-rw-r--r--test/bundlers/webpack/index.html22
-rw-r--r--test/rewire.test.js186
-rw-r--r--test/shims.js48
-rw-r--r--test/testHelpers/browserShims.js44
-rw-r--r--test/testHelpers/createFakePackageJSON.js13
-rw-r--r--test/testHelpers/removeFakePackageJSON.js9
-rw-r--r--test/testModules/sharedTestCases.js11
-rw-r--r--test/testModules/throwError.js3
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
diff --git a/README.md b/README.md
index 9ad2971..e1546a3 100644
--- a/README.md
+++ b/README.md
@@ -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();
+};