michael@0: var testStr = "This is a test. "; michael@0: for (var i = 0; i < 10; ++i) { michael@0: testStr += testStr; michael@0: } michael@0: michael@0: function run_test() { michael@0: // Set up our stream to copy michael@0: var inStr = Cc["@mozilla.org/io/string-input-stream;1"] michael@0: .createInstance(Ci.nsIStringInputStream); michael@0: inStr.setData(testStr, testStr.length); michael@0: michael@0: // Set up our destination stream. Make sure to use segments a good michael@0: // bit smaller than our data length. michael@0: do_check_true(testStr.length > 1024*10); michael@0: var pipe = Cc["@mozilla.org/pipe;1"].createInstance(Ci.nsIPipe); michael@0: pipe.init(true, true, 1024, 0xffffffff, null); michael@0: michael@0: var streamCopier = Cc["@mozilla.org/network/async-stream-copier;1"] michael@0: .createInstance(Ci.nsIAsyncStreamCopier); michael@0: streamCopier.init(inStr, pipe.outputStream, null, true, true, 1024, true, true); michael@0: michael@0: var ctx = { michael@0: }; michael@0: ctx.wrappedJSObject = ctx; michael@0: michael@0: var observer = { michael@0: onStartRequest: function(aRequest, aContext) { michael@0: do_check_eq(aContext.wrappedJSObject, ctx); michael@0: }, michael@0: onStopRequest: function(aRequest, aContext, aStatusCode) { michael@0: do_check_eq(aStatusCode, 0); michael@0: do_check_eq(aContext.wrappedJSObject, ctx); michael@0: var sis = michael@0: Cc["@mozilla.org/scriptableinputstream;1"] michael@0: .createInstance(Ci.nsIScriptableInputStream); michael@0: sis.init(pipe.inputStream); michael@0: var result = ""; michael@0: var temp; michael@0: try { // Need this because read() can throw at EOF michael@0: while ((temp = sis.read(1024))) { michael@0: result += temp; michael@0: } michael@0: } catch(e) { michael@0: do_check_eq(e.result, Components.results.NS_BASE_STREAM_CLOSED); michael@0: } michael@0: do_check_eq(result, testStr); michael@0: do_test_finished(); michael@0: } michael@0: }; michael@0: michael@0: streamCopier.asyncCopy(observer, ctx); michael@0: do_test_pending(); michael@0: }