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 <mail@johannesewald.de>2012-06-04 02:23:27 +0400
committerJohannes <mail@johannesewald.de>2012-06-04 02:23:27 +0400
commitb4b2794f5a5e5977e048ff777ac53263144126e6 (patch)
tree11213db4acbb4bd220069bd426b83d9739339379 /test
parentd4eea33555f4e67be674c046ff1d1a9a460af94a (diff)
changed repo-name to rewire
Diffstat (limited to 'test')
-rw-r--r--test/debug.test.js11
-rw-r--r--test/rewire.test.js112
-rw-r--r--test/testModules/A/moduleA.js27
-rw-r--r--test/testModules/debuggerModule.js13
-rw-r--r--test/trick.test.js104
5 files changed, 155 insertions, 112 deletions
diff --git a/test/debug.test.js b/test/debug.test.js
new file mode 100644
index 0000000..4a388b6
--- /dev/null
+++ b/test/debug.test.js
@@ -0,0 +1,11 @@
+"use strict"; // run code in ES5 strict mode
+
+var rewire = require("../lib/index.js");
+
+// add breakpoints in testModules/debuggerModule.js and debug this file with your IDE to
+// check if debugging works with rewire.
+var debuggerModule = rewire("./testModules/debuggerModule.js", null, {
+ someVar: "Look if you can see me in your IDE when holding at the breakpoints"
+});
+
+debuggerModule(); \ No newline at end of file
diff --git a/test/rewire.test.js b/test/rewire.test.js
new file mode 100644
index 0000000..41dff60
--- /dev/null
+++ b/test/rewire.test.js
@@ -0,0 +1,112 @@
+"use strict"; // run code in ES5 strict mode
+
+var path = require("path"),
+ expect = require("expect.js"),
+ rewire = require("../lib/index.js");
+
+var testModules = [
+ path.resolve(__dirname, "./testModules/index.js"),
+ path.resolve(__dirname, "./testModules/A/moduleA.js"),
+ path.resolve(__dirname, "./testModules/B/moduleB.js"),
+ path.resolve(__dirname, "./testModules/C/moduleC.js")
+ ];
+
+
+function cleanRequireCache() {
+ var i;
+
+ for (i = 0; i < testModules.length; i++) {
+ delete require.cache[testModules[i]];
+ }
+}
+
+describe("#rewire", function () {
+ beforeEach(cleanRequireCache); // ensuring a clean test environment
+ it("should work like require() when omitting all other params", function () {
+ expect(rewire("./testModules/A/moduleA.js")).to.be(require("./testModules/A/moduleA.js"));
+ });
+ it("should require all mocks", function () {
+ var rewired,
+ fsMock = {},
+ mocks = {},
+ moduleBMock = {},
+ moduleCMock = {},
+ toSrcMock = {},
+ indexMock = {};
+
+ mocks["fs"] = fsMock;
+ mocks[path.resolve(__dirname, "./testModules/B/moduleB.js")] = moduleBMock;
+ mocks["../C/moduleC.js"] = moduleCMock;
+ mocks["toSrc"] = toSrcMock;
+ mocks["../"] = indexMock;
+
+ rewired = rewire("./testModules/A/moduleA.js", mocks);
+ expect(rewired.fs).to.be(fsMock);
+ expect(rewired.b).to.be(moduleBMock);
+ expect(rewired.c).to.be(moduleCMock);
+ expect(rewired.toSrc).to.be(toSrcMock);
+ expect(rewired.index).to.be(indexMock);
+ });
+ it("should inject object modifications", function () {
+ var rewired,
+ injections = {
+ process: {
+ argv: ["arg1", "arg2", "arg3"]
+ },
+ console: 123
+ };
+
+ rewired = rewire("./testModules/A/moduleA.js", null, injections);
+ rewired.exportAll();
+ expect(rewired.process).not.to.be(process);
+ expect(process.argv).not.to.eql(injections.process.argv);
+ expect(rewired.process).to.eql(injections.process);
+ expect(rewired.console).to.be(123);
+ });
+ it("should inject custom scripts", function () {
+ var rewired,
+ script = "var console = 456;";
+
+ rewired = rewire("./testModules/A/moduleA.js", null, script);
+ rewired.exportAll();
+ expect(rewired.console).to.be(456);
+ });
+ it("should leak private variables", function () {
+ var rewired,
+ leaks = ["myPrivateVar"];
+
+ rewired = rewire("./testModules/A/moduleA.js", null, null, leaks);
+ expect(rewired.__.myPrivateVar).to.be("Hello I'm very private");
+ });
+ it("should leak private functions", function () {
+ var rewired,
+ leaks = ["myPrivateFunction"];
+
+ rewired = rewire("./testModules/A/moduleA.js", null, null, leaks);
+ expect(rewired.__.myPrivateFunction()).to.be("Hello I'm very private");
+ });
+ it("should leak nothing on demand", function () {
+ var rewired;
+
+ rewired = rewire("./testModules/A/moduleA.js");
+ expect(rewired.__).to.be(undefined);
+ });
+ it("should cache the rewired module", function () {
+ var rewired;
+
+ rewired = rewire("./testModules/B/moduleB.js");
+ rewired.requireIndex();
+ expect(rewired.index.b).to.be(rewired);
+ cleanRequireCache();
+ rewired = rewire("./testModules/B/moduleB.js", null, null, null, true);
+ rewired.requireIndex();
+ expect(rewired.index.b).to.be(rewired);
+ });
+ it("should not cache the rewired module on demand", function () {
+ var rewired;
+
+ rewired = rewire("./testModules/B/moduleB.js", null, null, null, false);
+ rewired.requireIndex();
+ expect(rewired.index.b).not.to.be(rewired);
+ });
+}); \ No newline at end of file
diff --git a/test/testModules/A/moduleA.js b/test/testModules/A/moduleA.js
index 1599f01..ffa3290 100644
--- a/test/testModules/A/moduleA.js
+++ b/test/testModules/A/moduleA.js
@@ -11,11 +11,22 @@ var path = require("path"),
var myPrivateVar = "Hello I'm very private";
-// expose all required modules to test for mocks
-exports.fs = fs;
-exports.b = b;
-exports.c = c;
-exports.toSrc = toSrc;
-exports.index = index;
-exports.process = process;
-exports.console = console; \ No newline at end of file
+function myPrivateFunction() {
+ return "Hello I'm very private";
+}
+
+function exportAll() {
+ // expose all required modules to test for mocks
+ exports.fs = fs;
+ exports.b = b;
+ exports.c = c;
+ exports.toSrc = toSrc;
+ exports.index = index;
+ exports.process = process;
+ exports.console = console;
+}
+
+exportAll();
+exports.exportAll = exportAll;
+
+
diff --git a/test/testModules/debuggerModule.js b/test/testModules/debuggerModule.js
new file mode 100644
index 0000000..926c607
--- /dev/null
+++ b/test/testModules/debuggerModule.js
@@ -0,0 +1,13 @@
+"use strict"; // run code in ES5 strict mode
+
+// Add a breakpoint on line 6 and on line 11 and debug "debug.test.js" to test if the IDE stops at these points.
+// Watch also the variable someVar that is injected by rewire. It will be undefined at this point because
+// all injections are executed at the end of the module.
+// It's already visible because of hoisting: http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/)
+var someNumber = 0;
+
+module.exports = function () {
+ // In this line someVar will be defined.
+ someNumber++;
+ someVar;
+}; \ No newline at end of file
diff --git a/test/trick.test.js b/test/trick.test.js
deleted file mode 100644
index 92055bc..0000000
--- a/test/trick.test.js
+++ /dev/null
@@ -1,104 +0,0 @@
-"use strict"; // run code in ES5 strict mode
-
-var path = require("path"),
- expect = require("expect.js"),
- trick = require("../lib/index.js");
-
-var testModules = [
- path.resolve(__dirname, "./testModules/index.js"),
- path.resolve(__dirname, "./testModules/A/moduleA.js"),
- path.resolve(__dirname, "./testModules/B/moduleB.js"),
- path.resolve(__dirname, "./testModules/C/moduleC.js")
- ];
-
-
-function cleanRequireCache() {
- var i;
-
- for (i = 0; i < testModules.length; i++) {
- delete require.cache[testModules[i]];
- }
-}
-
-describe("#trick", function () {
- beforeEach(cleanRequireCache); // ensuring a clean test environment
- it("should work like require() when omitting all other params", function () {
- expect(trick("./testModules/A/moduleA.js")).to.be(require("./testModules/A/moduleA.js"));
- });
- it("should require all mocks", function () {
- var tricked,
- fsMock = {},
- mocks = {},
- moduleBMock = {},
- moduleCMock = {},
- toSrcMock = {},
- indexMock = {};
-
- mocks["fs"] = fsMock;
- mocks[path.resolve(__dirname, "./testModules/B/moduleB.js")] = moduleBMock;
- mocks["../C/moduleC.js"] = moduleCMock;
- mocks["toSrc"] = toSrcMock;
- mocks["../"] = indexMock;
-
- tricked = trick("./testModules/A/moduleA.js", mocks);
- expect(tricked.fs).to.be(fsMock);
- expect(tricked.b).to.be(moduleBMock);
- expect(tricked.c).to.be(moduleCMock);
- expect(tricked.toSrc).to.be(toSrcMock);
- expect(tricked.index).to.be(indexMock);
- });
- it("should inject object modifications", function () {
- var tricked,
- injections = {
- process: {
- argv: ["arg1", "arg2", "arg3"]
- },
- console: 123
- };
-
- tricked = trick("./testModules/A/moduleA.js", null, injections);
- expect(tricked.process).not.to.be(process);
- expect(process.argv).not.to.eql(injections.process.argv);
- expect(tricked.process).to.eql(injections.process);
- expect(tricked.console).to.be(123);
- });
- it("should inject custom scripts", function () {
- var tricked,
- script = "var console = 456;";
-
- tricked = trick("./testModules/A/moduleA.js", null, script);
-
- expect(tricked.console).to.be(456);
- });
- it("should leak private variables", function () {
- var tricked,
- leaks = ["myPrivateVar"];
-
- tricked = trick("./testModules/A/moduleA.js", null, null, leaks);
- expect(tricked.__.myPrivateVar).to.be("Hello I'm very private");
- });
- it("should leak nothing on demand", function () {
- var tricked;
-
- tricked = trick("./testModules/A/moduleA.js");
- expect(tricked.__).to.be(undefined);
- });
- it("should cache the tricked module", function () {
- var tricked;
-
- tricked = trick("./testModules/B/moduleB.js");
- tricked.requireIndex();
- expect(tricked.index.b).to.be(tricked);
- cleanRequireCache();
- tricked = trick("./testModules/B/moduleB.js", null, null, null, true);
- tricked.requireIndex();
- expect(tricked.index.b).to.be(tricked);
- });
- it("should not cache the tricked module on demand", function () {
- var tricked;
-
- tricked = trick("./testModules/B/moduleB.js", null, null, null, false);
- tricked.requireIndex();
- expect(tricked.index.b).not.to.be(tricked);
- });
-}); \ No newline at end of file