diff options
Diffstat (limited to 'modules/libjar/zipwriter/test/unit/test_bug717061.js')
-rw-r--r-- | modules/libjar/zipwriter/test/unit/test_bug717061.js | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/modules/libjar/zipwriter/test/unit/test_bug717061.js b/modules/libjar/zipwriter/test/unit/test_bug717061.js new file mode 100644 index 000000000..35163a464 --- /dev/null +++ b/modules/libjar/zipwriter/test/unit/test_bug717061.js @@ -0,0 +1,92 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0 + */ + +function BinaryComparer(file, callback) { + var fstream = Cc["@mozilla.org/network/file-input-stream;1"]. + createInstance(Ci.nsIFileInputStream); + fstream.init(file, -1, 0, 0); + this.length = file.fileSize; + this.fileStream = Cc["@mozilla.org/binaryinputstream;1"]. + createInstance(Ci.nsIBinaryInputStream); + this.fileStream.setInputStream(fstream); + this.offset = 0; + this.callback = callback; +} + +BinaryComparer.prototype = { + fileStream: null, + offset: null, + length: null, + callback: null, + + onStartRequest: function(aRequest, aContext) { + }, + + onStopRequest: function(aRequest, aContext, aStatusCode) { + this.fileStream.close(); + do_check_eq(aStatusCode, Components.results.NS_OK); + do_check_eq(this.offset, this.length); + this.callback(); + }, + + onDataAvailable: function(aRequest, aContext, aInputStream, aOffset, aCount) { + var stream = Cc["@mozilla.org/binaryinputstream;1"]. + createInstance(Ci.nsIBinaryInputStream); + stream.setInputStream(aInputStream); + var source, actual; + for (var i = 0; i < aCount; i++) { + try { + source = this.fileStream.read8(); + } + catch (e) { + do_throw("Unable to read from file at offset " + this.offset + " " + e); + } + try { + actual = stream.read8(); + } + catch (e) { + do_throw("Unable to read from converted stream at offset " + this.offset + " " + e); + } + // The byte at offset 9 is the OS byte (see RFC 1952, section 2.3), which + // can legitimately differ when the source is compressed on different + // operating systems. The actual .gz for this test was created on a Unix + // system, but we want the test to work correctly everywhere. So ignore + // the byte at offset 9. + if (this.offset == 9) + ; + else if (source != actual) + do_throw("Invalid value " + actual + " at offset " + this.offset + ", should have been " + source); + this.offset++; + } + } +} + +function comparer_callback() +{ + do_test_finished(); +} + +function run_test() +{ + var source = do_get_file(DATA_DIR + "test_bug717061.html"); + var comparer = new BinaryComparer(do_get_file(DATA_DIR + "test_bug717061.gz"), + comparer_callback); + + // Prepare the stream converter + var scs = Cc["@mozilla.org/streamConverters;1"]. + getService(Ci.nsIStreamConverterService); + var converter = scs.asyncConvertData("uncompressed", "gzip", comparer, null); + + // Open the expected output file + var fstream = Cc["@mozilla.org/network/file-input-stream;1"]. + createInstance(Ci.nsIFileInputStream); + fstream.init(source, -1, 0, 0); + + // Set up a pump to push data from the file to the stream converter + var pump = Cc["@mozilla.org/network/input-stream-pump;1"]. + createInstance(Ci.nsIInputStreamPump); + pump.init(fstream, -1, -1, 0, 0, true); + pump.asyncRead(converter, null); + do_test_pending(); +} |