123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- <!DOCTYPE HTML>
- <html>
- <!--
- -->
- <head>
- <title>ArrayBuffer stream test</title>
- <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
- <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
- <script type="text/javascript">
- function detachArrayBuffer(ab)
- {
- var w = new Worker("data:application/javascript,");
- w.postMessage(ab, [ab]);
- }
- function test()
- {
- var ab = new ArrayBuffer(4000);
- var ta = new Uint8Array(ab);
- ta[0] = 'a'.charCodeAt(0);
- ta[1] = 'b'.charCodeAt(0);
- const Cc = SpecialPowers.Cc, Ci = SpecialPowers.Ci, Cr = SpecialPowers.Cr;
- var abis = Cc["@mozilla.org/io/arraybuffer-input-stream;1"]
- .createInstance(Ci.nsIArrayBufferInputStream);
- var sis = Cc["@mozilla.org/scriptableinputstream;1"]
- .createInstance(Ci.nsIScriptableInputStream);
- sis.init(abis);
- is(sis.read(1), "", "should read no data from an uninitialized ABIS");
- abis.setData(ab, 0, 256 * 1024);
- is(sis.read(1), "a", "should read 'a' after init");
- detachArrayBuffer(ab);
- SpecialPowers.forceGC();
- SpecialPowers.forceGC();
- try
- {
- is(sis.read(1), "b", "should read 'b' after detaching buffer");
- }
- catch (e)
- {
- ok(false, "reading from stream should have worked");
- }
- // A regression test for bug 1265076. Previously, overflowing
- // the internal buffer from readSegments would cause incorrect
- // copying. The constant mirrors the value in
- // ArrayBufferInputStream::readSegments.
- var size = 8192;
- ab = new ArrayBuffer(2 * size);
- ta = new Uint8Array(ab);
- var i;
- for (i = 0; i < size; ++i) {
- ta[i] = 'x'.charCodeAt(0);
- }
- for (i = 0; i < size; ++i) {
- ta[size + i] = 'y'.charCodeAt(0);
- }
- abis = Cc["@mozilla.org/io/arraybuffer-input-stream;1"]
- .createInstance(Ci.nsIArrayBufferInputStream);
- abis.setData(ab, 0, 2 * size);
- sis = Cc["@mozilla.org/scriptableinputstream;1"]
- .createInstance(Ci.nsIScriptableInputStream);
- sis.init(abis);
- var result = sis.read(2 * size);
- is(result, "x".repeat(size) + "y".repeat(size), "correctly read the data");
- }
- test();
- </script>
- </head>
- <body>
- <p id="display"></p>
- <div id="content" style="display: none"></div>
- <pre id="test">
- </pre>
- </body>
- </html>
|