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
path: root/test
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 /test
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
Diffstat (limited to 'test')
-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
12 files changed, 183 insertions, 325 deletions
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();
+};