/services/sync/tests/unit/test_bookmark_livemarks.js

http://github.com/zpao/v8monkey · JavaScript · 140 lines · 109 code · 23 blank · 8 comment · 1 complexity · f3028928b231ac65b8a42a12032880f1 MD5 · raw file

  1. Cu.import("resource://services-sync/log4moz.js");
  2. Cu.import("resource://services-sync/record.js");
  3. Cu.import("resource://services-sync/engines.js");
  4. Cu.import("resource://services-sync/engines/bookmarks.js");
  5. Cu.import("resource://services-sync/util.js");
  6. Cu.import("resource://services-sync/service.js");
  7. Cu.import("resource://gre/modules/PlacesUtils.jsm");
  8. const DESCRIPTION_ANNO = "bookmarkProperties/description";
  9. let engine = Engines.get("bookmarks");
  10. let store = engine._store;
  11. // Record borrowed from Bug 631361.
  12. let record631361 = {
  13. id: "M5bwUKK8hPyF",
  14. index: 150,
  15. modified: 1296768176.49,
  16. payload:
  17. {"id":"M5bwUKK8hPyF",
  18. "type":"livemark",
  19. "siteUri":"http://www.bbc.co.uk/go/rss/int/news/-/news/",
  20. "feedUri":"http://fxfeeds.mozilla.com/en-US/firefox/headlines.xml",
  21. "parentName":"Bookmarks Toolbar",
  22. "parentid":"toolbar",
  23. "title":"Latest Headlines",
  24. "description":"",
  25. "children":
  26. ["7oBdEZB-8BMO", "SUd1wktMNCTB", "eZe4QWzo1BcY", "YNBhGwhVnQsN",
  27. "92Aw2SMEkFg0", "uw0uKqrVFwd-", "x7mx2P3--8FJ", "d-jVF8UuC9Ye",
  28. "DV1XVtKLEiZ5", "g4mTaTjr837Z", "1Zi5W3lwBw8T", "FEYqlUHtbBWS",
  29. "qQd2u7LjosCB", "VUs2djqYfbvn", "KuhYnHocu7eg", "u2gcg9ILRg-3",
  30. "hfK_RP-EC7Ol", "Aq5qsa4E5msH", "6pZIbxuJTn-K", "k_fp0iN3yYMR",
  31. "59YD3iNOYO8O", "01afpSdAk2iz", "Cq-kjXDEPIoP", "HtNTjt9UwWWg",
  32. "IOU8QRSrTR--", "HJ5lSlBx6d1D", "j2dz5R5U6Khc", "5GvEjrNR0yJl",
  33. "67ozIBF5pNVP", "r5YB0cUx6C_w", "FtmFDBNxDQ6J", "BTACeZq9eEtw",
  34. "ll4ozQ-_VNJe", "HpImsA4_XuW7", "nJvCUQPLSXwA", "94LG-lh6TUYe",
  35. "WHn_QoOL94Os", "l-RvjgsZYlej", "LipQ8abcRstN", "74TiLvarE3n_",
  36. "8fCiLQpQGK1P", "Z6h4WkbwfQFa", "GgAzhqakoS6g", "qyt92T8vpMsK",
  37. "RyOgVCe2EAOE", "bgSEhW3w6kk5", "hWODjHKGD7Ph", "Cky673aqOHbT",
  38. "gZCYT7nx3Nwu", "iJzaJxxrM58L", "rUHCRv68aY5L", "6Jc1hNJiVrV9",
  39. "lmNgoayZ-ym8", "R1lyXsDzlfOd", "pinrXwDnRk6g", "Sn7TmZV01vMM",
  40. "qoXyU6tcS1dd", "TRLanED-QfBK", "xHbhMeX_FYEA", "aPqacdRlAtaW",
  41. "E3H04Wn2RfSi", "eaSIMI6kSrcz", "rtkRxFoG5Vqi", "dectkUglV0Dz",
  42. "B4vUE0BE15No", "qgQFW5AQrgB0", "SxAXvwOhu8Zi", "0S6cRPOg-5Z2",
  43. "zcZZBGeLnaWW", "B0at8hkQqVZQ", "sgPtgGulbP66", "lwtwGHSCPYaQ",
  44. "mNTdpgoRZMbW", "-L8Vci6CbkJY", "bVzudKSQERc1", "Gxl9lb4DXsmL",
  45. "3Qr13GucOtEh"]},
  46. collection: "bookmarks"
  47. };
  48. // Clean up after other tests. Only necessary in XULRunner.
  49. store.wipe();
  50. function makeLivemark(p, mintGUID) {
  51. let b = new Livemark("bookmarks", p.id);
  52. // Copy here, because tests mutate the contents.
  53. b.cleartext = Utils.deepCopy(p);
  54. if (mintGUID)
  55. b.id = Utils.makeGUID();
  56. return b;
  57. }
  58. function run_test() {
  59. initTestLogging("Trace");
  60. Log4Moz.repository.getLogger("Sync.Engine.Bookmarks").level = Log4Moz.Level.Trace;
  61. Log4Moz.repository.getLogger("Sync.Store.Bookmarks").level = Log4Moz.Level.Trace;
  62. run_next_test();
  63. }
  64. add_test(function test_livemark_descriptions() {
  65. let record = record631361.payload;
  66. function doRecord(r) {
  67. store._childrenToOrder = {};
  68. store.applyIncoming(r);
  69. store._orderChildren();
  70. delete store._childrenToOrder;
  71. }
  72. // Attempt to provoke an error by messing around with the description.
  73. record.description = null;
  74. doRecord(makeLivemark(record));
  75. record.description = "";
  76. doRecord(makeLivemark(record));
  77. // Attempt to provoke an error by adding a bad description anno.
  78. let id = store.idForGUID(record.id);
  79. PlacesUtils.annotations.setItemAnnotation(id, DESCRIPTION_ANNO, "", 0,
  80. PlacesUtils.annotations.EXPIRE_NEVER);
  81. run_next_test();
  82. });
  83. add_test(function test_livemark_invalid() {
  84. _("Livemarks considered invalid by nsLivemarkService are skipped.");
  85. _("Parent is 0, which is invalid. Will be set to unfiled.");
  86. let noParentRec = makeLivemark(record631361.payload, true);
  87. noParentRec._parent = 0;
  88. store.create(noParentRec);
  89. let recID = store.idForGUID(noParentRec.id, true);
  90. do_check_true(recID > 0);
  91. do_check_eq(PlacesUtils.bookmarks.getFolderIdForItem(recID), PlacesUtils.bookmarks.unfiledBookmarksFolder);
  92. _("Parent is unknown. Will be set to unfiled.");
  93. let lateParentRec = makeLivemark(record631361.payload, true);
  94. let parentGUID = Utils.makeGUID();
  95. lateParentRec.parentid = parentGUID;
  96. lateParentRec._parent = store.idForGUID(parentGUID); // Usually done by applyIncoming.
  97. do_check_eq(-1, lateParentRec._parent);
  98. store.create(lateParentRec);
  99. recID = store.idForGUID(lateParentRec.id, true);
  100. do_check_true(recID > 0);
  101. do_check_eq(PlacesUtils.bookmarks.getFolderIdForItem(recID),
  102. PlacesUtils.bookmarks.unfiledBookmarksFolder);
  103. _("No feed URI, which is invalid. Will be skipped.");
  104. let noFeedURIRec = makeLivemark(record631361.payload, true);
  105. delete noFeedURIRec.cleartext.feedUri;
  106. store.create(noFeedURIRec);
  107. // No exception, but no creation occurs.
  108. do_check_eq(-1, store.idForGUID(noFeedURIRec.id, true));
  109. _("Parent is a Livemark. Will be skipped.");
  110. let lmParentRec = makeLivemark(record631361.payload, true);
  111. lmParentRec._parent = recID;
  112. store.create(lmParentRec);
  113. // No exception, but no creation occurs.
  114. do_check_eq(-1, store.idForGUID(lmParentRec.id, true));
  115. // Clear event loop.
  116. Utils.nextTick(run_next_test);
  117. });