Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2174)

Unified Diff: dashboard/dashboard/static/fuzzy_autocomplete_test.html

Issue 2692243003: [dashboard] Use fuzzy autocomplete in autocomplete-box (Closed)
Patch Set: fix 2nd new presubmit Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « dashboard/dashboard/static/fuzzy_autocomplete.html ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: dashboard/dashboard/static/fuzzy_autocomplete_test.html
diff --git a/dashboard/dashboard/static/fuzzy_autocomplete_test.html b/dashboard/dashboard/static/fuzzy_autocomplete_test.html
new file mode 100644
index 0000000000000000000000000000000000000000..d21e5ef889859c7b8785053ba4848e75d8225696
--- /dev/null
+++ b/dashboard/dashboard/static/fuzzy_autocomplete_test.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<!--
+Copyright 2017 The Chromium Authors. All rights reserved.
+Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file.
+-->
+
+<link rel="import" href="/dashboard/static/fuzzy_autocomplete.html">
+
+<link rel="import" href="/tracing/core/test_utils.html">
+
+<script>
+'use strict';
+
+tr.b.unittest.testSuite(function() {
+ test('it_matches_text_when_it_contains_the_query', function() {
+ var list = [
+ ];
+ var selector = new fuzzyAutocomplete.FuzzySelect('abc');
+ assert.isTrue(selector.match('abc'));
+ assert.isTrue(selector.match('ZZZabcZZZ'));
+ assert.isFalse(selector.match('ab'));
+ assert.isFalse(selector.match('ZZZaZZZbZZZc'));
+ });
+
+ test('it_matches_text_when_each_query_part_appears_in_the_text', function() {
+ var list = [
+ ];
+ var selector = new fuzzyAutocomplete.FuzzySelect('abc def');
+ assert.isTrue(selector.match('abcdef'));
+ assert.isTrue(selector.match('abc def'));
+ assert.isTrue(selector.match('ZZZabcZZZdefZZZ'));
+ assert.isTrue(selector.match('defabc'));
+ assert.isFalse(selector.match('abc'));
+ assert.isFalse(selector.match('def'));
+ });
+
+ test('it_ignores_multiple_spaces', function() {
+ var selector = new fuzzyAutocomplete.FuzzySelect('a b c');
+ assert.isTrue(selector.match('abc'));
+ });
+
+ test('it_gives_lower_scores_to_earlier_matches', function() {
+ var selector = new fuzzyAutocomplete.FuzzySelect('foo');
+ assert.isTrue(selector.score('foo') < selector.score('the foo'));
+ assert.isTrue(selector.score('the foo') < selector.score('the other foo'));
+ assert.isTrue(selector.score('the other foo') < selector.score('bar'));
+ });
+
+ test('it_can_filter', function() {
+ var selector = new fuzzyAutocomplete.FuzzySelect('a');
+ assert.deepEqual(selector.filter(['a', 'ab', 'b', 'c']), ['a', 'ab']);
+ });
+
+ test('it_can_use_accessor', function() {
+ var selector = new fuzzyAutocomplete.FuzzySelect('a', item => item.key);
+ assert.isTrue(selector.match({ key: 'a' }));
+ assert.isFalse(selector.match({ key: 'b' }));
+ });
+
+ test('it_returns_full_list_for_null_query', function() {
+ var list = [
+ { name: 'Skydiving' },
+ { name: 'Snowboarding' },
+ ];
+ var autocomplete = new fuzzyAutocomplete.FuzzyAutocomplete(list);
+ assert.deepEqual(autocomplete.search(null), list);
+ });
+
+ test('it_returns_full_list_for_undefined_query', function() {
+ var list = [
+ { name: 'Skydiving' },
+ { name: 'Snowboarding' },
+ ];
+ var autocomplete = new fuzzyAutocomplete.FuzzyAutocomplete(list);
+ assert.deepEqual(autocomplete.search(), list);
+ });
+
+ test('it_returns_full_list_when_everything_matches', function() {
+ var list = [
+ { name: 'Skydiving' },
+ { name: 'Snowboarding' },
+ ];
+ var autocomplete = new fuzzyAutocomplete.FuzzyAutocomplete(list);
+ assert.deepEqual(autocomplete.search('S'), list);
+ });
+
+ test('it_returns_single_item_when_that_is_the_only_match', function() {
+ var skydiving = { name: 'Skydiving' };
+ var snowboarding = { name: 'Snowboarding' };
+ var list = [skydiving, snowboarding];
+ var autocomplete = new fuzzyAutocomplete.FuzzyAutocomplete(list);
+ assert.deepEqual(autocomplete.search('Skydiving'), [skydiving]);
+ });
+
+ test('it_returns_items_which_contain_the_characters_in_order', function() {
+ var match1 = { name: '1 Hello, world!' };
+ var match2 = { name: '2 hello, world!' };
+ var noMatch1 = { name: 'hello, there!' };
+ var noMatch2 = { name: '!dlrow ,olleh' };
+ var noMatch3 = { name: 'Hello, worl!' };
+ var list = [noMatch1, match1, match2, noMatch2, noMatch3];
+ var autocomplete = new fuzzyAutocomplete.FuzzyAutocomplete(list);
+ assert.deepEqual(autocomplete.search('world'), [match1, match2]);
+ });
+
+ test('it_handles_groups_correctly', function() {
+ var list = [
+ { name: 'jobs', head: true },
+ { name: 'astronaut', group: 'jobs' },
+ { name: 'teacher', group: 'jobs' },
+ { name: 'subjects', head: true },
+ { name: 'astrophysics', group: 'subjects' },
+ { name: 'aeronautics', group: 'subjects' },
+ { name: 'astrophysicists', head: true },
+ { name: 'Neil deGrasse Tyson', group: 'astrophysicists' },
+ ];
+ var autocomplete = new fuzzyAutocomplete.FuzzyAutocomplete(list);
+ assert.deepEqual(autocomplete.search('astro'), [
+ { name: 'jobs', head: true },
+ { name: 'astronaut', group: 'jobs' },
+ { name: 'subjects', head: true },
+ { name: 'astrophysics', group: 'subjects' },
+ ]);
+ });
+
+ test('it_sorts_items', function() {
+ var list = [
+ { name: 'teacher', group: 'jobs' },
+ { name: 'jobs', head: true },
+ { name: 'astrophysicists', head: true },
+ { name: 'subjects', head: true },
+ { name: ' astro-boffin', group: 'jobs' },
+ { name: 'astronaut', group: 'jobs' },
+ { name: 'Neil deGrasse Tyson', group: 'astrophysicists' },
+ { name: 'astrophysics', group: 'subjects' },
+ { name: 'aeronautics', group: 'subjects' },
+ ];
+ var autocomplete = new fuzzyAutocomplete.FuzzyAutocomplete(list);
+ assert.deepEqual(autocomplete.search('a'), [
+ { name: 'astrophysicists', head: true },
+ { name: 'Neil deGrasse Tyson', group: 'astrophysicists' },
+ { name: 'jobs', head: true },
+ { name: 'astronaut', group: 'jobs' },
+ // astro-boffin (it's a real word) is alphabetically before astronaut but
+ // the match is later (because of the leading space) so we penalize it.
+ { name: ' astro-boffin', group: 'jobs' },
+ { name: 'teacher', group: 'jobs' },
+ { name: 'subjects', head: true },
+ { name: 'aeronautics', group: 'subjects' },
+ { name: 'astrophysics', group: 'subjects' },
+ ]);
+ });
+});
+</script>
« no previous file with comments | « dashboard/dashboard/static/fuzzy_autocomplete.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698