toolkit/components/social/test/xpcshell/test_SocialService.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/toolkit/components/social/test/xpcshell/test_SocialService.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,166 @@
     1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this file,
     1.6 + * You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.7 +
     1.8 +Cu.import("resource://gre/modules/Services.jsm");
     1.9 +Cu.import("resource://gre/modules/PlacesUtils.jsm");
    1.10 +
    1.11 +function run_test() {
    1.12 +  initApp();
    1.13 +
    1.14 +  // NOTE: none of the manifests here can have a workerURL set, or we attempt
    1.15 +  // to create a FrameWorker and that fails under xpcshell...
    1.16 +  let manifests = [
    1.17 +    { // normal provider
    1.18 +      name: "provider 1",
    1.19 +      origin: "https://example1.com",
    1.20 +      sidebarURL: "https://example1.com/sidebar/",
    1.21 +    },
    1.22 +    { // provider without workerURL
    1.23 +      name: "provider 2",
    1.24 +      origin: "https://example2.com",
    1.25 +      sidebarURL: "https://example2.com/sidebar/",
    1.26 +    }
    1.27 +  ];
    1.28 +
    1.29 +  Cu.import("resource://gre/modules/SocialService.jsm");
    1.30 +  Cu.import("resource://gre/modules/MozSocialAPI.jsm");
    1.31 +
    1.32 +  let runner = new AsyncRunner();
    1.33 +  let next = runner.next.bind(runner);
    1.34 +  runner.appendIterator(testAddProviders(manifests, next));
    1.35 +  runner.appendIterator(testGetProvider(manifests, next));
    1.36 +  runner.appendIterator(testGetProviderList(manifests, next));
    1.37 +  runner.appendIterator(testAddRemoveProvider(manifests, next));
    1.38 +  runner.appendIterator(testIsSameOrigin(manifests, next));
    1.39 +  runner.appendIterator(testResolveUri  (manifests, next));
    1.40 +  runner.appendIterator(testOrderedProviders(manifests, next));
    1.41 +  runner.appendIterator(testRemoveProviders(manifests, next));
    1.42 +  runner.next();
    1.43 +}
    1.44 +
    1.45 +function testAddProviders(manifests, next) {
    1.46 +  do_check_false(SocialService.enabled);
    1.47 +  let provider = yield SocialService.addProvider(manifests[0], next);
    1.48 +  do_check_true(SocialService.enabled);
    1.49 +  do_check_true(MozSocialAPI._enabled);
    1.50 +  do_check_false(provider.enabled);
    1.51 +  provider = yield SocialService.addProvider(manifests[1], next);
    1.52 +  do_check_false(provider.enabled);
    1.53 +}
    1.54 +
    1.55 +function testRemoveProviders(manifests, next) {
    1.56 +  do_check_true(SocialService.enabled);
    1.57 +  yield SocialService.removeProvider(manifests[0].origin, next);
    1.58 +  yield SocialService.removeProvider(manifests[1].origin, next);
    1.59 +  do_check_false(SocialService.enabled);
    1.60 +}
    1.61 +
    1.62 +function testGetProvider(manifests, next) {
    1.63 +  for (let i = 0; i < manifests.length; i++) {
    1.64 +    let manifest = manifests[i];
    1.65 +    let provider = yield SocialService.getProvider(manifest.origin, next);
    1.66 +    do_check_neq(provider, null);
    1.67 +    do_check_eq(provider.name, manifest.name);
    1.68 +    do_check_eq(provider.workerURL, manifest.workerURL);
    1.69 +    do_check_eq(provider.origin, manifest.origin);
    1.70 +  }
    1.71 +  do_check_eq((yield SocialService.getProvider("bogus", next)), null);
    1.72 +}
    1.73 +
    1.74 +function testGetProviderList(manifests, next) {
    1.75 +  let providers = yield SocialService.getProviderList(next);
    1.76 +  do_check_true(providers.length >= manifests.length);
    1.77 +  for (let i = 0; i < manifests.length; i++) {
    1.78 +    let providerIdx = providers.map(function (p) p.origin).indexOf(manifests[i].origin);
    1.79 +    let provider = providers[providerIdx];
    1.80 +    do_check_true(!!provider);
    1.81 +    do_check_false(provider.enabled);
    1.82 +    do_check_eq(provider.workerURL, manifests[i].workerURL);
    1.83 +    do_check_eq(provider.name, manifests[i].name);
    1.84 +  }
    1.85 +}
    1.86 +
    1.87 +function testAddRemoveProvider(manifests, next) {
    1.88 +  var threw;
    1.89 +  try {
    1.90 +    // Adding a provider whose origin already exists should fail
    1.91 +    SocialService.addProvider(manifests[0]);
    1.92 +  } catch (ex) {
    1.93 +    threw = ex;
    1.94 +  }
    1.95 +  do_check_neq(threw.toString().indexOf("SocialService.addProvider: provider with this origin already exists"), -1);
    1.96 +
    1.97 +  let originalProviders = yield SocialService.getProviderList(next);
    1.98 +
    1.99 +  // Check that provider installation succeeds
   1.100 +  let newProvider = yield SocialService.addProvider({
   1.101 +    name: "foo",
   1.102 +    origin: "http://example3.com"
   1.103 +  }, next);
   1.104 +  let retrievedNewProvider = yield SocialService.getProvider(newProvider.origin, next);
   1.105 +  do_check_eq(newProvider, retrievedNewProvider);
   1.106 +
   1.107 +  let providersAfter = yield SocialService.getProviderList(next);
   1.108 +  do_check_eq(providersAfter.length, originalProviders.length + 1);
   1.109 +  do_check_neq(providersAfter.indexOf(newProvider), -1);
   1.110 +
   1.111 +  // Now remove the provider
   1.112 +  yield SocialService.removeProvider(newProvider.origin, next);
   1.113 +  providersAfter = yield SocialService.getProviderList(next);
   1.114 +  do_check_eq(providersAfter.length, originalProviders.length);
   1.115 +  do_check_eq(providersAfter.indexOf(newProvider), -1);
   1.116 +  newProvider = yield SocialService.getProvider(newProvider.origin, next);
   1.117 +  do_check_true(!newProvider);
   1.118 +}
   1.119 +
   1.120 +function testIsSameOrigin(manifests, next) {
   1.121 +  let providers = yield SocialService.getProviderList(next);
   1.122 +  let provider = providers[0];
   1.123 +  // provider.origin is a string.
   1.124 +  do_check_true(provider.isSameOrigin(provider.origin));
   1.125 +  do_check_true(provider.isSameOrigin(Services.io.newURI(provider.origin, null, null)));
   1.126 +  do_check_true(provider.isSameOrigin(provider.origin + "/some-sub-page"));
   1.127 +  do_check_true(provider.isSameOrigin(Services.io.newURI(provider.origin + "/some-sub-page", null, null)));
   1.128 +  do_check_false(provider.isSameOrigin("http://something.com"));
   1.129 +  do_check_false(provider.isSameOrigin(Services.io.newURI("http://something.com", null, null)));
   1.130 +  do_check_false(provider.isSameOrigin("data:text/html,<p>hi"));
   1.131 +  do_check_true(provider.isSameOrigin("data:text/html,<p>hi", true));
   1.132 +  do_check_false(provider.isSameOrigin(Services.io.newURI("data:text/html,<p>hi", null, null)));
   1.133 +  do_check_true(provider.isSameOrigin(Services.io.newURI("data:text/html,<p>hi", null, null), true));
   1.134 +  // we explicitly handle null and return false
   1.135 +  do_check_false(provider.isSameOrigin(null));
   1.136 +}
   1.137 +
   1.138 +function testResolveUri(manifests, next) {
   1.139 +  let providers = yield SocialService.getProviderList(next);
   1.140 +  let provider = providers[0];
   1.141 +  do_check_eq(provider.resolveUri(provider.origin).spec, provider.origin + "/");
   1.142 +  do_check_eq(provider.resolveUri("foo.html").spec, provider.origin + "/foo.html");
   1.143 +  do_check_eq(provider.resolveUri("/foo.html").spec, provider.origin + "/foo.html");
   1.144 +  do_check_eq(provider.resolveUri("http://somewhereelse.com/foo.html").spec, "http://somewhereelse.com/foo.html");
   1.145 +  do_check_eq(provider.resolveUri("data:text/html,<p>hi").spec, "data:text/html,<p>hi");
   1.146 +}
   1.147 +
   1.148 +function testOrderedProviders(manifests, next) {
   1.149 +  let providers = yield SocialService.getProviderList(next);
   1.150 +
   1.151 +  // add visits for only one of the providers
   1.152 +  let visits = [];
   1.153 +  let startDate = Date.now() * 1000;
   1.154 +  for (let i = 0; i < 10; i++) {
   1.155 +    visits.push({
   1.156 +      uri: Services.io.newURI(providers[1].sidebarURL + i, null, null),
   1.157 +      visitDate: startDate + i
   1.158 +    });
   1.159 +  }
   1.160 +
   1.161 +  promiseAddVisits(visits).then(next);
   1.162 +  yield;
   1.163 +  let orderedProviders = yield SocialService.getOrderedProviderList(next);
   1.164 +  do_check_eq(orderedProviders[0], providers[1]);
   1.165 +  do_check_eq(orderedProviders[1], providers[0]);
   1.166 +  do_check_true(orderedProviders[0].frecency > orderedProviders[1].frecency);
   1.167 +  promiseClearHistory().then(next);
   1.168 +  yield;
   1.169 +}

mercurial