~jamesh/bindwood/sync-item-to-couch

« back to all changes in this revision

Viewing changes to mozmill/tests/test_sync_observer.js

  • Committer: James Henstridge
  • Date: 2011-02-10 15:20:11 UTC
  • Revision ID: james@jamesh.id.au-20110210152011-gkizd6rje2ltbf1x
A new bookmarks observer implementation that just keeps track of the 
changed item IDs, so we can batch the changes into a single update.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
var bm = require("../shared-modules/bookmarks");
 
2
 
 
3
const LOCAL_TEST_FOLDER = collector.addHttpResource('../test-files/');
 
4
const LOCAL_TEST_PAGE = LOCAL_TEST_FOLDER + 'test.html';
 
5
 
 
6
var setupModule = function(module) {
 
7
    module.controller = mozmill.getBrowserController();
 
8
    module.jum = {}
 
9
    module.sync = {}
 
10
    module.fake_synchroniser = {
 
11
        guid_from_id: function (item_id) {
 
12
            return item_id;
 
13
        }
 
14
    }
 
15
    module.observer = null;
 
16
    Cu.import("resource://mozmill/modules/jum.js", module.jum);
 
17
    Cu.import("resource://bindwood/sync.jsm", module.sync);
 
18
};
 
19
 
 
20
 
 
21
var setupTest = function(test) {
 
22
    observer = new sync.BookmarksObserver(fake_synchroniser);
 
23
    bm.bookmarksService.addObserver(observer, false);
 
24
};
 
25
 
 
26
var teardownTest = function(test) {
 
27
    bm.bookmarksService.removeObserver(observer);
 
28
    bm.clearBookmarks();
 
29
};
 
30
 
 
31
var testQueryInterface = function() {
 
32
    jum.assertEquals(
 
33
        observer.QueryInterface(Ci.nsISupports), observer);
 
34
    jum.assertEquals(
 
35
        observer.QueryInterface(Ci.nsINavBookmarkObserver), observer);
 
36
    if (Ci.nsINavBookmarkObserver_MOZILLA_1_9_1_ADDITIONS) {
 
37
        jum.assertEquals(
 
38
            observer.QueryInterface(Ci.nsINavBookmarkObserver_MOZILLA_1_9_1_ADDITIONS), observer);
 
39
    }
 
40
};
 
41
 
 
42
var assertChanged = function (item_id) {
 
43
    var guid = fake_synchroniser.guid_from_id(item_id);
 
44
    return observer.changed_guids[guid] != null;
 
45
};
 
46
 
 
47
var assertNotChanged = function (item_id) {
 
48
    var guid = fake_synchroniser.guid_from_id(item_id);
 
49
    return observer.changed_guids[guid] == null;
 
50
};
 
51
 
 
52
var testClearChanges = function() {
 
53
    var dummy_id = 42;
 
54
    observer.record_change(dummy_id);
 
55
    assertChanged(dummy_id);
 
56
    observer.clear_changes(dummy_id);
 
57
    assertNotChanged(dummy_id);
 
58
};
 
59
 
 
60
var testAddBookmark = function() {
 
61
    var uri = bm.createURI(LOCAL_TEST_PAGE);
 
62
    var bookmark_id = bm.bookmarksService.insertBookmark(
 
63
        bm.bookmarksService.toolbarFolder,
 
64
        uri,
 
65
        bm.bookmarksService.DEFAULT_INDEX,
 
66
        "Bookmark title");
 
67
    assertChanged(bookmark_id);
 
68
    assertChanged(bm.bookmarksService.toolbarFolder);
 
69
};
 
70
 
 
71
var testRemoveBookmark = function() {
 
72
    var uri = bm.createURI(LOCAL_TEST_PAGE);
 
73
    var bookmark_id = bm.bookmarksService.insertBookmark(
 
74
        bm.bookmarksService.toolbarFolder,
 
75
        uri,
 
76
        bm.bookmarksService.DEFAULT_INDEX,
 
77
        "Bookmark title");
 
78
    observer.clear_changes();
 
79
 
 
80
    bm.bookmarksService.removeItem(bookmark_id);
 
81
    assertChanged(bookmark_id);
 
82
    assertChanged(bm.bookmarksService.toolbarFolder);
 
83
};
 
84
 
 
85
var testMoveBookmarkSameFolder = function() {
 
86
    var uri1 = bm.createURI(LOCAL_TEST_PAGE + "#one");
 
87
    var uri2 = bm.createURI(LOCAL_TEST_PAGE + "#two");
 
88
    var folder_id = bm.bookmarksService.createFolder(
 
89
        bm.bookmarksService.toolbarFolder,
 
90
        "Folder", bm.bookmarksService.DEFAULT_INDEX);
 
91
    var bookmark1_id = bm.bookmarksService.insertBookmark(
 
92
        folder_id, uri1, bm.bookmarksService.DEFAULT_INDEX,
 
93
        "Bookmark 1");
 
94
    var bookmark2_id = bm.bookmarksService.insertBookmark(
 
95
        folder_id, uri2, bm.bookmarksService.DEFAULT_INDEX,
 
96
        "Bookmark 2");
 
97
    observer.clear_changes();
 
98
 
 
99
    // If we move a bookmark within the same folder (i.e. no parent
 
100
    // change), then only the parent folder has changed.
 
101
    bm.bookmarksService.moveItem(bookmark2_id, folder_id, 0);
 
102
    assertChanged(folder_id);
 
103
    assertNotChanged(bookmark2_id);
 
104
};
 
105
 
 
106
var testMoveBookmarkDifferentFolder = function() {
 
107
    var uri = bm.createURI(LOCAL_TEST_PAGE);
 
108
    var folder1_id = bm.bookmarksService.createFolder(
 
109
        bm.bookmarksService.toolbarFolder,
 
110
        "Folder 1", bm.bookmarksService.DEFAULT_INDEX);
 
111
    var folder2_id = bm.bookmarksService.createFolder(
 
112
        bm.bookmarksService.toolbarFolder,
 
113
        "Folder 2", bm.bookmarksService.DEFAULT_INDEX);
 
114
    var bookmark_id = bm.bookmarksService.insertBookmark(
 
115
        folder1_id, uri, bm.bookmarksService.DEFAULT_INDEX,
 
116
        "Bookmark");
 
117
    observer.clear_changes();
 
118
 
 
119
    bm.bookmarksService.moveItem(
 
120
        bookmark_id, folder2_id, bm.bookmarksService.DEFAULT_INDEX);
 
121
    // The item is changed because it has a new parent.  The two
 
122
    // folders have changed because their child lists have changed.
 
123
    assertChanged(bookmark_id);
 
124
    assertChanged(folder1_id);
 
125
    assertChanged(folder2_id);
 
126
};
 
127