toolkit/devtools/apps/tests/unit/head_apps.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/toolkit/devtools/apps/tests/unit/head_apps.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,122 @@
     1.4 +/* Any copyright is dedicated to the Public Domain.
     1.5 +   http://creativecommons.org/publicdomain/zero/1.0/ */
     1.6 +
     1.7 +const Cc = Components.classes;
     1.8 +const Ci = Components.interfaces;
     1.9 +const Cu = Components.utils;
    1.10 +const Cr = Components.results;
    1.11 +const CC = Components.Constructor;
    1.12 +
    1.13 +Cu.import("resource://gre/modules/devtools/dbg-server.jsm");
    1.14 +Cu.import("resource://gre/modules/devtools/dbg-client.jsm");
    1.15 +
    1.16 +Cu.import("resource://gre/modules/Services.jsm");
    1.17 +Cu.import("resource://gre/modules/XPCOMUtils.jsm");
    1.18 +Cu.import("resource://gre/modules/FileUtils.jsm");
    1.19 +
    1.20 +let gClient, gActor;
    1.21 +
    1.22 +function connect(onDone) {
    1.23 +  // Initialize a loopback remote protocol connection
    1.24 +  DebuggerServer.init(function () { return true; });
    1.25 +  // We need to register browser actors to have `listTabs` working
    1.26 +  // and also have a root actor
    1.27 +  DebuggerServer.addBrowserActors();
    1.28 +
    1.29 +  // Setup client and actor used in all tests
    1.30 +  gClient = new DebuggerClient(DebuggerServer.connectPipe());
    1.31 +  gClient.connect(function onConnect() {
    1.32 +    gClient.listTabs(function onListTabs(aResponse) {
    1.33 +      gActor = aResponse.webappsActor;
    1.34 +      onDone();
    1.35 +    });
    1.36 +  });
    1.37 +}
    1.38 +
    1.39 +function webappActorRequest(request, onResponse) {
    1.40 +  if (!gActor) {
    1.41 +    connect(webappActorRequest.bind(null, request, onResponse));
    1.42 +    return;
    1.43 +  }
    1.44 +
    1.45 +  request.to = gActor;
    1.46 +  gClient.request(request, onResponse);
    1.47 +}
    1.48 +
    1.49 +// Install a test packaged webapp from data folder
    1.50 +function installTestApp(zipName, appId, onDone) {
    1.51 +  // Copy our package to tmp folder, where the actor retrieves it
    1.52 +  let zip = do_get_file("data/" + zipName);
    1.53 +  let appDir = FileUtils.getDir("TmpD", ["b2g", appId], true, true);
    1.54 +  zip.copyTo(appDir, "application.zip");
    1.55 +
    1.56 +  let request = {type: "install", appId: appId};
    1.57 +  webappActorRequest(request, function (aResponse) {
    1.58 +    do_check_eq(aResponse.appId, appId);
    1.59 +    if ("error" in aResponse) {
    1.60 +      do_throw("Error: " + aResponse.error);
    1.61 +    }
    1.62 +    if ("message" in aResponse) {
    1.63 +      do_throw("Error message: " + aResponse.message);
    1.64 +    }
    1.65 +    do_check_false("error" in aResponse);
    1.66 +
    1.67 +    onDone();
    1.68 +  });
    1.69 +};
    1.70 +
    1.71 +function setup() {
    1.72 +  // We have to setup a profile, otherwise indexed db used by webapps
    1.73 +  // will throw random exception when trying to get profile folder
    1.74 +  do_get_profile();
    1.75 +
    1.76 +  // The webapps dir isn't registered on b2g xpcshell tests,
    1.77 +  // we have to manually set it to the directory service.
    1.78 +  do_get_webappsdir();
    1.79 +
    1.80 +  // We also need a valid nsIXulAppInfo service as Webapps.jsm is querying it
    1.81 +  Components.utils.import("resource://testing-common/AppInfo.jsm");
    1.82 +  updateAppInfo();
    1.83 +
    1.84 +  // We have to toggle this flag in order to have apps being listed in getAll
    1.85 +  // as only launchable apps are returned
    1.86 +  Components.utils.import('resource://gre/modules/Webapps.jsm');
    1.87 +  DOMApplicationRegistry.allAppsLaunchable = true;
    1.88 +}
    1.89 +
    1.90 +function do_get_webappsdir() {
    1.91 +  var webappsDir = Services.dirsvc.get("ProfD", Ci.nsILocalFile);
    1.92 +  webappsDir.append("test_webapps");
    1.93 +  if (!webappsDir.exists())
    1.94 +    webappsDir.create(Ci.nsIFile.DIRECTORY_TYPE, parseInt("755", 8));
    1.95 +
    1.96 +  var coreAppsDir = Services.dirsvc.get("ProfD", Ci.nsILocalFile);
    1.97 +  coreAppsDir.append("test_coreapps");
    1.98 +  if (!coreAppsDir.exists())
    1.99 +    coreAppsDir.create(Ci.nsIFile.DIRECTORY_TYPE, parseInt("755", 8));
   1.100 +
   1.101 +  // Register our own provider for the profile directory.
   1.102 +  // It will return our special docshell profile directory.
   1.103 +  var provider = {
   1.104 +    getFile: function(prop, persistent) {
   1.105 +      persistent.value = true;
   1.106 +      if (prop == "webappsDir") {
   1.107 +        return webappsDir.clone();
   1.108 +      }
   1.109 +      else if (prop == "coreAppsDir") {
   1.110 +        return coreAppsDir.clone();
   1.111 +      }
   1.112 +      throw Cr.NS_ERROR_FAILURE;
   1.113 +    },
   1.114 +    QueryInterface: function(iid) {
   1.115 +      if (iid.equals(Ci.nsIDirectoryServiceProvider) ||
   1.116 +          iid.equals(Ci.nsISupports)) {
   1.117 +        return this;
   1.118 +      }
   1.119 +      throw Cr.NS_ERROR_NO_INTERFACE;
   1.120 +    }
   1.121 +  };
   1.122 +  Services.dirsvc.QueryInterface(Ci.nsIDirectoryService).registerProvider(provider);
   1.123 +}
   1.124 +
   1.125 +

mercurial