OLD | NEW |
(Empty) | |
| 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 }); |
OLD | NEW |