|
1 /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
|
2 /* vim:set ts=2 sw=2 sts=2 et: */ |
|
3 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
4 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
6 |
|
7 // Get bookmark service |
|
8 try { |
|
9 var bmsvc = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].getService(Ci.nsINavBookmarksService); |
|
10 } catch(ex) { |
|
11 do_throw("Could not get nav-bookmarks-service\n"); |
|
12 } |
|
13 |
|
14 // Get history service |
|
15 try { |
|
16 var histsvc = Cc["@mozilla.org/browser/nav-history-service;1"].getService(Ci.nsINavHistoryService); |
|
17 } catch(ex) { |
|
18 do_throw("Could not get history service\n"); |
|
19 } |
|
20 |
|
21 // get bookmarks root id |
|
22 var root = bmsvc.bookmarksMenuFolder; |
|
23 |
|
24 // main |
|
25 function run_test() { |
|
26 // test search on folder with various sorts and max results |
|
27 // see bug #385829 for more details |
|
28 var folder = bmsvc.createFolder(root, "bug 385829 test", bmsvc.DEFAULT_INDEX); |
|
29 var b1 = bmsvc.insertBookmark(folder, uri("http://a1.com/"), |
|
30 bmsvc.DEFAULT_INDEX, "1 title"); |
|
31 |
|
32 var b2 = bmsvc.insertBookmark(folder, uri("http://a2.com/"), |
|
33 bmsvc.DEFAULT_INDEX, "2 title"); |
|
34 |
|
35 var b3 = bmsvc.insertBookmark(folder, uri("http://a3.com/"), |
|
36 bmsvc.DEFAULT_INDEX, "3 title"); |
|
37 |
|
38 var b4 = bmsvc.insertBookmark(folder, uri("http://a4.com/"), |
|
39 bmsvc.DEFAULT_INDEX, "4 title"); |
|
40 |
|
41 // ensure some unique values for date added and last modified |
|
42 // for date added: b1 < b2 < b3 < b4 |
|
43 // for last modified: b1 > b2 > b3 > b4 |
|
44 bmsvc.setItemDateAdded(b1, 1000); |
|
45 bmsvc.setItemDateAdded(b2, 2000); |
|
46 bmsvc.setItemDateAdded(b3, 3000); |
|
47 bmsvc.setItemDateAdded(b4, 4000); |
|
48 |
|
49 bmsvc.setItemLastModified(b1, 4000); |
|
50 bmsvc.setItemLastModified(b2, 3000); |
|
51 bmsvc.setItemLastModified(b3, 2000); |
|
52 bmsvc.setItemLastModified(b4, 1000); |
|
53 |
|
54 var options = histsvc.getNewQueryOptions(); |
|
55 var query = histsvc.getNewQuery(); |
|
56 options.queryType = Ci.nsINavHistoryQueryOptions.QUERY_TYPE_BOOKMARKS; |
|
57 options.maxResults = 3; |
|
58 query.setFolders([folder], 1); |
|
59 |
|
60 var result = histsvc.executeQuery(query, options); |
|
61 var rootNode = result.root; |
|
62 rootNode.containerOpen = true; |
|
63 |
|
64 // test SORT_BY_DATEADDED_ASCENDING (live update) |
|
65 result.sortingMode = options.SORT_BY_DATEADDED_ASCENDING; |
|
66 do_check_eq(rootNode.childCount, 3); |
|
67 do_check_eq(rootNode.getChild(0).itemId, b1); |
|
68 do_check_eq(rootNode.getChild(1).itemId, b2); |
|
69 do_check_eq(rootNode.getChild(2).itemId, b3); |
|
70 do_check_true(rootNode.getChild(0).dateAdded < |
|
71 rootNode.getChild(1).dateAdded); |
|
72 do_check_true(rootNode.getChild(1).dateAdded < |
|
73 rootNode.getChild(2).dateAdded); |
|
74 |
|
75 // test SORT_BY_DATEADDED_DESCENDING (live update) |
|
76 result.sortingMode = options.SORT_BY_DATEADDED_DESCENDING; |
|
77 do_check_eq(rootNode.childCount, 3); |
|
78 do_check_eq(rootNode.getChild(0).itemId, b3); |
|
79 do_check_eq(rootNode.getChild(1).itemId, b2); |
|
80 do_check_eq(rootNode.getChild(2).itemId, b1); |
|
81 do_check_true(rootNode.getChild(0).dateAdded > |
|
82 rootNode.getChild(1).dateAdded); |
|
83 do_check_true(rootNode.getChild(1).dateAdded > |
|
84 rootNode.getChild(2).dateAdded); |
|
85 |
|
86 // test SORT_BY_LASTMODIFIED_ASCENDING (live update) |
|
87 result.sortingMode = options.SORT_BY_LASTMODIFIED_ASCENDING; |
|
88 do_check_eq(rootNode.childCount, 3); |
|
89 do_check_eq(rootNode.getChild(0).itemId, b3); |
|
90 do_check_eq(rootNode.getChild(1).itemId, b2); |
|
91 do_check_eq(rootNode.getChild(2).itemId, b1); |
|
92 do_check_true(rootNode.getChild(0).lastModified < |
|
93 rootNode.getChild(1).lastModified); |
|
94 do_check_true(rootNode.getChild(1).lastModified < |
|
95 rootNode.getChild(2).lastModified); |
|
96 |
|
97 // test SORT_BY_LASTMODIFIED_DESCENDING (live update) |
|
98 result.sortingMode = options.SORT_BY_LASTMODIFIED_DESCENDING; |
|
99 |
|
100 do_check_eq(rootNode.childCount, 3); |
|
101 do_check_eq(rootNode.getChild(0).itemId, b1); |
|
102 do_check_eq(rootNode.getChild(1).itemId, b2); |
|
103 do_check_eq(rootNode.getChild(2).itemId, b3); |
|
104 do_check_true(rootNode.getChild(0).lastModified > |
|
105 rootNode.getChild(1).lastModified); |
|
106 do_check_true(rootNode.getChild(1).lastModified > |
|
107 rootNode.getChild(2).lastModified); |
|
108 rootNode.containerOpen = false; |
|
109 |
|
110 // test SORT_BY_DATEADDED_ASCENDING |
|
111 options.sortingMode = options.SORT_BY_DATEADDED_ASCENDING; |
|
112 result = histsvc.executeQuery(query, options); |
|
113 rootNode = result.root; |
|
114 rootNode.containerOpen = true; |
|
115 do_check_eq(rootNode.childCount, 3); |
|
116 do_check_eq(rootNode.getChild(0).itemId, b1); |
|
117 do_check_eq(rootNode.getChild(1).itemId, b2); |
|
118 do_check_eq(rootNode.getChild(2).itemId, b3); |
|
119 do_check_true(rootNode.getChild(0).dateAdded < |
|
120 rootNode.getChild(1).dateAdded); |
|
121 do_check_true(rootNode.getChild(1).dateAdded < |
|
122 rootNode.getChild(2).dateAdded); |
|
123 rootNode.containerOpen = false; |
|
124 |
|
125 // test SORT_BY_DATEADDED_DESCENDING |
|
126 options.sortingMode = options.SORT_BY_DATEADDED_DESCENDING; |
|
127 result = histsvc.executeQuery(query, options); |
|
128 rootNode = result.root; |
|
129 rootNode.containerOpen = true; |
|
130 do_check_eq(rootNode.childCount, 3); |
|
131 do_check_eq(rootNode.getChild(0).itemId, b4); |
|
132 do_check_eq(rootNode.getChild(1).itemId, b3); |
|
133 do_check_eq(rootNode.getChild(2).itemId, b2); |
|
134 do_check_true(rootNode.getChild(0).dateAdded > |
|
135 rootNode.getChild(1).dateAdded); |
|
136 do_check_true(rootNode.getChild(1).dateAdded > |
|
137 rootNode.getChild(2).dateAdded); |
|
138 rootNode.containerOpen = false; |
|
139 |
|
140 // test SORT_BY_LASTMODIFIED_ASCENDING |
|
141 options.sortingMode = options.SORT_BY_LASTMODIFIED_ASCENDING; |
|
142 result = histsvc.executeQuery(query, options); |
|
143 rootNode = result.root; |
|
144 rootNode.containerOpen = true; |
|
145 do_check_eq(rootNode.childCount, 3); |
|
146 do_check_eq(rootNode.getChild(0).itemId, b4); |
|
147 do_check_eq(rootNode.getChild(1).itemId, b3); |
|
148 do_check_eq(rootNode.getChild(2).itemId, b2); |
|
149 do_check_true(rootNode.getChild(0).lastModified < |
|
150 rootNode.getChild(1).lastModified); |
|
151 do_check_true(rootNode.getChild(1).lastModified < |
|
152 rootNode.getChild(2).lastModified); |
|
153 rootNode.containerOpen = false; |
|
154 |
|
155 // test SORT_BY_LASTMODIFIED_DESCENDING |
|
156 options.sortingMode = options.SORT_BY_LASTMODIFIED_DESCENDING; |
|
157 result = histsvc.executeQuery(query, options); |
|
158 rootNode = result.root; |
|
159 rootNode.containerOpen = true; |
|
160 do_check_eq(rootNode.childCount, 3); |
|
161 do_check_eq(rootNode.getChild(0).itemId, b1); |
|
162 do_check_eq(rootNode.getChild(1).itemId, b2); |
|
163 do_check_eq(rootNode.getChild(2).itemId, b3); |
|
164 do_check_true(rootNode.getChild(0).lastModified > |
|
165 rootNode.getChild(1).lastModified); |
|
166 do_check_true(rootNode.getChild(1).lastModified > |
|
167 rootNode.getChild(2).lastModified); |
|
168 rootNode.containerOpen = false; |
|
169 } |