summaryrefslogtreecommitdiffstats
path: root/netwerk/test/unit/test_streamcopier.js
blob: f550923546759d4e61794620ee9d941dfeecb935 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
"use strict";

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.
  Assert.ok(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,
    true,
    true
  );

  var ctx = {};
  ctx.wrappedJSObject = ctx;

  var observer = {
    onStartRequest(aRequest) {},
    onStopRequest(aRequest, aStatusCode) {
      Assert.equal(aStatusCode, 0);
      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) {
        Assert.equal(e.result, Cr.NS_BASE_STREAM_CLOSED);
      }
      Assert.equal(result, testStr);
      do_test_finished();
    },
  };

  streamCopier.asyncCopy(observer, ctx);
  do_test_pending();
}