aboutsummaryrefslogtreecommitdiff
path: root/contexts/data/lib/closure-library/closure/goog/ui/ac/arraymatcher_test.html
blob: 1b5203dfa360bb53f0e1597f889a33319168d864 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<!DOCTYPE html>
<html>
<!--
Copyright 2008 The Closure Library Authors. All Rights Reserved.

Use of this source code is governed by the Apache License, Version 2.0.
See the COPYING file for details.
-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Closure Unit Tests - goog.ui.ac.ArrayMatcher</title>
<script src="../../base.js"></script>
<script>
  goog.require('goog.testing.jsunit');
  goog.require('goog.ui.ac.ArrayMatcher');
</script>
</head>
<body>
<script>

// TODO(arv): Add more useful tests for the similarity matching.

var ArrayMatcher = goog.ui.ac.ArrayMatcher;

function testRequestingRows() {
  var items = ['a', 'Ab', 'abc', 'ba', 'ca'];
  var am = new ArrayMatcher(items, true);

  function matcher(token, matches) {
    assertEquals('a', token);
    assertEquals('Should have three matches', 3, matches.length);
    assertEquals('a', matches[0]);
    assertEquals('Ab', matches[1]);
    assertEquals('abc', matches[2]);
  }

  am.requestMatchingRows('a', 10, matcher);
}

function testRequestingRowsMaxMatches() {
  var items = ['a', 'Ab', 'abc', 'ba', 'ca'];
  var am = new ArrayMatcher(items, true);

  function matcher(token, matches) {
    assertEquals('a', token);
    assertEquals('Should have two matches', 2, matches.length);
    assertEquals('a', matches[0]);
    assertEquals('Ab', matches[1]);
  }

  am.requestMatchingRows('a', 2, matcher);
}

function testRequestingRowsSimilarMatches() {
  // No prefix matches so use similar
  var items = ['b', 'c', 'ba', 'ca'];
  var am = new ArrayMatcher(items, false);

  function matcher(token, matches) {
    assertEquals('a', token);
    assertEquals('Should have two matches', 2, matches.length);
    assertEquals('ba', matches[0]);
    assertEquals('ca', matches[1]);
  }

  am.requestMatchingRows('a', 10, matcher);
}

function testRequestingRowsSimilarMatchesMaxMatches() {
  // No prefix matches so use similar
  var items = ['b', 'c', 'ba', 'ca'];
  var am = new ArrayMatcher(items, false);

  function matcher(token, matches) {
    assertEquals('a', token);
    assertEquals('Should have one match', 1, matches.length);
    assertEquals('ba', matches[0]);
  }

  am.requestMatchingRows('a', 1, matcher);
}

function testGetPrefixMatches() {
  var items = ['a', 'b', 'c'];
  var am = new ArrayMatcher(items, true);

  var res = am.getPrefixMatches('a', 10);
  assertEquals('Should have one match', 1, res.length);
  assertEquals('Should return \'a\'', 'a', res[0]);
}

function testGetPrefixMatchesMaxMatches() {
  var items = ['a', 'Ab', 'abc', 'ba', 'ca'];
  var am = new ArrayMatcher(items, true);

  var res = am.getPrefixMatches('a', 2);
  assertEquals('Should have two matches', 2, res.length);
  assertEquals('a', res[0]);
}

function testGetPrefixMatchesEmptyToken() {
  var items = ['a', 'b', 'c'];
  var am = new ArrayMatcher(items, true);

  var res = am.getPrefixMatches('', 10);
  assertEquals('Should have no matches', 0, res.length);
}

function testGetSimilarRows() {
  var items = ['xa', 'xb', 'xc'];
  var am = new ArrayMatcher(items, true);

  var res = am.getSimilarRows('a', 10);
  assertEquals('Should have one match', 1, res.length);
  assertEquals('xa', res[0]);
}

function testGetSimilarRowsMaxMatches() {
  var items = ['xa', 'xAa', 'xaAa'];
  var am = new ArrayMatcher(items, true);

  var res = am.getSimilarRows('a', 2);
  assertEquals('Should have two matches', 2, res.length);
  assertEquals('xa', res[0]);
  assertEquals('xAa', res[1]);
}

</script>
</body>
</html>