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-03 22:18:41 +0400
committerJohannes <mail@johannesewald.de>2012-06-03 22:18:41 +0400
commit07496ad0283cf5cc2184ecdf57b7d80cdc8348eb (patch)
treeda64eb0ef4a03b30720fcb10edabb851912d618c /test
parentfb06490b1b810777ebf8f35cdc83875ccda893e8 (diff)
all tests up and running
Diffstat (limited to 'test')
-rw-r--r--test/getLeakingSrc.test.js16
-rw-r--r--test/getMonkeyPatchSrc.test.js30
-rw-r--r--test/testModules/A/moduleA.js21
-rw-r--r--test/testModules/B/moduleB.js7
-rw-r--r--test/testModules/C/moduleC.js3
-rw-r--r--test/testModules/index.js5
-rw-r--r--test/trick.test.js103
7 files changed, 185 insertions, 0 deletions
diff --git a/test/getLeakingSrc.test.js b/test/getLeakingSrc.test.js
new file mode 100644
index 0000000..cc215ea
--- /dev/null
+++ b/test/getLeakingSrc.test.js
@@ -0,0 +1,16 @@
+"use strict"; // run code in ES5 strict mode
+
+var expect = require("expect.js"),
+ getLeakingWrapper = require("../lib/getLeakingSrc.js");
+
+describe("#getLeakingWrapper", function () {
+ it("should return 'exports.__ = {};'", function () {
+ expect(getLeakingWrapper([])).to.be("exports.__ = {};");
+ });
+ it("should return 'exports.__ = {somethingPrivate:somethingPrivate,somethingSecret:somethingSecret};'", function () {
+ var leakArr = ["somethingPrivate", "somethingSecret"];
+
+ expect(getLeakingWrapper(leakArr))
+ .to.be("exports.__ = {somethingPrivate:somethingPrivate,somethingSecret:somethingSecret};");
+ });
+}); \ No newline at end of file
diff --git a/test/getMonkeyPatchSrc.test.js b/test/getMonkeyPatchSrc.test.js
new file mode 100644
index 0000000..d7cecaa
--- /dev/null
+++ b/test/getMonkeyPatchSrc.test.js
@@ -0,0 +1,30 @@
+"use strict"; // run code in ES5 strict mode
+
+var expect = require("expect.js"),
+ getMonkeyPatchSrc = require("../lib/getMonkeyPatchSrc.js");
+
+describe("#getMonkeyPatchSrc", function () {
+ it("should return ''", function () {
+ var expectedSrc = "",
+ subject = {};
+
+ expect(getMonkeyPatchSrc(subject)).to.be(expectedSrc);
+ });
+ it("should return 'process.argv=[\"myArg1\", \"myArg2\"];var console=456;'", function () {
+ var expectedSrc = "process.argv=[\"myArg1\", \"myArg2\"];var console=456;",
+ subject = {
+ process: {
+ argv: ["myArg1", "myArg2"]
+ },
+ console: 456
+ };
+
+ expect(getMonkeyPatchSrc(subject)).to.be(expectedSrc);
+ });
+ it("should return 'level1.level2.level3.level4.level5=true;", function () {
+ var expectedSrc = "level1.level2.level3.level4.level5=true;",
+ subject = {level1: {level2: {level3: {level4: {level5: true}}}}};
+
+ expect(getMonkeyPatchSrc(subject)).to.be(expectedSrc);
+ });
+}); \ No newline at end of file
diff --git a/test/testModules/A/moduleA.js b/test/testModules/A/moduleA.js
new file mode 100644
index 0000000..1599f01
--- /dev/null
+++ b/test/testModules/A/moduleA.js
@@ -0,0 +1,21 @@
+"use strict"; // run code in ES5 strict mode
+
+var path = require("path"),
+
+ // different ways to require a module
+ fs = require("fs"), // native module
+ c = require("../C/moduleC.js"), // relative path
+ b = require(path.resolve(__dirname, "../B/moduleB.js")), // absolute path
+ toSrc = require("toSrc"), // node_modules path
+ index = require("../"); // index.js 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
diff --git a/test/testModules/B/moduleB.js b/test/testModules/B/moduleB.js
new file mode 100644
index 0000000..7b7b32c
--- /dev/null
+++ b/test/testModules/B/moduleB.js
@@ -0,0 +1,7 @@
+"use strict"; // run code in ES5 strict mode
+
+var c = require("../C/moduleC.js");
+
+exports.requireIndex = function () { // necessary to avoid circular dependency
+ exports.index = require("../index.js");
+}; \ No newline at end of file
diff --git a/test/testModules/C/moduleC.js b/test/testModules/C/moduleC.js
new file mode 100644
index 0000000..b7245de
--- /dev/null
+++ b/test/testModules/C/moduleC.js
@@ -0,0 +1,3 @@
+"use strict"; // run code in ES5 strict mode
+
+module.exports = "c"; \ No newline at end of file
diff --git a/test/testModules/index.js b/test/testModules/index.js
new file mode 100644
index 0000000..fa07160
--- /dev/null
+++ b/test/testModules/index.js
@@ -0,0 +1,5 @@
+"use strict"; // run code in ES5 strict mode
+
+exports.a = require("./A/moduleA.js");
+exports.b = require("./B/moduleB.js");
+exports.c = require("./C/moduleC.js"); \ No newline at end of file
diff --git a/test/trick.test.js b/test/trick.test.js
new file mode 100644
index 0000000..bb6633b
--- /dev/null
+++ b/test/trick.test.js
@@ -0,0 +1,103 @@
+"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).to.be(process); // the process object itself should not be changed
+ expect(tricked.process.argv).to.be.eql(injections.process.argv);
+ 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