1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Include test fixture.
6GEN_INCLUDE(['walker_unittest_base.js']);
7
8/**
9 * Test fixture.
10 * @constructor
11 * @extends {CvoxWalkerTestBase}
12 */
13function CvoxCharacterWalkerUnitTest() {}
14
15CvoxCharacterWalkerUnitTest.prototype = {
16  __proto__: CvoxWalkerUnitTestBase.prototype,
17
18  /** @override */
19  closureModuleDeps: CvoxWalkerUnitTestBase.prototype.closureModuleDeps.concat(
20      'cvox.CharacterWalker'),
21
22  /** @override */
23  newWalker: function() {
24    return new cvox.CharacterWalker();
25  },
26
27  /**
28   * Set up for simple tests so we don't have to repeat.
29   * @private
30   */
31  setUpSimpleHtml_: function() {
32    this.loadDoc(function() {/*!
33      <div id="a"><p id="b">Th</p><p id="c">e quick</p></div>
34     */});
35  }
36};
37
38CvoxWalkerUnitTestBase.addCommonTests('CvoxCharacterWalkerUnitTest');
39
40TEST_F('CvoxCharacterWalkerUnitTest', 'SimpleForwardSync', function() {
41  this.setUpSimpleHtml_();
42
43  // invalid selection
44  var sel = cvox.CursorSelection.fromNode($('a'));
45  var ret = this.go(sel, 'sync', {
46    selText: 'Th',
47    selParentNodeId: 'b',
48    selStartIndex: 0,
49    selEndIndex: 1,
50    selReversed: false
51  });
52
53  // valid selection
54  var ret2 = this.walker.sync(ret);
55  assertTrue(ret2.equals(ret));
56});
57
58TEST_F('CvoxCharacterWalkerUnitTest', 'testSimpleReversedSync', function() {
59  this.setUpSimpleHtml_();
60
61  // invalid selection
62  var sel = cvox.CursorSelection.fromNode($('a'));
63  sel.setReversed(true);
64  var ret = this.go(sel, 'sync', {
65    selText: 'e quick',
66    selParentNodeId: 'c',
67    selStartIndex: 0,
68    selEndIndex: 1,
69    selReversed: true
70  });
71
72  // valid selection
73  var ret2 = this.walker.sync(ret);
74  assertTrue(ret2.equals(ret));
75});
76
77TEST_F('CvoxCharacterWalkerUnitTest', 'testSimpleForwardNext', function() {
78  this.setUpSimpleHtml_();
79
80  var sel = cvox.CursorSelection.fromNode($('a'));
81  sel = this.walker.sync(sel);
82  var ret = this.go(sel, 'next', {
83    selText: 'Th',
84    selParentNodeId: 'b',
85    selStartIndex: 1,
86    selEndIndex: 2,
87    selReversed: false
88  });
89});
90
91TEST_F('CvoxCharacterWalkerUnitTest', 'testSimpleReversedNext', function() {
92  this.setUpSimpleHtml_();
93
94  var sel = cvox.CursorSelection.fromNode($('a'));
95  sel = this.walker.sync(sel.setReversed(true));
96  var ret = this.go(sel, 'next', {
97    selText: 'Th',
98    selParentNodeId: 'b',
99    selStartIndex: 1,
100    selEndIndex: 2,
101    selReversed: true
102  });
103});
104
105/**
106 * Tests for how spaces should be navigated character by character.
107 */
108TEST_F('CvoxCharacterWalkerUnitTest', 'testSpaces', function() {
109  this.loadDoc(function() {/*!
110    <div id="foo">a <i>b</i> c<input type="text" value="asdf"/></div>
111  */});
112  var node = $('foo');
113  var sel = cvox.CursorSelection.fromNode(node);
114  var ret = this.go(sel, 'next', {descText: 'a'});
115  ret = this.go(ret, 'next', {descText: ' '});
116  ret = this.go(ret, 'next', {descText: 'b'});
117});
118