text: "use strict"; // run code in ES5 strict mode
  
  var someOtherModule = require("./someOtherModule.js"),
      myNumber = 0,   // copy by value
      myObj = {},     // copy by reference
      env = "bla",
      fs;
  
  // We need getters and setters for private vars to check if our injected setters and getters actual work
  function setMyNumber(newNumber) {
      myNumber = newNumber;
  }
  
  function getMyNumber() {
      return myNumber;
  }
  
  function setMyObj(newObj) {
      myObj = newObj;
  }
  
  function getMyObj() {
      return myObj;
  }
  
  function readFileSync() {
      fs.readFileSync("bla.txt", "utf8");
  }
  
  function checkSomeGlobals() {
      var isLowerIE,
          typeOfGlobalFunc;
  
      if (typeof navigator !== "undefined") {
          isLowerIE = /MSIE [6-8]\.[0-9]/g.test(navigator.userAgent);
      }
      if (isLowerIE) {
          typeOfGlobalFunc = "object";
      } else {
          typeOfGlobalFunc = "function";
      }
  
      if (typeof global !== "object") {
          throw new ReferenceError("global is not an object");
      }
      if (typeof console !== "object") {
          throw new ReferenceError("console is not an object");
      }
      if (typeof require !== "function") {
          throw new ReferenceError("require is not a function");
      }
      if (typeof module !== "object") {
          throw new ReferenceError("module is not an object");
      }
      if (typeof exports !== "object") {
          throw new ReferenceError("exports is not an object");
      }
      if (module.exports !== exports) {
          throw new Error("module.exports === exports returns false");
      }
      if (typeof __dirname !== "string") {
          throw new ReferenceError("__dirname is not a string");
      }
      if (typeof __filename !== "string") {
          throw new ReferenceError("__filename is not a string");
      }
      if (typeof setTimeout !== typeOfGlobalFunc) {
          throw new ReferenceError("setTimeout is not a function");
      }
      if (typeof clearTimeout !== typeOfGlobalFunc) {
          throw new ReferenceError("clearTimeout is not a function");
      }
      if (typeof setInterval !== typeOfGlobalFunc) {
          throw new ReferenceError("setInterval is not a function");
      }
      if (typeof clearInterval !== typeOfGlobalFunc) {
          throw new ReferenceError("clearInterval is not a function");
      }
      if (typeof Error !== "function") {
          throw new ReferenceError("Error is not a function");
      }
      if (typeof parseFloat !== "function") {
          throw new ReferenceError("parseFloat is not a function");
      }
      if (typeof parseInt !== "function") {
          throw new ReferenceError("parseInt is not a function");
      }
      if (typeof window === "undefined") {
          if (typeof process !== "object") {
              throw new ReferenceError("process is not an object");
          }
          if (typeof Buffer !== "function") {
              throw new ReferenceError("Buffer is not a function");
          }
      } else {
          if (typeof encodeURIComponent !== "function") {
              throw new ReferenceError("encodeURIComponent is not a function");
          }
          if (typeof decodeURIComponent !== "function") {
              throw new ReferenceError("decodeURIComponent is not a function");
          }
          if (typeof document !== "object") {
              throw new ReferenceError("document is not an object");
          }
      }
  }
  
  function getConsole() {
      return console;
  }
  
  function getFilename() {
      return __filename;
  }
  
  function getBuffer() {
      return Buffer;
  }
  
  function getDocument() {
      return document;
  }
  
  // different styles of exports in moduleA.js and moduleB.js
  exports.setMyNumber = setMyNumber;
  exports.getMyNumber = getMyNumber;
  exports.setMyObj = setMyObj;
  exports.getMyObj = getMyObj;
  exports.readFileSync = readFileSync;
  exports.checkSomeGlobals = checkSomeGlobals;
  exports.getConsole = getConsole;
  exports.getFilename = getFilename;
  exports.getBuffer = getBuffer;
  exports.getDocument = getDocument;
  exports.someOtherModule = someOtherModule;