services/sync/tests/unit/test_bookmark_livemarks.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/services/sync/tests/unit/test_bookmark_livemarks.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,143 @@
     1.4 +/* Any copyright is dedicated to the Public Domain.
     1.5 +   http://creativecommons.org/publicdomain/zero/1.0/ */
     1.6 +
     1.7 +Cu.import("resource://gre/modules/Log.jsm");
     1.8 +Cu.import("resource://services-sync/record.js");
     1.9 +Cu.import("resource://services-sync/engines.js");
    1.10 +Cu.import("resource://services-sync/engines/bookmarks.js");
    1.11 +Cu.import("resource://services-sync/util.js");
    1.12 +Cu.import("resource://services-sync/service.js");
    1.13 +Cu.import("resource://gre/modules/PlacesUtils.jsm");
    1.14 +Cu.import("resource://testing-common/services-common/utils.js");
    1.15 +
    1.16 +const DESCRIPTION_ANNO = "bookmarkProperties/description";
    1.17 +
    1.18 +let engine = Service.engineManager.get("bookmarks");
    1.19 +let store = engine._store;
    1.20 +
    1.21 +// Record borrowed from Bug 631361.
    1.22 +let record631361 = {
    1.23 +  id: "M5bwUKK8hPyF",
    1.24 +  index: 150,
    1.25 +  modified: 1296768176.49,
    1.26 +  payload:
    1.27 +  {"id":"M5bwUKK8hPyF",
    1.28 +   "type":"livemark",
    1.29 +   "siteUri":"http://www.bbc.co.uk/go/rss/int/news/-/news/",
    1.30 +   "feedUri":"http://fxfeeds.mozilla.com/en-US/firefox/headlines.xml",
    1.31 +   "parentName":"Bookmarks Toolbar",
    1.32 +   "parentid":"toolbar",
    1.33 +   "title":"Latest Headlines",
    1.34 +   "description":"",
    1.35 +   "children":
    1.36 +     ["7oBdEZB-8BMO", "SUd1wktMNCTB", "eZe4QWzo1BcY", "YNBhGwhVnQsN",
    1.37 +      "92Aw2SMEkFg0", "uw0uKqrVFwd-", "x7mx2P3--8FJ", "d-jVF8UuC9Ye",
    1.38 +      "DV1XVtKLEiZ5", "g4mTaTjr837Z", "1Zi5W3lwBw8T", "FEYqlUHtbBWS",
    1.39 +      "qQd2u7LjosCB", "VUs2djqYfbvn", "KuhYnHocu7eg", "u2gcg9ILRg-3",
    1.40 +      "hfK_RP-EC7Ol", "Aq5qsa4E5msH", "6pZIbxuJTn-K", "k_fp0iN3yYMR",
    1.41 +      "59YD3iNOYO8O", "01afpSdAk2iz", "Cq-kjXDEPIoP", "HtNTjt9UwWWg",
    1.42 +      "IOU8QRSrTR--", "HJ5lSlBx6d1D", "j2dz5R5U6Khc", "5GvEjrNR0yJl",
    1.43 +      "67ozIBF5pNVP", "r5YB0cUx6C_w", "FtmFDBNxDQ6J", "BTACeZq9eEtw",
    1.44 +      "ll4ozQ-_VNJe", "HpImsA4_XuW7", "nJvCUQPLSXwA", "94LG-lh6TUYe",
    1.45 +      "WHn_QoOL94Os", "l-RvjgsZYlej", "LipQ8abcRstN", "74TiLvarE3n_",
    1.46 +      "8fCiLQpQGK1P", "Z6h4WkbwfQFa", "GgAzhqakoS6g", "qyt92T8vpMsK",
    1.47 +      "RyOgVCe2EAOE", "bgSEhW3w6kk5", "hWODjHKGD7Ph", "Cky673aqOHbT",
    1.48 +      "gZCYT7nx3Nwu", "iJzaJxxrM58L", "rUHCRv68aY5L", "6Jc1hNJiVrV9",
    1.49 +      "lmNgoayZ-ym8", "R1lyXsDzlfOd", "pinrXwDnRk6g", "Sn7TmZV01vMM",
    1.50 +      "qoXyU6tcS1dd", "TRLanED-QfBK", "xHbhMeX_FYEA", "aPqacdRlAtaW",
    1.51 +      "E3H04Wn2RfSi", "eaSIMI6kSrcz", "rtkRxFoG5Vqi", "dectkUglV0Dz",
    1.52 +      "B4vUE0BE15No", "qgQFW5AQrgB0", "SxAXvwOhu8Zi", "0S6cRPOg-5Z2",
    1.53 +      "zcZZBGeLnaWW", "B0at8hkQqVZQ", "sgPtgGulbP66", "lwtwGHSCPYaQ",
    1.54 +      "mNTdpgoRZMbW", "-L8Vci6CbkJY", "bVzudKSQERc1", "Gxl9lb4DXsmL",
    1.55 +      "3Qr13GucOtEh"]},
    1.56 +  collection: "bookmarks"
    1.57 +};
    1.58 +
    1.59 +// Clean up after other tests. Only necessary in XULRunner.
    1.60 +store.wipe();
    1.61 +
    1.62 +function makeLivemark(p, mintGUID) {
    1.63 +  let b = new Livemark("bookmarks", p.id);
    1.64 +  // Copy here, because tests mutate the contents.
    1.65 +  b.cleartext = TestingUtils.deepCopy(p);
    1.66 +
    1.67 +  if (mintGUID)
    1.68 +    b.id = Utils.makeGUID();
    1.69 +
    1.70 +  return b;
    1.71 +}
    1.72 +
    1.73 +
    1.74 +function run_test() {
    1.75 +  initTestLogging("Trace");
    1.76 +  Log.repository.getLogger("Sync.Engine.Bookmarks").level = Log.Level.Trace;
    1.77 +  Log.repository.getLogger("Sync.Store.Bookmarks").level  = Log.Level.Trace;
    1.78 +
    1.79 +  run_next_test();
    1.80 +}
    1.81 +
    1.82 +add_test(function test_livemark_descriptions() {
    1.83 +  let record = record631361.payload;
    1.84 +
    1.85 +  function doRecord(r) {
    1.86 +    store._childrenToOrder = {};
    1.87 +    store.applyIncoming(r);
    1.88 +    store._orderChildren();
    1.89 +    delete store._childrenToOrder;
    1.90 +  }
    1.91 +
    1.92 +  // Attempt to provoke an error by messing around with the description.
    1.93 +  record.description = null;
    1.94 +  doRecord(makeLivemark(record));
    1.95 +  record.description = "";
    1.96 +  doRecord(makeLivemark(record));
    1.97 +
    1.98 +  // Attempt to provoke an error by adding a bad description anno.
    1.99 +  let id = store.idForGUID(record.id);
   1.100 +  PlacesUtils.annotations.setItemAnnotation(id, DESCRIPTION_ANNO, "", 0,
   1.101 +                                            PlacesUtils.annotations.EXPIRE_NEVER);
   1.102 +
   1.103 +  run_next_test();
   1.104 +});
   1.105 +
   1.106 +add_test(function test_livemark_invalid() {
   1.107 +  _("Livemarks considered invalid by nsLivemarkService are skipped.");
   1.108 +
   1.109 +  _("Parent is 0, which is invalid. Will be set to unfiled.");
   1.110 +  let noParentRec = makeLivemark(record631361.payload, true);
   1.111 +  noParentRec._parent = 0;
   1.112 +  store.create(noParentRec);
   1.113 +  let recID = store.idForGUID(noParentRec.id, true);
   1.114 +  do_check_true(recID > 0);
   1.115 +  do_check_eq(PlacesUtils.bookmarks.getFolderIdForItem(recID), PlacesUtils.bookmarks.unfiledBookmarksFolder);
   1.116 +
   1.117 +  _("Parent is unknown. Will be set to unfiled.");
   1.118 +  let lateParentRec = makeLivemark(record631361.payload, true);
   1.119 +  let parentGUID = Utils.makeGUID();
   1.120 +  lateParentRec.parentid = parentGUID;
   1.121 +  lateParentRec._parent = store.idForGUID(parentGUID);   // Usually done by applyIncoming.
   1.122 +  do_check_eq(-1, lateParentRec._parent);
   1.123 +
   1.124 +  store.create(lateParentRec);
   1.125 +  recID = store.idForGUID(lateParentRec.id, true);
   1.126 +  do_check_true(recID > 0);
   1.127 +  do_check_eq(PlacesUtils.bookmarks.getFolderIdForItem(recID),
   1.128 +              PlacesUtils.bookmarks.unfiledBookmarksFolder);
   1.129 +
   1.130 +  _("No feed URI, which is invalid. Will be skipped.");
   1.131 +  let noFeedURIRec = makeLivemark(record631361.payload, true);
   1.132 +  delete noFeedURIRec.cleartext.feedUri;
   1.133 +  store.create(noFeedURIRec);
   1.134 +  // No exception, but no creation occurs.
   1.135 +  do_check_eq(-1, store.idForGUID(noFeedURIRec.id, true));
   1.136 +
   1.137 +  _("Parent is a Livemark. Will be skipped.");
   1.138 +  let lmParentRec = makeLivemark(record631361.payload, true);
   1.139 +  lmParentRec._parent = recID;
   1.140 +  store.create(lmParentRec);
   1.141 +  // No exception, but no creation occurs.
   1.142 +  do_check_eq(-1, store.idForGUID(lmParentRec.id, true));
   1.143 +
   1.144 +  // Clear event loop.
   1.145 +  Utils.nextTick(run_next_test);
   1.146 +});

mercurial