toolkit/javascript/d3/test/env-xhr.js
changeset 47 c0b4a8b5a012
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolkit/javascript/d3/test/env-xhr.js	Thu Apr 10 14:20:23 2014 +0200
@@ -0,0 +1,56 @@
+var fs = require("fs");
+
+XMLHttpRequest = function() {
+  var self = this,
+      info = self._info = {},
+      headers = {},
+      url;
+
+  // TODO handle file system errors?
+
+  self.open = function(m, u, a) {
+    info.url = u;
+    info.async = a;
+    Object.freeze(info);
+    self.send = a ? read : readSync;
+  };
+
+  self.overrideMimeType = function(x) {
+    info.mimeType = x;
+  };
+
+  function read() {
+    fs.readFile(info.url, "binary", function(e, d) {
+      if (e) {
+        self.status = 404; // assumed
+      } else {
+        self.status = 200;
+        self.responseText = d;
+        self.responseXML = {_xml: d};
+        headers["Content-Length"] = d.length;
+      }
+      self.readyState = 4;
+      XMLHttpRequest._last = self;
+      if (self.onreadystatechange) self.onreadystatechange();
+    });
+  }
+
+  function readSync() {
+    try {
+      var d = fs.readFileSync(info.url, "binary");
+      self.status = 200;
+      self.responseText = d;
+      self.responseXML = {_xml: d};
+      headers["Content-Length"] = d.length;
+    } catch (e) {
+      self.status = 404; // assumed
+    }
+    self.readyState = 4;
+    XMLHttpRequest._last = self;
+    if (self.onreadystatechange) self.onreadystatechange();
+  }
+
+  self.getResponseHeader = function(n) {
+    return headers[n];
+  };
+};