page_selection_test.unitjs revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
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(['../testing/chromevox_unittest_base.js']);
7
8/**
9 * Test fixture.
10 * @constructor
11 * @extends {ChromeVoxUnitTestBase}
12 */
13function CvoxPageSelectionUnitTest() {}
14
15CvoxPageSelectionUnitTest.prototype = {
16  __proto__: ChromeVoxUnitTestBase.prototype,
17
18  /** @override */
19  closureModuleDeps: [
20    'cvox.CursorSelection',
21    'cvox.PageSelection',
22  ],
23
24  /** @override */
25  setUp: function() {
26    this.loadDoc(function() {/*!
27      <p id='p1'>The quick</p>
28      <a id='a1' href='#'>brown fox</a>
29      <h1 id='h1'>jumped over</h1>
30    */});
31    this.pSel = cvox.CursorSelection.fromNode($('p1'));
32    this.pSel.start.index = 0;
33    this.pSel.end.index = 1;
34    this.aSel = cvox.CursorSelection.fromNode($('a1'));
35    this.aSel.start.index = 0;
36    this.aSel.end.index = 1;
37    this.hSel = cvox.CursorSelection.fromNode($('h1'));
38    this.hSel.start.index = 0;
39    this.hSel.end.index = 1;
40  },
41
42  /**
43   * Asserts a selection.
44   * @param {string} str The expected contents of selection.
45   * @private
46   */
47  assertSelection_: function(str) {
48    assertEquals(str, window.getSelection().toString());
49  }
50};
51
52TEST_F('CvoxPageSelectionUnitTest', 'BasicExtend', function() {
53  var pageSel = new cvox.PageSelection(this.pSel);
54  pageSel.extend(this.hSel);
55  this.assertSelection_('The quick\n\nbrown fox\njumped over');
56  this.hSel.end.node = this.hSel.end.node.firstChild;
57  this.hSel.end.index = 6;
58  pageSel.extend(this.hSel);
59  this.assertSelection_('The quick\n\nbrown fox\njumped');
60});
61
62
63/** Tests a reverse extension. */
64TEST_F('CvoxPageSelectionUnitTest', 'ReverseExtend', function() {
65  var pageSel = new cvox.PageSelection(this.pSel);
66  this.assertSelection_('The quick');
67  pageSel.extend(this.hSel);
68  this.assertSelection_('The quick\n\nbrown fox\njumped over');
69  pageSel.extend(this.aSel.setReversed(true));
70  this.assertSelection_('The quick\n\nbrown fox');
71  this.pSel.setReversed(true);
72  pageSel.extend(this.pSel);
73  this.assertSelection_('The quick');
74  this.pSel.start.node = this.pSel.start.node.firstChild;
75  this.pSel.start.index = 3;
76  pageSel.extend(this.pSel);
77  this.assertSelection_('The');
78});
79
80
81/** Tests all possible configurations of PageSelection's and extending
82 * CursorSelection's.
83 */
84TEST_F('CvoxPageSelectionUnitTest', 'ExtendDirections', function() {
85  // A normal page selection, with a normal extension.
86  var pageSel = new cvox.PageSelection(this.aSel);
87  assertTrue(pageSel.extend(this.hSel));
88
89  // A normal page selection, with a reversed extension.
90  assertTrue(pageSel.extend(this.hSel.setReversed(true)));
91
92  // A reversed page selection, with a normal cursor selection.
93  var rPageSel = new cvox.PageSelection(this.aSel.setReversed(true));
94  assertTrue(rPageSel.extend(this.pSel));
95
96  // A reversed page selection, with a reversed extension.
97  assertTrue(rPageSel.extend(this.pSel.setReversed(true)));
98});
99
100
101/** Tests degenerate extensions. */
102TEST_F('CvoxPageSelectionUnitTest', 'DegenerateExtensions', function() {
103  var pageSel = new cvox.PageSelection(this.aSel);
104
105  // A normal page selection, with a normal extension not in document order.
106  assertFalse(pageSel.extend(this.pSel));
107
108  // And, this causes a reset of page selection.
109  assertTrue(pageSel.sel_.equals(this.pSel));
110
111  // Reinitialize.
112  pageSel = new cvox.PageSelection(this.aSel.setReversed(false));
113
114  // A normal page selection, with a reversed extension not in document order.
115  assertFalse(pageSel.extend(this.pSel.setReversed(true)));
116
117  // And, again, it causes reset of page selection.
118assertTrue(pageSel.sel_.equals(this.pSel));
119
120  // Reverse page selections.
121  var rPageSel = new cvox.PageSelection(this.aSel.setReversed(true));
122
123  // A reversed page selection, with a normal extension not in document order.
124  assertFalse(rPageSel.extend(this.hSel));
125  assertTrue(rPageSel.sel_.equals(this.hSel));
126
127  // A reversed page selection, with a reversed extension not in document order.
128  rPageSel = new cvox.PageSelection(this.aSel.setReversed(true));
129  assertFalse(rPageSel.extend(this.hSel.setReversed(true)));
130  assertTrue(rPageSel.sel_.equals(this.hSel));
131
132  // And, finally, try extending to oneself in either direction.
133  pageSel = new cvox.PageSelection(this.aSel.setReversed(false));
134
135  // A normal page selection, with an extension to itself.
136  assertFalse(pageSel.extend(this.aSel.setReversed(false)));
137  assertFalse(pageSel.extend(this.aSel.setReversed(true)));
138
139  // A reversed page selection, with an extension to itself.
140  var rPageSel = new cvox.PageSelection(this.aSel.setReversed(true));
141  assertFalse(rPageSel.extend(this.aSel.setReversed(true)));
142  assertFalse(rPageSel.extend(this.aSel.setReversed(false)));
143});
144