mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-24 21:31:04 +00:00
Bug 926691 - OS.File API must preverse |bytes| options to .readTo() and .write(). r=yoric
This commit is contained in:
parent
f71f3a0379
commit
eb1847005b
@ -377,8 +377,10 @@ File.prototype = {
|
||||
readTo: function readTo(buffer, options = {}) {
|
||||
// If |buffer| is a typed array and there is no |bytes| options, we
|
||||
// need to extract the |byteLength| now, as it will be lost by
|
||||
// communication
|
||||
if (isTypedArray(buffer) && !("bytes" in options)) {
|
||||
// communication.
|
||||
// Options might be a nullish value, so better check for that before using
|
||||
// the |in| operator.
|
||||
if (isTypedArray(buffer) && !(options && "bytes" in options)) {
|
||||
// Preserve reference to option |outExecutionDuration|, if it is passed.
|
||||
options = clone(options, ["outExecutionDuration"]);
|
||||
options.bytes = buffer.byteLength;
|
||||
@ -414,8 +416,10 @@ File.prototype = {
|
||||
write: function write(buffer, options = {}) {
|
||||
// If |buffer| is a typed array and there is no |bytes| options,
|
||||
// we need to extract the |byteLength| now, as it will be lost
|
||||
// by communication
|
||||
if (isTypedArray(buffer)) {
|
||||
// by communication.
|
||||
// Options might be a nullish value, so better check for that before using
|
||||
// the |in| operator.
|
||||
if (isTypedArray(buffer) && !(options && "bytes" in options)) {
|
||||
// Preserve reference to option |outExecutionDuration|, if it is passed.
|
||||
options = clone(options, ["outExecutionDuration"]);
|
||||
options.bytes = buffer.byteLength;
|
||||
|
@ -0,0 +1,44 @@
|
||||
"use strict";
|
||||
|
||||
Components.utils.import("resource://gre/modules/osfile.jsm");
|
||||
Components.utils.import("resource://gre/modules/Task.jsm");
|
||||
|
||||
function run_test() {
|
||||
do_test_pending();
|
||||
run_next_test();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test to ensure that {bytes:} in options to |readTo| and |write| are correctly
|
||||
* preserved.
|
||||
*/
|
||||
add_task(function* test_bytes() {
|
||||
let path = OS.Path.join(OS.Constants.Path.tmpDir,
|
||||
"test_osfile_async_bytes.tmp");
|
||||
let file = yield OS.File.open(path, {trunc: true, read: true, write: true});
|
||||
try {
|
||||
try {
|
||||
// 1. Test write, by supplying {bytes:} options smaller than the actual
|
||||
// buffer.
|
||||
yield file.write(new Uint8Array(2048), {bytes: 1024});
|
||||
do_check_eq((yield file.stat()).size, 1024);
|
||||
|
||||
// 2. Test same for |readTo|.
|
||||
yield file.setPosition(0, OS.File.POS_START);
|
||||
let read = yield file.readTo(new Uint8Array(1024), {bytes: 512});
|
||||
do_check_eq(read, 512);
|
||||
|
||||
// 3. Test that passing nullish values for |options| still works.
|
||||
yield file.setPosition(0, OS.File.POS_END);
|
||||
yield file.write(new Uint8Array(1024), null);
|
||||
yield file.write(new Uint8Array(1024), undefined);
|
||||
do_check_eq((yield file.stat()).size, 3072);
|
||||
} finally {
|
||||
yield file.close();
|
||||
}
|
||||
} finally {
|
||||
yield OS.File.remove(path);
|
||||
}
|
||||
});
|
||||
|
||||
add_task(do_test_finished);
|
@ -5,6 +5,7 @@ tail =
|
||||
[test_osfile_closed.js]
|
||||
[test_path.js]
|
||||
[test_osfile_async.js]
|
||||
[test_osfile_async_bytes.js]
|
||||
[test_profiledir.js]
|
||||
[test_logging.js]
|
||||
[test_creationDate.js]
|
||||
|
Loading…
Reference in New Issue
Block a user