Skip to content
Browse files

Merge pull request #721 from smblott-github/smartcase

Use smartcase for vomnibar queries.
  • Loading branch information...
2 parents b7ac8b1 + 049cf43 commit 6eca29f7a6b10b923bedd10fedb1cf4a032b0392 @int3 int3 committed
Showing with 25 additions and 8 deletions.
  1. +2 −1 background_scripts/completion.coffee
  2. +23 −7 tests/unit_tests/completion_test.coffee
View
3 background_scripts/completion.coffee
@@ -355,7 +355,8 @@ RegexpCache =
# Avoid cost of constructing new strings if prefix/suffix are empty (which is expected to be a common case).
regexpString = prefix + regexpString if prefix
regexpString = regexpString + suffix if suffix
- @cache[regexpString] ||= new RegExp(regexpString, "i")
+ # Smartcase: Regexp is case insensitive, unless `string` contains a capital letter (testing `string`, not `regexpString`).
+ @cache[regexpString] ||= new RegExp regexpString, (if /[A-Z]/.test string then "" else "i")
# Provides cached access to Chrome's history. As the user browses to new pages, we add those pages to this
# history cache.
View
30 tests/unit_tests/completion_test.coffee
@@ -258,24 +258,40 @@ context "suggestions",
context "RankingUtils",
should "do a case insensitive match", ->
- assert.isTrue RankingUtils.matches(["aRi"], "MARIO", "MARio")
+ assert.isTrue RankingUtils.matches(["ari"], "maRio")
should "do a case insensitive match on full term", ->
- assert.isTrue RankingUtils.matches(["MaRiO"], "MARIO", "MARio")
+ assert.isTrue RankingUtils.matches(["mario"], "MARio")
- should "do a case insensitive match on more than just two terms", ->
- assert.isTrue RankingUtils.matches(["aRi"], "DOES_NOT_MATCH", "DOES_NOT_MATCH_EITHER", "MARio")
+ should "do a case insensitive match on several terms", ->
+ assert.isTrue RankingUtils.matches(["ari"], "DOES_NOT_MATCH", "DOES_NOT_MATCH_EITHER", "MARio")
+
+ should "do a smartcase match (positive)", ->
+ assert.isTrue RankingUtils.matches(["Mar"], "Mario")
+
+ should "do a smartcase match (negative)", ->
+ assert.isFalse RankingUtils.matches(["Mar"], "mario")
+
+ should "do a match with regexp meta-characters (positive)", ->
+ assert.isTrue RankingUtils.matches(["ma.io"], "ma.io")
+
+ should "do a match with regexp meta-characters (negative)", ->
+ assert.isFalse RankingUtils.matches(["ma.io"], "mario")
+
+ should "do a smartcase match on full term", ->
+ assert.isTrue RankingUtils.matches(["Mario"], "Mario")
+ assert.isFalse RankingUtils.matches(["Mario"], "mario")
should "do case insensitive word relevancy (matching)", ->
- assert.isTrue RankingUtils.wordRelevancy(["aRi"], "MARIO", "MARio") > 0.0
+ assert.isTrue RankingUtils.wordRelevancy(["ari"], "MARIO", "MARio") > 0.0
should "do case insensitive word relevancy (not matching)", ->
assert.isTrue RankingUtils.wordRelevancy(["DOES_NOT_MATCH"], "MARIO", "MARio") == 0.0
- should "every term must match at least one thing (matching)", ->
+ should "every query term must match at least one thing (matching)", ->
assert.isTrue RankingUtils.matches(["cat", "dog"], "catapult", "hound dog")
- should "every term must match at least one thing (not matching)", ->
+ should "every query term must match at least one thing (not matching)", ->
assert.isTrue not RankingUtils.matches(["cat", "dog", "wolf"], "catapult", "hound dog")
context "RegexpCache",

0 comments on commit 6eca29f

Please sign in to comment.
Something went wrong with that request. Please try again.