Adding a test for stream copier
authorBoris Zbarsky <bzbarsky@mit.edu>
Mon, 15 Dec 2008 11:58:08 -0500
changeset 22809 107fb0f79d87d555c42a833f3f27e01b37643910
parent 22808 9bc6733d81ccf3e384414097ddfab90443a2a1d5
child 22810 f7c58d2e32d0a879b98eee6731b3853b81cc49e7
push id4191
push userbzbarsky@mozilla.com
push dateMon, 15 Dec 2008 17:07:01 +0000
treeherdermozilla-central@f7c58d2e32d0 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone1.9.2a1pre
Adding a test for stream copier
netwerk/test/unit/test_streamcopier.js
new file mode 100644
--- /dev/null
+++ b/netwerk/test/unit/test_streamcopier.js
@@ -0,0 +1,56 @@
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+
+var testStr = "This is a test. ";
+for (var i = 0; i < 10; ++i) {
+  testStr += testStr;
+}
+
+function run_test() {
+  // Set up our stream to copy
+  var inStr = Cc["@mozilla.org/io/string-input-stream;1"]
+                .createInstance(Ci.nsIStringInputStream);
+  inStr.setData(testStr, testStr.length);
+
+  // Set up our destination stream.  Make sure to use segments a good
+  // bit smaller than our data length.
+  do_check_true(testStr.length > 1024*10);
+  var pipe = Cc["@mozilla.org/pipe;1"].createInstance(Ci.nsIPipe);
+  pipe.init(true, true, 1024, 0xffffffff, null);
+
+  var streamCopier = Cc["@mozilla.org/network/async-stream-copier;1"]
+                       .createInstance(Ci.nsIAsyncStreamCopier);
+  streamCopier.init(inStr, pipe.outputStream, null, true, true, 1024);
+
+  var ctx = {
+  };
+  ctx.wrappedJSObject = ctx;
+  
+  var observer = {
+    onStartRequest: function(aRequest, aContext) {
+      do_check_eq(aContext.wrappedJSObject, ctx);
+    },
+    onStopRequest: function(aRequest, aContext, aStatusCode) {
+      do_check_eq(aStatusCode, 0);
+      do_check_eq(aContext.wrappedJSObject, ctx);
+      var sis =
+        Cc["@mozilla.org/scriptableinputstream;1"]
+          .createInstance(Ci.nsIScriptableInputStream);
+      sis.init(pipe.inputStream);
+      var result = "";
+      var temp;
+      try { // Need this because read() can throw at EOF
+        while ((temp = sis.read(1024))) {
+          result += temp;
+        }
+      } catch(e) {
+	do_check_eq(e.result, Components.results.NS_BASE_STREAM_CLOSED);
+      }
+      do_check_eq(result, testStr);
+      do_test_finished();
+    }
+  };
+
+  streamCopier.asyncCopy(observer, ctx);
+  do_test_pending();  
+}