michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ michael@0: */ michael@0: michael@0: // Tests AddonRepository.jsm michael@0: michael@0: Components.utils.import("resource://gre/modules/addons/AddonRepository.jsm"); michael@0: michael@0: Components.utils.import("resource://testing-common/httpd.js"); michael@0: var gServer = new HttpServer(); michael@0: gServer.start(-1); michael@0: michael@0: const PREF_GETADDONS_BROWSEADDONS = "extensions.getAddons.browseAddons"; michael@0: const PREF_GETADDONS_BROWSERECOMMENDED = "extensions.getAddons.recommended.browseURL"; michael@0: const PREF_GETADDONS_GETRECOMMENDED = "extensions.getAddons.recommended.url"; michael@0: const PREF_GETADDONS_BROWSESEARCHRESULTS = "extensions.getAddons.search.browseURL"; michael@0: const PREF_GETADDONS_GETSEARCHRESULTS = "extensions.getAddons.search.url"; michael@0: michael@0: const PORT = gServer.identity.primaryPort; michael@0: const BASE_URL = "http://localhost:" + PORT; michael@0: const DEFAULT_URL = "about:blank"; michael@0: michael@0: gPort = PORT; michael@0: michael@0: // Path to source URI of installed add-on michael@0: const INSTALL_URL1 = "/addons/test_AddonRepository_1.xpi"; michael@0: // Path to source URI of installing add-on michael@0: const INSTALL_URL2 = "/addons/test_AddonRepository_2.xpi"; michael@0: // Path to source URI of non-active add-on (state = STATE_AVAILABLE) michael@0: const INSTALL_URL3 = "/addons/test_AddonRepository_3.xpi"; michael@0: michael@0: // Properties of an individual add-on that should be checked michael@0: // Note: name is checked separately michael@0: var ADDON_PROPERTIES = ["id", "type", "version", "creator", "developers", michael@0: "description", "fullDescription", "developerComments", michael@0: "eula", "iconURL", "icons", "screenshots", "homepageURL", michael@0: "supportURL", "contributionURL", "contributionAmount", michael@0: "averageRating", "reviewCount", "reviewURL", michael@0: "totalDownloads", "weeklyDownloads", "dailyUsers", michael@0: "sourceURI", "repositoryStatus", "size", "updateDate", michael@0: "purchaseURL", "purchaseAmount", "purchaseDisplayAmount", michael@0: "compatibilityOverrides"]; michael@0: michael@0: // Results of getAddonsByIDs michael@0: var GET_RESULTS = [{ michael@0: id: "test1@tests.mozilla.org", michael@0: type: "extension", michael@0: version: "1.1", michael@0: creator: { michael@0: name: "Test Creator 1", michael@0: url: BASE_URL + "/creator1.html" michael@0: }, michael@0: developers: [{ michael@0: name: "Test Developer 1", michael@0: url: BASE_URL + "/developer1.html" michael@0: }], michael@0: description: "Test Summary 1", michael@0: fullDescription: "Test Description 1", michael@0: developerComments: "Test Developer Comments 1", michael@0: eula: "Test EULA 1", michael@0: iconURL: BASE_URL + "/icon1.png", michael@0: icons: { "32": BASE_URL + "/icon1.png" }, michael@0: screenshots: [{ michael@0: url: BASE_URL + "/full1-1.png", michael@0: width: 400, michael@0: height: 300, michael@0: thumbnailURL: BASE_URL + "/thumbnail1-1.png", michael@0: thumbnailWidth: 200, michael@0: thumbnailHeight: 150, michael@0: caption: "Caption 1 - 1" michael@0: }, { michael@0: url: BASE_URL + "/full2-1.png", michael@0: thumbnailURL: BASE_URL + "/thumbnail2-1.png", michael@0: caption: "Caption 2 - 1" michael@0: }], michael@0: homepageURL: BASE_URL + "/learnmore1.html", michael@0: learnmoreURL: BASE_URL + "/learnmore1.html", michael@0: supportURL: BASE_URL + "/support1.html", michael@0: contributionURL: BASE_URL + "/meetDevelopers1.html", michael@0: contributionAmount: "$11.11", michael@0: averageRating: 4, michael@0: reviewCount: 1111, michael@0: reviewURL: BASE_URL + "/review1.html", michael@0: totalDownloads: 2222, michael@0: weeklyDownloads: 3333, michael@0: dailyUsers: 4444, michael@0: sourceURI: BASE_URL + INSTALL_URL2, michael@0: repositoryStatus: 8, michael@0: size: 5555, michael@0: updateDate: new Date(1265033045000), michael@0: compatibilityOverrides: [{ michael@0: type: "incompatible", michael@0: minVersion: 0.1, michael@0: maxVersion: 0.2, michael@0: appID: "xpcshell@tests.mozilla.org", michael@0: appMinVersion: 3.0, michael@0: appMaxVersion: 4.0 michael@0: }, { michael@0: type: "incompatible", michael@0: minVersion: 0.2, michael@0: maxVersion: 0.3, michael@0: appID: "xpcshell@tests.mozilla.org", michael@0: appMinVersion: 5.0, michael@0: appMaxVersion: 6.0 michael@0: }] michael@0: }, { michael@0: id: "test_AddonRepository_1@tests.mozilla.org", michael@0: version: "1.4", michael@0: repositoryStatus: 9999, michael@0: icons: {} michael@0: }]; michael@0: michael@0: // Results of retrieveRecommendedAddons and searchAddons michael@0: var SEARCH_RESULTS = [{ michael@0: id: "test1@tests.mozilla.org", michael@0: type: "extension", michael@0: version: "1.1", michael@0: creator: { michael@0: name: "Test Creator 1", michael@0: url: BASE_URL + "/creator1.html" michael@0: }, michael@0: repositoryStatus: 8, michael@0: sourceURI: BASE_URL + "/test1.xpi", michael@0: icons: {} michael@0: }, { michael@0: id: "test2@tests.mozilla.org", michael@0: type: "extension", michael@0: version: "1.2", michael@0: creator: { michael@0: name: "Test Creator 2", michael@0: url: BASE_URL + "/creator2.html" michael@0: }, michael@0: developers: [{ michael@0: name: "Test Developer 2", michael@0: url: BASE_URL + "/developer2.html" michael@0: }], michael@0: description: "Test Summary 2\n\nparagraph", michael@0: fullDescription: "Test Description 2\nnewline", michael@0: developerComments: "Test Developer\nComments 2", michael@0: eula: "Test EULA 2", michael@0: iconURL: BASE_URL + "/icon2-32.png", michael@0: icons: { michael@0: "32": BASE_URL + "/icon2-32.png", michael@0: "48": BASE_URL + "/icon2-48.png", michael@0: "64": BASE_URL + "/icon2-64.png" michael@0: }, michael@0: screenshots: [{ michael@0: url: BASE_URL + "/full1-2.png", michael@0: thumbnailURL: BASE_URL + "/thumbnail1-2.png" michael@0: }, { michael@0: url: BASE_URL + "/full2-2.png", michael@0: thumbnailURL: BASE_URL + "/thumbnail2-2.png", michael@0: caption: "Caption 2" michael@0: }], michael@0: homepageURL: BASE_URL + "/learnmore2.html", michael@0: supportURL: BASE_URL + "/support2.html", michael@0: learnmoreURL: BASE_URL + "/learnmore2.html", michael@0: contributionURL: BASE_URL + "/meetDevelopers2.html", michael@0: contributionAmount: null, michael@0: repositoryStatus: 4, michael@0: sourceURI: BASE_URL + "/test2.xpi" michael@0: }, { michael@0: id: "test3@tests.mozilla.org", michael@0: type: "theme", michael@0: version: "1.3", michael@0: creator: { michael@0: name: "Test Creator 3", michael@0: url: BASE_URL + "/creator3.html" michael@0: }, michael@0: developers: [{ michael@0: name: "First Test Developer 3", michael@0: url: BASE_URL + "/developer1-3.html" michael@0: }, { michael@0: name: "Second Test Developer 3", michael@0: url: BASE_URL + "/developer2-3.html" michael@0: }], michael@0: description: "Test Summary 3", michael@0: fullDescription: "Test Description 3\n\n List item 1\n List item 2", michael@0: developerComments: "Test Developer Comments 3", michael@0: eula: "Test EULA 3", michael@0: iconURL: BASE_URL + "/icon3.png", michael@0: icons: { "32": BASE_URL + "/icon3.png" }, michael@0: screenshots: [{ michael@0: url: BASE_URL + "/full1-3.png", michael@0: thumbnailURL: BASE_URL + "/thumbnail1-3.png", michael@0: caption: "Caption 1 - 3" michael@0: }, { michael@0: url: BASE_URL + "/full2-3.png", michael@0: caption: "Caption 2 - 3" michael@0: }, { michael@0: url: BASE_URL + "/full3-3.png", michael@0: thumbnailURL: BASE_URL + "/thumbnail3-3.png", michael@0: caption: "Caption 3 - 3" michael@0: }], michael@0: homepageURL: BASE_URL + "/homepage3.html", michael@0: supportURL: BASE_URL + "/support3.html", michael@0: learnmoreURL: BASE_URL + "/learnmore3.html", michael@0: contributionURL: BASE_URL + "/meetDevelopers3.html", michael@0: contributionAmount: "$11.11", michael@0: averageRating: 2, michael@0: reviewCount: 1111, michael@0: reviewURL: BASE_URL + "/review3.html", michael@0: totalDownloads: 2222, michael@0: weeklyDownloads: 3333, michael@0: dailyUsers: 4444, michael@0: sourceURI: BASE_URL + "/test3.xpi", michael@0: repositoryStatus: 8, michael@0: size: 5555, michael@0: updateDate: new Date(1265033045000), michael@0: michael@0: }, { michael@0: id: "purchase1@tests.mozilla.org", michael@0: type: "extension", michael@0: version: "2.0", michael@0: creator: { michael@0: name: "Test Creator - Last Passing", michael@0: url: BASE_URL + "/creatorLastPassing.html" michael@0: }, michael@0: averageRating: 5, michael@0: repositoryStatus: 4, michael@0: purchaseURL: "http://localhost:" + PORT + "/purchaseURL1", michael@0: purchaseAmount: 5, michael@0: purchaseDisplayAmount: "$5", michael@0: icons: {} michael@0: }, { michael@0: id: "purchase2@tests.mozilla.org", michael@0: type: "extension", michael@0: version: "2.0", michael@0: creator: { michael@0: name: "Test Creator - Last Passing", michael@0: url: BASE_URL + "/creatorLastPassing.html" michael@0: }, michael@0: averageRating: 5, michael@0: repositoryStatus: 4, michael@0: purchaseURL: "http://localhost:" + PORT + "/purchaseURL2", michael@0: purchaseAmount: 10, michael@0: purchaseDisplayAmount: "$10", michael@0: icons: {} michael@0: }, { michael@0: id: "test-lastPassing@tests.mozilla.org", michael@0: type: "extension", michael@0: version: "2.0", michael@0: creator: { michael@0: name: "Test Creator - Last Passing", michael@0: url: BASE_URL + "/creatorLastPassing.html" michael@0: }, michael@0: averageRating: 5, michael@0: repositoryStatus: 4, michael@0: sourceURI: BASE_URL + "/addons/test_AddonRepository_3.xpi", michael@0: icons: {} michael@0: }]; michael@0: michael@0: const TOTAL_RESULTS = 1111; michael@0: const MAX_RESULTS = SEARCH_RESULTS.length; michael@0: michael@0: // Used to differentiate between testing that a search success michael@0: // or a search failure for retrieveRecommendedAddons and searchAddons michael@0: const FAILED_MAX_RESULTS = 9999; michael@0: michael@0: // Values for testing AddonRepository.getAddonsByIDs() michael@0: var GET_TEST = { michael@0: preference: PREF_GETADDONS_BYIDS, michael@0: preferenceValue: BASE_URL + "/%OS%/%VERSION%/%API_VERSION%/" + michael@0: "%API_VERSION%/%IDS%", michael@0: failedIDs: ["test1@tests.mozilla.org"], michael@0: failedURL: "/XPCShell/1/1.5/1.5/test1%40tests.mozilla.org", michael@0: successfulIDs: ["test1@tests.mozilla.org", michael@0: "{00000000-1111-2222-3333-444444444444}", michael@0: "test_AddonRepository_1@tests.mozilla.org"], michael@0: successfulURL: "/XPCShell/1/1.5/1.5/test1%40tests.mozilla.org," + michael@0: "%7B00000000-1111-2222-3333-444444444444%7D," + michael@0: "test_AddonRepository_1%40tests.mozilla.org" michael@0: }; michael@0: michael@0: // Values for testing AddonRepository.retrieveRecommendedAddons() michael@0: var RECOMMENDED_TEST = { michael@0: preference: PREF_GETADDONS_GETRECOMMENDED, michael@0: preferenceValue: BASE_URL + "/%OS%/%VERSION%/%API_VERSION%/" + michael@0: "%API_VERSION%/%MAX_RESULTS%", michael@0: failedURL: "/XPCShell/1/1.5/1.5/" + (2 * FAILED_MAX_RESULTS), michael@0: successfulURL: "/XPCShell/1/1.5/1.5/" + (2 * MAX_RESULTS) michael@0: }; michael@0: michael@0: // Values for testing AddonRepository.searchAddons() michael@0: var SEARCH_TEST = { michael@0: searchTerms: "odd=search:with&weird\"characters", michael@0: preference: PREF_GETADDONS_GETSEARCHRESULTS, michael@0: preferenceValue: BASE_URL + "/%OS%/%VERSION%/%API_VERSION%/" + michael@0: "%API_VERSION%/%MAX_RESULTS%/%TERMS%", michael@0: failedURL: "/XPCShell/1/1.5/1.5/" + (2 * FAILED_MAX_RESULTS) + michael@0: "/odd%3Dsearch%3Awith%26weird%22characters", michael@0: successfulURL: "/XPCShell/1/1.5/1.5/" + (2 * MAX_RESULTS) + michael@0: "/odd%3Dsearch%3Awith%26weird%22characters" michael@0: }; michael@0: michael@0: // Test that actual results and expected results are equal michael@0: function check_results(aActualAddons, aExpectedAddons, aAddonCount, aInstallNull) { michael@0: do_check_false(AddonRepository.isSearching); michael@0: michael@0: do_check_eq(aActualAddons.length, aAddonCount); michael@0: do_check_addons(aActualAddons, aExpectedAddons, ADDON_PROPERTIES); michael@0: michael@0: // Additional tests michael@0: aActualAddons.forEach(function check_each_addon(aActualAddon) { michael@0: // Separately check name so better messages are output when test fails michael@0: if (aActualAddon.name == "FAIL") michael@0: do_throw(aActualAddon.id + " - " + aActualAddon.description); michael@0: if (aActualAddon.name != "PASS") michael@0: do_throw(aActualAddon.id + " - " + "invalid add-on name " + aActualAddon.name); michael@0: michael@0: do_check_eq(aActualAddon.install == null, !!aInstallNull || !aActualAddon.sourceURI); michael@0: michael@0: // Check that sourceURI property consistent within actual addon michael@0: if (aActualAddon.install) michael@0: do_check_eq(aActualAddon.install.sourceURI.spec, aActualAddon.sourceURI.spec); michael@0: }); michael@0: } michael@0: michael@0: // Complete a search, also testing cancelSearch() and isSearching michael@0: function complete_search(aSearch, aSearchCallback) { michael@0: var failCallback = { michael@0: searchSucceeded: function(addons, length, total) { michael@0: do_throw("failCallback.searchSucceeded should not be called"); michael@0: end_test(); michael@0: }, michael@0: michael@0: searchFailed: function() { michael@0: do_throw("failCallback.searchFailed should not be called"); michael@0: end_test(); michael@0: } michael@0: }; michael@0: michael@0: var callbackCalled = false; michael@0: var testCallback = { michael@0: searchSucceeded: function(addons, length, total) { michael@0: do_throw("testCallback.searchSucceeded should not be called"); michael@0: end_test(); michael@0: }, michael@0: michael@0: searchFailed: function() { michael@0: callbackCalled = true; michael@0: } michael@0: }; michael@0: michael@0: // Should fail because cancelled it immediately michael@0: aSearch(failCallback); michael@0: do_check_true(AddonRepository.isSearching); michael@0: AddonRepository.cancelSearch(); michael@0: do_check_false(AddonRepository.isSearching); michael@0: michael@0: aSearch(aSearchCallback); michael@0: do_check_true(AddonRepository.isSearching); michael@0: michael@0: // searchFailed should be called immediately because already searching michael@0: aSearch(testCallback); michael@0: do_check_true(callbackCalled); michael@0: do_check_true(AddonRepository.isSearching); michael@0: } michael@0: michael@0: michael@0: function run_test() { michael@0: // Setup for test michael@0: do_test_pending(); michael@0: createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9"); michael@0: michael@0: startupManager(); michael@0: michael@0: // Install an add-on so can check that it isn't returned in the results michael@0: installAllFiles([do_get_addon("test_AddonRepository_1")], function addon_1_install_callback() { michael@0: restartManager(); michael@0: michael@0: // Register other add-on XPI files michael@0: gServer.registerFile(INSTALL_URL2, michael@0: do_get_addon("test_AddonRepository_2")); michael@0: gServer.registerFile(INSTALL_URL3, michael@0: do_get_addon("test_AddonRepository_3")); michael@0: michael@0: // Register files used to test search failure michael@0: mapUrlToFile(GET_TEST.failedURL, michael@0: do_get_file("data/test_AddonRepository_failed.xml"), michael@0: gServer); michael@0: mapUrlToFile(RECOMMENDED_TEST.failedURL, michael@0: do_get_file("data/test_AddonRepository_failed.xml"), michael@0: gServer); michael@0: mapUrlToFile(SEARCH_TEST.failedURL, michael@0: do_get_file("data/test_AddonRepository_failed.xml"), michael@0: gServer); michael@0: michael@0: // Register files used to test search success michael@0: mapUrlToFile(GET_TEST.successfulURL, michael@0: do_get_file("data/test_AddonRepository_getAddonsByIDs.xml"), michael@0: gServer); michael@0: mapUrlToFile(RECOMMENDED_TEST.successfulURL, michael@0: do_get_file("data/test_AddonRepository.xml"), michael@0: gServer); michael@0: mapUrlToFile(SEARCH_TEST.successfulURL, michael@0: do_get_file("data/test_AddonRepository.xml"), michael@0: gServer); michael@0: michael@0: // Create an active AddonInstall so can check that it isn't returned in the results michael@0: AddonManager.getInstallForURL(BASE_URL + INSTALL_URL2, function addon_2_get(aInstall) { michael@0: try { michael@0: aInstall.install(); michael@0: } michael@0: catch(e) { michael@0: do_print("Failed to install add-on " + aInstall.sourceURI.spec); michael@0: do_report_unexpected_exception(e); michael@0: } michael@0: michael@0: // Create a non-active AddonInstall so can check that it is returned in the results michael@0: AddonManager.getInstallForURL(BASE_URL + INSTALL_URL3, michael@0: run_test_1, "application/x-xpinstall"); michael@0: }, "application/x-xpinstall"); michael@0: }); michael@0: } michael@0: michael@0: function end_test() { michael@0: let testDir = gProfD.clone(); michael@0: testDir.append("extensions"); michael@0: testDir.append("staged"); michael@0: gServer.stop(function() { michael@0: function loop() { michael@0: if (!testDir.exists()) { michael@0: do_print("Staged directory has been cleaned up"); michael@0: do_test_finished(); michael@0: } michael@0: do_print("Waiting 1 second until cleanup is complete"); michael@0: do_timeout(1000, loop); michael@0: } michael@0: loop(); michael@0: }); michael@0: } michael@0: michael@0: // Tests homepageURL, getRecommendedURL() and getSearchURL() michael@0: function run_test_1() { michael@0: function check_urls(aPreference, aGetURL, aTests) { michael@0: aTests.forEach(function(aTest) { michael@0: Services.prefs.setCharPref(aPreference, aTest.preferenceValue); michael@0: do_check_eq(aGetURL(aTest), aTest.expectedURL); michael@0: }); michael@0: } michael@0: michael@0: var urlTests = [{ michael@0: preferenceValue: BASE_URL, michael@0: expectedURL: BASE_URL michael@0: }, { michael@0: preferenceValue: BASE_URL + "/%OS%/%VERSION%", michael@0: expectedURL: BASE_URL + "/XPCShell/1" michael@0: }]; michael@0: michael@0: // Extra tests for AddonRepository.getSearchURL(); michael@0: var searchURLTests = [{ michael@0: searchTerms: "test", michael@0: preferenceValue: BASE_URL + "/search?q=%TERMS%", michael@0: expectedURL: BASE_URL + "/search?q=test" michael@0: }, { michael@0: searchTerms: "test search", michael@0: preferenceValue: BASE_URL + "/%TERMS%", michael@0: expectedURL: BASE_URL + "/test%20search" michael@0: }, { michael@0: searchTerms: "odd=search:with&weird\"characters", michael@0: preferenceValue: BASE_URL + "/%TERMS%", michael@0: expectedURL: BASE_URL + "/odd%3Dsearch%3Awith%26weird%22characters" michael@0: }]; michael@0: michael@0: // Setup tests for homepageURL, getRecommendedURL() and getSearchURL() michael@0: var tests = [{ michael@0: initiallyUndefined: true, michael@0: preference: PREF_GETADDONS_BROWSEADDONS, michael@0: urlTests: urlTests, michael@0: getURL: function() AddonRepository.homepageURL michael@0: }, { michael@0: initiallyUndefined: true, michael@0: preference: PREF_GETADDONS_BROWSERECOMMENDED, michael@0: urlTests: urlTests, michael@0: getURL: function() AddonRepository.getRecommendedURL() michael@0: }, { michael@0: initiallyUndefined: false, michael@0: preference: PREF_GETADDONS_BROWSESEARCHRESULTS, michael@0: urlTests: urlTests.concat(searchURLTests), michael@0: getURL: function getSearchURL(aTest) { michael@0: var searchTerms = aTest && aTest.searchTerms ? aTest.searchTerms michael@0: : "unused terms"; michael@0: return AddonRepository.getSearchURL(searchTerms); michael@0: } michael@0: }]; michael@0: michael@0: tests.forEach(function url_test(aTest) { michael@0: if (aTest.initiallyUndefined) { michael@0: // Preference is not defined by default michael@0: do_check_eq(Services.prefs.getPrefType(aTest.preference), michael@0: Services.prefs.PREF_INVALID); michael@0: do_check_eq(aTest.getURL(), DEFAULT_URL); michael@0: } michael@0: michael@0: check_urls(aTest.preference, aTest.getURL, aTest.urlTests); michael@0: }); michael@0: michael@0: run_test_getAddonsByID_fails(); michael@0: } michael@0: michael@0: // Tests failure of AddonRepository.getAddonsByIDs() michael@0: function run_test_getAddonsByID_fails() { michael@0: Services.prefs.setCharPref(GET_TEST.preference, GET_TEST.preferenceValue); michael@0: var callback = { michael@0: searchSucceeded: function(aAddonsList, aAddonCount, aTotalResults) { michael@0: do_throw("searchAddons should not have succeeded"); michael@0: end_test(); michael@0: }, michael@0: michael@0: searchFailed: function() { michael@0: do_check_false(AddonRepository.isSearching); michael@0: run_test_getAddonsByID_succeeds(); michael@0: } michael@0: }; michael@0: michael@0: complete_search(function complete_search_fail_callback(aCallback) { michael@0: AddonRepository.getAddonsByIDs(GET_TEST.failedIDs, aCallback); michael@0: }, callback); michael@0: } michael@0: michael@0: // Tests success of AddonRepository.getAddonsByIDs() michael@0: function run_test_getAddonsByID_succeeds() { michael@0: var callback = { michael@0: searchSucceeded: function(aAddonsList, aAddonCount, aTotalResults) { michael@0: do_check_eq(aTotalResults, -1); michael@0: check_results(aAddonsList, GET_RESULTS, aAddonCount, true); michael@0: run_test_retrieveRecommended_fails(); michael@0: }, michael@0: michael@0: searchFailed: function() { michael@0: do_throw("searchAddons should not have failed"); michael@0: end_test(); michael@0: } michael@0: }; michael@0: michael@0: complete_search(function complete_search_succeed_callback(aCallback) { michael@0: AddonRepository.getAddonsByIDs(GET_TEST.successfulIDs, aCallback); michael@0: }, callback); michael@0: } michael@0: michael@0: // Tests failure of AddonRepository.retrieveRecommendedAddons() michael@0: function run_test_retrieveRecommended_fails() { michael@0: Services.prefs.setCharPref(RECOMMENDED_TEST.preference, michael@0: RECOMMENDED_TEST.preferenceValue); michael@0: var callback = { michael@0: searchSucceeded: function(aAddonsList, aAddonCount, aTotalResults) { michael@0: do_throw("retrieveRecommendedAddons should not have succeeded"); michael@0: end_test(); michael@0: }, michael@0: michael@0: searchFailed: function() { michael@0: do_check_false(AddonRepository.isSearching); michael@0: run_test_retrieveRecommended_succeed(); michael@0: } michael@0: }; michael@0: michael@0: complete_search(function retrieveRecommended_failing_callback(aCallback) { michael@0: AddonRepository.retrieveRecommendedAddons(FAILED_MAX_RESULTS, aCallback); michael@0: }, callback); michael@0: } michael@0: michael@0: // Tests success of AddonRepository.retrieveRecommendedAddons() michael@0: function run_test_retrieveRecommended_succeed() { michael@0: var callback = { michael@0: searchSucceeded: function(aAddonsList, aAddonCount, aTotalResults) { michael@0: do_check_eq(aTotalResults, -1); michael@0: check_results(aAddonsList, SEARCH_RESULTS, aAddonCount); michael@0: run_test_searchAddons_fails(); michael@0: }, michael@0: michael@0: searchFailed: function() { michael@0: do_throw("retrieveRecommendedAddons should not have failed"); michael@0: end_test(); michael@0: } michael@0: }; michael@0: michael@0: complete_search(function retrieveRecommended_succeed_callback(aCallback) { michael@0: AddonRepository.retrieveRecommendedAddons(MAX_RESULTS, aCallback); michael@0: }, callback); michael@0: } michael@0: michael@0: // Tests failure of AddonRepository.searchAddons() michael@0: function run_test_searchAddons_fails() { michael@0: Services.prefs.setCharPref(SEARCH_TEST.preference, SEARCH_TEST.preferenceValue); michael@0: var callback = { michael@0: searchSucceeded: function(aAddonsList, aAddonCount, aTotalResults) { michael@0: do_throw("searchAddons should not have succeeded"); michael@0: end_test(); michael@0: }, michael@0: michael@0: searchFailed: function() { michael@0: do_check_false(AddonRepository.isSearching); michael@0: run_test_searchAddons_succeeds(); michael@0: } michael@0: }; michael@0: michael@0: complete_search(function(aCallback) { michael@0: var searchTerms = SEARCH_TEST.searchTerms; michael@0: AddonRepository.searchAddons(searchTerms, FAILED_MAX_RESULTS, aCallback); michael@0: }, callback); michael@0: } michael@0: michael@0: // Tests success of AddonRepository.searchAddons() michael@0: function run_test_searchAddons_succeeds() { michael@0: var callback = { michael@0: searchSucceeded: function(aAddonsList, aAddonCount, aTotalResults) { michael@0: do_check_eq(aTotalResults, TOTAL_RESULTS); michael@0: check_results(aAddonsList, SEARCH_RESULTS, aAddonCount); michael@0: end_test(); michael@0: }, michael@0: michael@0: searchFailed: function() { michael@0: do_throw("searchAddons should not have failed"); michael@0: end_test(); michael@0: } michael@0: }; michael@0: michael@0: complete_search(function(aCallback) { michael@0: var searchTerms = SEARCH_TEST.searchTerms; michael@0: AddonRepository.searchAddons(searchTerms, MAX_RESULTS, aCallback); michael@0: }, callback); michael@0: } michael@0: