www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit 77f12527aad5bcc5214e2a8b06a62162e6cc8c6c
parent ee777c5be6014e9107f5e3fca70db2b1408cbc6b
Author: Dan Stillman <dstillman@zotero.org>
Date:   Tue,  2 Jun 2015 14:53:01 -0400

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.

Diffstat:
Mchrome/content/zotero/xpcom/file.js | 12+++++++++++-
Atest/tests/data/empty | 0
Mtest/tests/fileTest.js | 7+++++++
Mtest/tests/translateTest.js | 7-------
4 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/chrome/content/zotero/xpcom/file.js b/chrome/content/zotero/xpcom/file.js @@ -221,7 +221,17 @@ Zotero.File = new function(){ } try { - var bytesToFetch = inputStream.available(); + 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; } diff --git a/test/tests/data/empty b/test/tests/data/empty diff --git a/test/tests/fileTest.js b/test/tests/fileTest.js @@ -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; diff --git a/test/tests/translateTest.js b/test/tests/translateTest.js @@ -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() { } } })); - - }) }); }); \ No newline at end of file