diff options
Diffstat (limited to 'toolkit/components/jsdownloads/test/unit/test_Downloads.js')
-rw-r--r-- | toolkit/components/jsdownloads/test/unit/test_Downloads.js | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/toolkit/components/jsdownloads/test/unit/test_Downloads.js b/toolkit/components/jsdownloads/test/unit/test_Downloads.js new file mode 100644 index 000000000..2027beee1 --- /dev/null +++ b/toolkit/components/jsdownloads/test/unit/test_Downloads.js @@ -0,0 +1,194 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +/** + * Tests the functions located directly in the "Downloads" object. + */ + +"use strict"; + +// Tests + +/** + * Tests that the createDownload function exists and can be called. More + * detailed tests are implemented separately for the DownloadCore module. + */ +add_task(function* test_createDownload() +{ + // Creates a simple Download object without starting the download. + yield Downloads.createDownload({ + source: { url: "about:blank" }, + target: { path: getTempFile(TEST_TARGET_FILE_NAME).path }, + saver: { type: "copy" }, + }); +}); + +/** + * Tests createDownload for private download. + */ +add_task(function* test_createDownload_private() +{ + let download = yield Downloads.createDownload({ + source: { url: "about:blank", isPrivate: true }, + target: { path: getTempFile(TEST_TARGET_FILE_NAME).path }, + saver: { type: "copy" } + }); + do_check_true(download.source.isPrivate); +}); + +/** + * Tests createDownload for normal (public) download. + */ +add_task(function* test_createDownload_public() +{ + let tempPath = getTempFile(TEST_TARGET_FILE_NAME).path; + let download = yield Downloads.createDownload({ + source: { url: "about:blank", isPrivate: false }, + target: { path: tempPath }, + saver: { type: "copy" } + }); + do_check_false(download.source.isPrivate); + + download = yield Downloads.createDownload({ + source: { url: "about:blank" }, + target: { path: tempPath }, + saver: { type: "copy" } + }); + do_check_false(download.source.isPrivate); +}); + +/** + * Tests createDownload for a pdf saver throws if only given a url. + */ +add_task(function* test_createDownload_pdf() +{ + let download = yield Downloads.createDownload({ + source: { url: "about:blank" }, + target: { path: getTempFile(TEST_TARGET_FILE_NAME).path }, + saver: { type: "pdf" }, + }); + + try { + yield download.start(); + do_throw("The download should have failed."); + } catch (ex) { + if (!(ex instanceof Downloads.Error) || !ex.becauseSourceFailed) { + throw ex; + } + } + + do_check_false(download.succeeded); + do_check_true(download.stopped); + do_check_false(download.canceled); + do_check_true(download.error !== null); + do_check_true(download.error.becauseSourceFailed); + do_check_false(download.error.becauseTargetFailed); + do_check_false(yield OS.File.exists(download.target.path)); +}); + +/** + * Tests "fetch" with nsIURI and nsIFile as arguments. + */ +add_task(function* test_fetch_uri_file_arguments() +{ + let targetFile = getTempFile(TEST_TARGET_FILE_NAME); + yield Downloads.fetch(NetUtil.newURI(httpUrl("source.txt")), targetFile); + yield promiseVerifyContents(targetFile.path, TEST_DATA_SHORT); +}); + +/** + * Tests "fetch" with DownloadSource and DownloadTarget as arguments. + */ +add_task(function* test_fetch_object_arguments() +{ + let targetPath = getTempFile(TEST_TARGET_FILE_NAME).path; + yield Downloads.fetch({ url: httpUrl("source.txt") }, { path: targetPath }); + yield promiseVerifyContents(targetPath, TEST_DATA_SHORT); +}); + +/** + * Tests "fetch" with string arguments. + */ +add_task(function* test_fetch_string_arguments() +{ + let targetPath = getTempFile(TEST_TARGET_FILE_NAME).path; + yield Downloads.fetch(httpUrl("source.txt"), targetPath); + yield promiseVerifyContents(targetPath, TEST_DATA_SHORT); + + targetPath = getTempFile(TEST_TARGET_FILE_NAME).path; + yield Downloads.fetch(new String(httpUrl("source.txt")), + new String(targetPath)); + yield promiseVerifyContents(targetPath, TEST_DATA_SHORT); +}); + +/** + * Tests that the getList function returns the same list when called multiple + * times with the same argument, but returns different lists when called with + * different arguments. More detailed tests are implemented separately for the + * DownloadList module. + */ +add_task(function* test_getList() +{ + let publicListOne = yield Downloads.getList(Downloads.PUBLIC); + let privateListOne = yield Downloads.getList(Downloads.PRIVATE); + + let publicListTwo = yield Downloads.getList(Downloads.PUBLIC); + let privateListTwo = yield Downloads.getList(Downloads.PRIVATE); + + do_check_eq(publicListOne, publicListTwo); + do_check_eq(privateListOne, privateListTwo); + + do_check_neq(publicListOne, privateListOne); +}); + +/** + * Tests that the getSummary function returns the same summary when called + * multiple times with the same argument, but returns different summaries when + * called with different arguments. More detailed tests are implemented + * separately for the DownloadSummary object in the DownloadList module. + */ +add_task(function* test_getSummary() +{ + let publicSummaryOne = yield Downloads.getSummary(Downloads.PUBLIC); + let privateSummaryOne = yield Downloads.getSummary(Downloads.PRIVATE); + + let publicSummaryTwo = yield Downloads.getSummary(Downloads.PUBLIC); + let privateSummaryTwo = yield Downloads.getSummary(Downloads.PRIVATE); + + do_check_eq(publicSummaryOne, publicSummaryTwo); + do_check_eq(privateSummaryOne, privateSummaryTwo); + + do_check_neq(publicSummaryOne, privateSummaryOne); +}); + +/** + * Tests that the getSystemDownloadsDirectory returns a non-empty download + * directory string. + */ +add_task(function* test_getSystemDownloadsDirectory() +{ + let downloadDir = yield Downloads.getSystemDownloadsDirectory(); + do_check_neq(downloadDir, ""); +}); + +/** + * Tests that the getPreferredDownloadsDirectory returns a non-empty download + * directory string. + */ +add_task(function* test_getPreferredDownloadsDirectory() +{ + let downloadDir = yield Downloads.getPreferredDownloadsDirectory(); + do_check_neq(downloadDir, ""); +}); + +/** + * Tests that the getTemporaryDownloadsDirectory returns a non-empty download + * directory string. + */ +add_task(function* test_getTemporaryDownloadsDirectory() +{ + let downloadDir = yield Downloads.getTemporaryDownloadsDirectory(); + do_check_neq(downloadDir, ""); +}); |