Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / resources / chromeos / chromevox / walkers / layout_line_walker_test.unitjs
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.
6 GEN_INCLUDE(['../testing/chromevox_unittest_base.js']);
7
8 /**
9  * Test fixture.
10  * @constructor
11  * @extends {ChromeVoxUnitTestBase}
12  */
13 function CvoxLayoutLineWalkerUnitTest() {}
14
15 CvoxLayoutLineWalkerUnitTest.prototype = {
16   __proto__: ChromeVoxUnitTestBase.prototype,
17
18   /** @override */
19   closureModuleDeps: [
20     'cvox.CursorSelection',
21     'cvox.LayoutLineWalker',
22     'cvox.TestMsgs',
23   ],
24
25   /** @override */
26   setUp: function() {
27     this.loadHtml(
28      '<div id="1">' +
29       '<p id="a">Demonstrating that in-line links like ' +
30         '<a id="aa" href="google.com">google</a> ' +
31         'are considered a single layout line.' +
32       '</p>' +
33       '<p id="b">' +
34         'This includes a paragraph that has a lot of text like this one. ' +
35         '<a id="bb" href="wikipedia.com">Wikipedia</a> ' +
36         'is a great example of a site that this walker becomes valuable.<br>' +
37         'Braille also benefits greatly from this type of formatting since ' +
38         'some displays can handle lots of text like 80 cell displays!' +
39       '</p>' +
40      '</div>'
41     );
42     cvox.ChromeVox.msgs = new cvox.TestMsgs();
43     this.walker = new cvox.LayoutLineWalker();
44   
45     this.a = cvox.CursorSelection.fromNode($('a'));
46     this.aa = cvox.CursorSelection.fromNode($('aa'));
47     this.b = cvox.CursorSelection.fromNode($('b'));
48     this.bb = cvox.CursorSelection.fromNode($('bb'));
49   
50     this.line1Text = 'Demonstrating that in-line links like google are' +
51         ' considered a single layout line.';
52   
53     this.line2Text = 'This includes a paragraph that has a lot of text' +
54         ' like this one. Wikipedia is a great example of a site that this' +
55         ' walker becomes valuable.';
56   
57     this.line3Text =
58         'Braille also benefits greatly from this type of formatting since ' +
59         'some displays can handle lots of text like 80 cell displays!';
60   
61     this.line1Description =
62         [{'context': '', 'text': 'Demonstrating that in-line links like',
63           'userValue': '', 'annotation': '', 'earcons': [], 'personality': null,
64           'hint': '', 'category': null},
65          {'context': '', 'text': 'google', 'userValue': '', 'annotation': 'Link',
66           'earcons': [cvox.AbstractEarcons.LINK], 'personality': null,
67           hint: '', 'category': null},
68          {'context': '', 'text': 'are considered a single layout line.',
69           'userValue': '', 'annotation': '', 'earcons': [], 'personality': null,
70           'hint': '', 'category': null}];
71   
72     this.line2Description =
73         [{'context': '', 'text':
74           'This includes a paragraph that has a lot of text like this one.',
75           'userValue': '', 'annotation': '', 'earcons': [], 'personality': null,
76           'hint': '', 'category': null},
77          {'context': '',
78           'text': 'Wikipedia',
79           'userValue': '',
80           'annotation': 'Link',
81           'earcons': [cvox.AbstractEarcons.LINK],
82           'personality': null,
83           'hint': '', 'category': null},
84          {'context': '', 'text':
85           'is a great example of a site that this walker becomes valuable.',
86           'userValue': '',  
87           'annotation': '', 'earcons': [], 'personality': null,
88           'hint': '', 'category': null}];
89   }
90 };
91
92 TEST_F('CvoxLayoutLineWalkerUnitTest', 'Sync', function() {
93   var sel = cvox.CursorSelection.fromNode($('1'));
94   sel = this.walker.sync(sel);
95   assertEquals(this.line1Text, sel.getText());
96
97   sel = this.walker.sync(this.a);
98   assertEquals(this.line1Text, sel.getText());
99
100   sel = this.walker.sync(this.aa);
101   assertEquals(this.line1Text, sel.getText());
102
103   sel = this.walker.sync(this.b);
104   assertEquals(this.line2Text, sel.getText());
105
106   sel = this.walker.sync(this.bb);
107   assertEquals(this.line2Text, sel.getText());
108
109   // Reversed sync.
110   sel = this.walker.sync(this.a).setReversed(true);
111   assertEquals(this.line1Text, sel.getText());
112
113   sel = this.walker.sync(this.aa).setReversed(true);
114   assertEquals(this.line1Text, sel.getText());
115
116   sel = this.walker.sync(this.b).setReversed(true);
117   assertEquals(this.line2Text, sel.getText());
118
119   sel = this.walker.sync(this.bb).setReversed(true);
120   assertEquals(this.line2Text, sel.getText());
121 });
122
123 /** Tests description of valid selections. */
124 TEST_F('CvoxLayoutLineWalkerUnitTest', 'Description', function() {
125   var sel = this.walker.sync(this.a);
126   assertEqualsJSON(this.line1Description,
127                    this.walker.getDescription(sel, sel));
128
129   var sel = this.walker.sync(this.b);
130   assertEqualsJSON(this.line2Description, this.walker.getDescription(sel, sel));
131 });
132
133
134 /** Tests back/forward movement. */
135 TEST_F('CvoxLayoutLineWalkerUnitTest', 'BackForward', function() {
136   var sel = this.walker.sync(this.a);
137
138   // Beginning of second line.
139   sel = this.walker.next(sel);
140   assertEquals(Text, sel.start.node.constructor);
141   assertEquals(this.b.start.node.id, sel.start.node.parentNode.id);
142   assertEquals(null, sel.start.node.previousSibling);
143   assertEquals(this.bb.start.node.id, sel.start.node.nextSibling.id);
144   assertEquals(0, sel.start.index);
145
146   // End of second line.
147   assertEquals(Text, sel.end.node.constructor);
148   assertEquals(this.b.end.node.id, sel.end.node.parentNode.id);
149   assertEquals(HTMLBRElement, sel.end.node.nextSibling.constructor);
150   assertEquals(this.bb.start.node.id, sel.end.node.previousSibling.id);
151   assertEquals(64, sel.end.index);
152
153   // Last line.
154   var last = this.walker.next(sel);
155   assertEquals(this.line3Text, last.getText());
156
157   // Wrap.
158   assertEquals(null, this.walker.next(last));
159
160   // Reverse.
161   sel = last.setReversed(true);
162
163   // Second line.
164   sel = this.walker.next(sel);
165   assertEquals(this.line2Text, sel.getText());
166
167   // Next always returns an unreversed selection for line granularity. Reverse
168   // it to move backward.
169   sel.setReversed(true);
170
171   // First line.
172   sel = this.walker.next(sel);
173   assertEquals(this.line1Text, sel.getText());
174
175   // Wrap.
176   sel.setReversed(true);
177   sel = this.walker.next(sel);
178   assertEquals(null, sel);
179 });