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
diff options
context:
space:
mode:
Diffstat (limited to 'test/browserify.browserifyRewire.test.js')
-rw-r--r--test/browserify.browserifyRewire.test.js126
1 files changed, 126 insertions, 0 deletions
diff --git a/test/browserify.browserifyRewire.test.js b/test/browserify.browserifyRewire.test.js
new file mode 100644
index 0000000..cf8dbd9
--- /dev/null
+++ b/test/browserify.browserifyRewire.test.js
@@ -0,0 +1,126 @@
+var vm = require("vm"),
+ fs = require("fs"),
+ pathUtil = require("path"),
+ expect = require("expect.js"),
+ browserify = require("browserify"),
+ browserifyMiddleware = require("../lib/index.js").browserify;
+
+/**
+ * Executes the source in a context that pretends to be a browser
+ * @param {!String} src
+ */
+function runInFakeBrowserContext(src, filename) {
+ vm.runInNewContext(src, {
+ window: {
+ console: console,
+ describe: describe,
+ it: it,
+ before: before,
+ after: after,
+ beforeEach: beforeEach,
+ afterEach: afterEach,
+ setTimeout: setTimeout
+ },
+ console: console
+ }, filename);
+}
+
+describe("browserifyRewire", function () {
+ before(require("./testHelpers/createFakePackageJSON.js"));
+ after(require("./testHelpers/removeFakePackageJSON.js"));
+ it("should attach __set__ and __get__ to the exports-obj", function (done) {
+ var context,
+ exportsObj = {},
+ returnedObj,
+ browserifyRewire;
+
+ // Register with fake objects
+ // Using null for objects that are not involved in this particular test
+ function moduleA() {
+ "use strict";
+
+ browserifyRewire.register("/a.js", null, null);
+ returnedObj = browserifyRewire("/a.js", "/b.js");
+ }
+
+ function moduleB() {
+ "use strict";
+ browserifyRewire.register("/b.js", setter, getter);
+
+ return exportsObj;
+ }
+
+ function fakeResolve() {
+ return "/b.js";
+ }
+
+ function fakeRequire(requirePath) {
+ if (requirePath === "path") {
+ return pathUtil;
+ } else {
+ return moduleB();
+ }
+ }
+ fakeRequire.resolve = fakeResolve;
+
+ function setter() {}
+ function getter() {}
+
+ context = {
+ require: fakeRequire,
+ module: {},
+ console: console,
+ window: {
+ browserifyRequire: {
+ modules: {
+ "/b.js": {
+ _cached : {}
+ }
+ }
+ }
+ }
+ };
+
+ fs.readFile(pathUtil.resolve(__dirname, "../lib/browserify/browserifyRewire.js"), "utf8", function onBrowserifyRewireRead(err, src) {
+ vm.runInNewContext(src, context);
+ browserifyRewire = context.module.exports;
+
+ moduleA();
+
+ expect(returnedObj).not.to.be(exportsObj);
+ expect(returnedObj.__set__).to.be(setter);
+ expect(returnedObj.__get__).to.be(getter);
+ expect(context.window.browserifyRequire.modules["/b.js"]._cached).to.be(returnedObj);
+
+ done();
+ });
+ });
+ it("should run all sharedTestCases without exception", function (done) {
+ var b = browserify(),
+ browserOutput = __dirname + "/browser/browseroutput.js",
+ browserBundle,
+ vmBundle;
+
+ b.use(browserifyMiddleware);
+ b.require(__dirname + "/testModules/sharedTestCases.js");
+ vmBundle = b.bundle();
+ browserBundle = vmBundle;
+
+ // Setup for mocha
+ browserBundle += 'window.onload = function () {' +
+ 'mocha.setup("bdd");' +
+ 'window.browserifyRequire("/test/testModules/sharedTestCases.js");' +
+ 'mocha.run();' +
+ '};';
+
+ vmBundle += 'window.browserifyRequire("/test/testModules/sharedTestCases.js");';
+
+ // Output for browser-testing
+ fs.mkdir(__dirname + "/browser", function onMkDir() {
+ fs.writeFile(browserOutput, browserBundle, "utf8", done);
+
+ // This should throw no exception.
+ runInFakeBrowserContext(vmBundle, browserOutput);
+ });
+ });
+}); \ No newline at end of file