Fix NS_BASE_STREAM_CLOSED error, for real

The input stream produced by asyncFetch is closed automatically at EOL,
so the available() call throws this for an empty file.
This commit is contained in:
Dan Stillman 2015-06-02 14:53:01 -04:00
parent ee777c5be6
commit 77f12527aa
4 changed files with 18 additions and 8 deletions

View file

@ -220,8 +220,18 @@ Zotero.File = new function(){
return;
}
try {
try {
var bytesToFetch = inputStream.available();
}
catch (e) {
// The stream is closed automatically when end-of-file is reached,
// so this throws for empty files
if (e.name == "NS_BASE_STREAM_CLOSED") {
deferred.resolve("");
}
}
if (maxLength && maxLength < bytesToFetch) {
bytesToFetch = maxLength;
}

0
test/tests/data/empty Normal file
View file

View file

@ -1,4 +1,11 @@
describe("Zotero.File", function () {
describe("#getContentsAsync()", function () {
it("should handle an empty file", function* () {
var path = OS.Path.join(getTestDataDirectory().path, "empty");
assert.equal((yield Zotero.File.getContentsAsync(path)), "");
})
})
describe("#copyDirectory()", function () {
it("should copy all files within a directory", function* () {
var tmpDir = Zotero.getTempDirectory().path;

View file

@ -378,11 +378,6 @@ describe("Zotero.Translate.ItemGetter", function() {
}
}));
// TEMP
describe("failure debugging", function () {
before(() => Zotero.Debug.init(true))
after(() => Zotero.Debug.init())
it('should return stored/linked file and URI attachments in expected format', Zotero.Promise.coroutine(function* () {
this.timeout(60000);
let file = getTestDataDirectory();
@ -591,7 +586,5 @@ describe("Zotero.Translate.ItemGetter", function() {
}
}
}));
})
});
});