// Don't run code in ES5 strict mode.
// 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"),
    fs = require("fs"),
    path = require("path");

var rewire;

describe("rewire", function () {
    before(function () {
        var fakeNodeModules = path.resolve(__dirname, "testModules/fake_node_modules");

        if (fs.existsSync(fakeNodeModules)) {
            fs.renameSync(fakeNodeModules, path.resolve(__dirname, "testModules/node_modules"));
        }
    });
    it("should pass all shared test cases", function () {
        require("./testModules/sharedTestCases.js");
    });
    it("should also work with CoffeeScript", function () {
        var coffeeModule;

        rewire = require("../");
        coffeeModule = rewire("./testModules/module.coffee");
        coffeeModule.__set__("fs", {
            readFileSync: function () {
                return "It works!";
            }
        });
        expect(coffeeModule.readFileSync()).to.be("It works!");
    });
    it("should keep src variable in function scope", function () {
        expect(global.src).to.be(undefined);
    });
});
@@ -631,32 +631,454 @@
       %7D%0A    %7D);%0A
+    it(%22should keep not leak globals%22, function () %7B%0A        // This test should run first, as the global space may be already polluted if %0A        //   require(%22../%22) is run before this test.%0A        var originalGlobalKeys = Object.keys(global),%0A            rewire = require(%22../%22),%0A            emptyModule = rewire(%22./testModules/emptyModule.js%22);%0A        expect(Object.keys(global)).to.eql(originalGlobalKeys);%0A    %7D);%0A
     it(%22should p
@@ -1576,127 +1576,7 @@
 %7D);%0A
-    it(%22should keep src variable in function scope%22, function () %7B%0A        expect(global.src).to.be(undefined);%0A    %7D);%0A
 %7D);

revise test to find all leaked globals