summaryrefslogtreecommitdiffstats
path: root/toolkit/components/places/tests/unifiedcomplete/test_special_search.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/places/tests/unifiedcomplete/test_special_search.js')
-rw-r--r--toolkit/components/places/tests/unifiedcomplete/test_special_search.js447
1 files changed, 447 insertions, 0 deletions
diff --git a/toolkit/components/places/tests/unifiedcomplete/test_special_search.js b/toolkit/components/places/tests/unifiedcomplete/test_special_search.js
new file mode 100644
index 000000000..21df7046c
--- /dev/null
+++ b/toolkit/components/places/tests/unifiedcomplete/test_special_search.js
@@ -0,0 +1,447 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Test for bug 395161 that allows special searches that restrict results to
+ * history/bookmark/tagged items and title/url matches.
+ *
+ * Test 485122 by making sure results don't have tags when restricting result
+ * to just history either by default behavior or dynamic query restrict.
+ */
+
+function setSuggestPrefsToFalse() {
+ Services.prefs.setBoolPref("browser.urlbar.suggest.history", false);
+ Services.prefs.setBoolPref("browser.urlbar.suggest.history.onlyTyped", false);
+ Services.prefs.setBoolPref("browser.urlbar.suggest.bookmark", false);
+}
+
+add_task(function* test_special_searches() {
+ let uri1 = NetUtil.newURI("http://url/");
+ let uri2 = NetUtil.newURI("http://url/2");
+ let uri3 = NetUtil.newURI("http://foo.bar/");
+ let uri4 = NetUtil.newURI("http://foo.bar/2");
+ let uri5 = NetUtil.newURI("http://url/star");
+ let uri6 = NetUtil.newURI("http://url/star/2");
+ let uri7 = NetUtil.newURI("http://foo.bar/star");
+ let uri8 = NetUtil.newURI("http://foo.bar/star/2");
+ let uri9 = NetUtil.newURI("http://url/tag");
+ let uri10 = NetUtil.newURI("http://url/tag/2");
+ let uri11 = NetUtil.newURI("http://foo.bar/tag");
+ let uri12 = NetUtil.newURI("http://foo.bar/tag/2");
+ yield PlacesTestUtils.addVisits([
+ { uri: uri1, title: "title", transition: TRANSITION_TYPED },
+ { uri: uri2, title: "foo.bar" },
+ { uri: uri3, title: "title" },
+ { uri: uri4, title: "foo.bar", transition: TRANSITION_TYPED },
+ { uri: uri6, title: "foo.bar" },
+ { uri: uri11, title: "title", transition: TRANSITION_TYPED }
+ ]);
+ yield addBookmark( { uri: uri5, title: "title" } );
+ yield addBookmark( { uri: uri6, title: "foo.bar" } );
+ yield addBookmark( { uri: uri7, title: "title" } );
+ yield addBookmark( { uri: uri8, title: "foo.bar" } );
+ yield addBookmark( { uri: uri9, title: "title", tags: [ "foo.bar" ] } );
+ yield addBookmark( { uri: uri10, title: "foo.bar", tags: [ "foo.bar" ] } );
+ yield addBookmark( { uri: uri11, title: "title", tags: [ "foo.bar" ] } );
+ yield addBookmark( { uri: uri12, title: "foo.bar", tags: [ "foo.bar" ] } );
+
+ // Test restricting searches
+ do_print("History restrict");
+ yield check_autocomplete({
+ search: "^",
+ matches: [ { uri: uri1, title: "title" },
+ { uri: uri2, title: "foo.bar" },
+ { uri: uri3, title: "title" },
+ { uri: uri4, title: "foo.bar" },
+ { uri: uri6, title: "foo.bar" },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("Star restrict");
+ yield check_autocomplete({
+ search: "*",
+ matches: [ { uri: uri5, title: "title", style: [ "bookmark" ] },
+ { uri: uri6, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri7, title: "title", style: [ "bookmark" ] },
+ { uri: uri8, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri9, title: "title", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri10, title: "foo.bar", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri11, title: "title", tags: [ "foo.bar"], style: [ "bookmark-tag" ] },
+ { uri: uri12, title: "foo.bar", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] } ]
+ });
+
+ do_print("Tag restrict");
+ yield check_autocomplete({
+ search: "+",
+ matches: [ { uri: uri9, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri10, title: "foo.bar", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri12, title: "foo.bar", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ // Test specials as any word position
+ do_print("Special as first word");
+ yield check_autocomplete({
+ search: "^ foo bar",
+ matches: [ { uri: uri2, title: "foo.bar" },
+ { uri: uri3, title: "title" },
+ { uri: uri4, title: "foo.bar" },
+ { uri: uri6, title: "foo.bar" },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("Special as middle word");
+ yield check_autocomplete({
+ search: "foo ^ bar",
+ matches: [ { uri: uri2, title: "foo.bar" },
+ { uri: uri3, title: "title" },
+ { uri: uri4, title: "foo.bar" },
+ { uri: uri6, title: "foo.bar" },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("Special as last word");
+ yield check_autocomplete({
+ search: "foo bar ^",
+ matches: [ { uri: uri2, title: "foo.bar" },
+ { uri: uri3, title: "title" },
+ { uri: uri4, title: "foo.bar" },
+ { uri: uri6, title: "foo.bar" },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ // Test restricting and matching searches with a term
+ do_print("foo ^ -> history");
+ yield check_autocomplete({
+ search: "foo ^",
+ matches: [ { uri: uri2, title: "foo.bar" },
+ { uri: uri3, title: "title" },
+ { uri: uri4, title: "foo.bar" },
+ { uri: uri6, title: "foo.bar" },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("foo | -> history (change pref)");
+ changeRestrict("history", "|");
+ yield check_autocomplete({
+ search: "foo |",
+ matches: [ { uri: uri2, title: "foo.bar" },
+ { uri: uri3, title: "title" },
+ { uri: uri4, title: "foo.bar" },
+ { uri: uri6, title: "foo.bar" },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("foo * -> is star");
+ resetRestrict("history");
+ yield check_autocomplete({
+ search: "foo *",
+ matches: [ { uri: uri6, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri7, title: "title", style: [ "bookmark" ] },
+ { uri: uri8, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri9, title: "title", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri10, title: "foo.bar", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri12, title: "foo.bar", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] } ]
+ });
+
+ do_print("foo | -> is star (change pref)");
+ changeRestrict("bookmark", "|");
+ yield check_autocomplete({
+ search: "foo |",
+ matches: [ { uri: uri6, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri7, title: "title", style: [ "bookmark" ] },
+ { uri: uri8, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri9, title: "title", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri10, title: "foo.bar", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri12, title: "foo.bar", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] } ]
+ });
+
+ do_print("foo # -> in title");
+ resetRestrict("bookmark");
+ yield check_autocomplete({
+ search: "foo #",
+ matches: [ { uri: uri2, title: "foo.bar" },
+ { uri: uri4, title: "foo.bar" },
+ { uri: uri6, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri8, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri9, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri10, title: "foo.bar", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri12, title: "foo.bar", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("foo | -> in title (change pref)");
+ changeRestrict("title", "|");
+ yield check_autocomplete({
+ search: "foo |",
+ matches: [ { uri: uri2, title: "foo.bar" },
+ { uri: uri4, title: "foo.bar" },
+ { uri: uri6, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri8, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri9, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri10, title: "foo.bar", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri12, title: "foo.bar", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("foo @ -> in url");
+ resetRestrict("title");
+ yield check_autocomplete({
+ search: "foo @",
+ matches: [ { uri: uri3, title: "title" },
+ { uri: uri4, title: "foo.bar" },
+ { uri: uri7, title: "title", style: [ "bookmark" ] },
+ { uri: uri8, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri12, title: "foo.bar", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("foo | -> in url (change pref)");
+ changeRestrict("url", "|");
+ yield check_autocomplete({
+ search: "foo |",
+ matches: [ { uri: uri3, title: "title" },
+ { uri: uri4, title: "foo.bar" },
+ { uri: uri7, title: "title", style: [ "bookmark" ] },
+ { uri: uri8, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri12, title: "foo.bar", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("foo + -> is tag");
+ resetRestrict("url");
+ yield check_autocomplete({
+ search: "foo +",
+ matches: [ { uri: uri9, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri10, title: "foo.bar", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri12, title: "foo.bar", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("foo | -> is tag (change pref)");
+ changeRestrict("tag", "|");
+ yield check_autocomplete({
+ search: "foo |",
+ matches: [ { uri: uri9, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri10, title: "foo.bar", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri12, title: "foo.bar", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("foo ~ -> is typed");
+ resetRestrict("tag");
+ yield check_autocomplete({
+ search: "foo ~",
+ matches: [ { uri: uri4, title: "foo.bar" },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("foo | -> is typed (change pref)");
+ changeRestrict("typed", "|");
+ yield check_autocomplete({
+ search: "foo |",
+ matches: [ { uri: uri4, title: "foo.bar" },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ // Test various pairs of special searches
+ do_print("foo ^ * -> history, is star");
+ resetRestrict("typed");
+ yield check_autocomplete({
+ search: "foo ^ *",
+ matches: [ { uri: uri6, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] } ]
+ });
+
+ do_print("foo ^ # -> history, in title");
+ yield check_autocomplete({
+ search: "foo ^ #",
+ matches: [ { uri: uri2, title: "foo.bar" },
+ { uri: uri4, title: "foo.bar" },
+ { uri: uri6, title: "foo.bar" },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("foo ^ @ -> history, in url");
+ yield check_autocomplete({
+ search: "foo ^ @",
+ matches: [ { uri: uri3, title: "title" },
+ { uri: uri4, title: "foo.bar" },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("foo ^ + -> history, is tag");
+ yield check_autocomplete({
+ search: "foo ^ +",
+ matches: [ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("foo ^ ~ -> history, is typed");
+ yield check_autocomplete({
+ search: "foo ^ ~",
+ matches: [ { uri: uri4, title: "foo.bar" },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("foo * # -> is star, in title");
+ yield check_autocomplete({
+ search: "foo * #",
+ matches: [ { uri: uri6, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri8, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri9, title: "title", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri10, title: "foo.bar", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri12, title: "foo.bar", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] } ]
+ });
+
+ do_print("foo * @ -> is star, in url");
+ yield check_autocomplete({
+ search: "foo * @",
+ matches: [ { uri: uri7, title: "title", style: [ "bookmark" ] },
+ { uri: uri8, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri12, title: "foo.bar", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] } ]
+ });
+
+ do_print("foo * + -> same as +");
+ yield check_autocomplete({
+ search: "foo * +",
+ matches: [ { uri: uri9, title: "title", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri10, title: "foo.bar", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri12, title: "foo.bar", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] } ]
+ });
+
+ do_print("foo * ~ -> is star, is typed");
+ yield check_autocomplete({
+ search: "foo * ~",
+ matches: [ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] } ]
+ });
+
+ do_print("foo # @ -> in title, in url");
+ yield check_autocomplete({
+ search: "foo # @",
+ matches: [ { uri: uri4, title: "foo.bar" },
+ { uri: uri8, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri12, title: "foo.bar", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("foo # + -> in title, is tag");
+ yield check_autocomplete({
+ search: "foo # +",
+ matches: [ { uri: uri9, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri10, title: "foo.bar", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri12, title: "foo.bar", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("foo # ~ -> in title, is typed");
+ yield check_autocomplete({
+ search: "foo # ~",
+ matches: [ { uri: uri4, title: "foo.bar" },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("foo @ + -> in url, is tag");
+ yield check_autocomplete({
+ search: "foo @ +",
+ matches: [ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] },
+ { uri: uri12, title: "foo.bar", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("foo @ ~ -> in url, is typed");
+ yield check_autocomplete({
+ search: "foo @ ~",
+ matches: [ { uri: uri4, title: "foo.bar" },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ do_print("foo + ~ -> is tag, is typed");
+ yield check_autocomplete({
+ search: "foo + ~",
+ matches: [ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "tag" ] } ]
+ });
+
+ // Disable autoFill for the next tests, see test_autoFill_default_behavior.js
+ // for specific tests.
+ Services.prefs.setBoolPref("browser.urlbar.autoFill", false);
+
+ // Test default usage by setting certain browser.urlbar.suggest.* prefs
+ do_print("foo -> default history");
+ setSuggestPrefsToFalse();
+ Services.prefs.setBoolPref("browser.urlbar.suggest.history", true);
+ yield check_autocomplete({
+ search: "foo",
+ matches: [ { uri: uri2, title: "foo.bar" },
+ { uri: uri3, title: "title" },
+ { uri: uri4, title: "foo.bar" },
+ { uri: uri6, title: "foo.bar" },
+ { uri: uri11, title: "title", tags: ["foo.bar"], style: [ "tag" ] } ]
+ });
+
+ do_print("foo -> default history, is star");
+ setSuggestPrefsToFalse();
+ Services.prefs.setBoolPref("browser.urlbar.suggest.history", true);
+ Services.prefs.setBoolPref("browser.urlbar.suggest.bookmark", true);
+ yield check_autocomplete({
+ search: "foo",
+ matches: [ { uri: uri2, title: "foo.bar" },
+ { uri: uri3, title: "title" },
+ { uri: uri4, title: "foo.bar" },
+ { uri: uri6, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri7, title: "title", style: [ "bookmark" ] },
+ { uri: uri8, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri9, title: "title", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri10, title: "foo.bar", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri11, title: "title", tags: [ "foo.bar"], style: [ "bookmark-tag" ] },
+ { uri: uri12, title: "foo.bar", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] } ]
+ });
+
+ do_print("foo -> default history, is star, is typed");
+ setSuggestPrefsToFalse();
+ Services.prefs.setBoolPref("browser.urlbar.suggest.history", true);
+ Services.prefs.setBoolPref("browser.urlbar.suggest.history.onlyTyped", true);
+ Services.prefs.setBoolPref("browser.urlbar.suggest.bookmark", true);
+ yield check_autocomplete({
+ search: "foo",
+ matches: [ { uri: uri4, title: "foo.bar" },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] } ]
+ });
+
+ do_print("foo -> is star");
+ setSuggestPrefsToFalse();
+ Services.prefs.setBoolPref("browser.urlbar.suggest.history", false);
+ Services.prefs.setBoolPref("browser.urlbar.suggest.bookmark", true);
+ yield check_autocomplete({
+ search: "foo",
+ matches: [ { uri: uri6, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri7, title: "title", style: [ "bookmark" ] },
+ { uri: uri8, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri9, title: "title", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri10, title: "foo.bar", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri12, title: "foo.bar", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] } ]
+ });
+
+ do_print("foo -> is star, is typed");
+ setSuggestPrefsToFalse();
+ // only typed should be ignored
+ Services.prefs.setBoolPref("browser.urlbar.suggest.history.onlyTyped", true);
+ Services.prefs.setBoolPref("browser.urlbar.suggest.bookmark", true);
+ yield check_autocomplete({
+ search: "foo",
+ matches: [ { uri: uri6, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri7, title: "title", style: [ "bookmark" ] },
+ { uri: uri8, title: "foo.bar", style: [ "bookmark" ] },
+ { uri: uri9, title: "title", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri10, title: "foo.bar", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri11, title: "title", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] },
+ { uri: uri12, title: "foo.bar", tags: [ "foo.bar" ], style: [ "bookmark-tag" ] } ]
+ });
+
+ yield cleanup();
+});