diff options
author | Johannes <mail@johannesewald.de> | 2012-06-03 22:18:41 +0400 |
---|---|---|
committer | Johannes <mail@johannesewald.de> | 2012-06-03 22:18:41 +0400 |
commit | 07496ad0283cf5cc2184ecdf57b7d80cdc8348eb (patch) | |
tree | da64eb0ef4a03b30720fcb10edabb851912d618c /test | |
parent | fb06490b1b810777ebf8f35cdc83875ccda893e8 (diff) |
all tests up and running
Diffstat (limited to 'test')
-rw-r--r-- | test/getLeakingSrc.test.js | 16 | ||||
-rw-r--r-- | test/getMonkeyPatchSrc.test.js | 30 | ||||
-rw-r--r-- | test/testModules/A/moduleA.js | 21 | ||||
-rw-r--r-- | test/testModules/B/moduleB.js | 7 | ||||
-rw-r--r-- | test/testModules/C/moduleC.js | 3 | ||||
-rw-r--r-- | test/testModules/index.js | 5 | ||||
-rw-r--r-- | test/trick.test.js | 103 |
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 |