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() {},
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();
}
|