diff options
author | Johannes Ewald <mail@johannesewald.de> | 2013-03-13 04:33:40 +0400 |
---|---|---|
committer | Johannes Ewald <mail@johannesewald.de> | 2013-03-13 04:33:40 +0400 |
commit | ce7cbc88e6913e9039304126cce66e00f10166c7 (patch) | |
tree | 56d3715ffc776fedd26277eab336ac5b95246325 /test | |
parent | df5285aa66df5855d1a9eee8f1ede1b4a192abb6 (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.js | 60 | ||||
-rw-r--r-- | test/bundlers.getRewireRequires.test.js | 19 | ||||
-rw-r--r-- | test/bundlers.webpack.test.js | 71 | ||||
-rw-r--r-- | test/bundlers/browserify/index.html | 22 | ||||
-rw-r--r-- | test/bundlers/webpack/index.html | 22 | ||||
-rw-r--r-- | test/rewire.test.js | 186 | ||||
-rw-r--r-- | test/shims.js | 48 | ||||
-rw-r--r-- | test/testHelpers/browserShims.js | 44 | ||||
-rw-r--r-- | test/testHelpers/createFakePackageJSON.js | 13 | ||||
-rw-r--r-- | test/testHelpers/removeFakePackageJSON.js | 9 | ||||
-rw-r--r-- | test/testModules/sharedTestCases.js | 11 | ||||
-rw-r--r-- | test/testModules/throwError.js | 3 |
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(); +}; |