Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(742)

Side by Side Diff: chrome/browser/resources/chromeos/chromevox/braille/pan_strategy_test.unitjs

Issue 2496823002: Implement word wrapping and panning in multiline Braille. (Closed)
Patch Set: Wrote tests, fixed bugs :) Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 GEN_INCLUDE(['../testing/chromevox_unittest_base.js']); 5 GEN_INCLUDE(['../testing/chromevox_unittest_base.js']);
6 6
7 /** 7 /**
8 * Test fixture. 8 * Test fixture.
9 * @constructor 9 * @constructor
10 * @extends {ChromeVoxUnitTestBase} 10 * @extends {ChromeVoxUnitTestBase}
11 */ 11 */
12 function CvoxPanStrategyUnitTest() {} 12 function CvoxPanStrategyUnitTest() {}
13 13
14 CvoxPanStrategyUnitTest.prototype = { 14 CvoxPanStrategyUnitTest.prototype = {
15 __proto__: ChromeVoxUnitTestBase.prototype, 15 __proto__: ChromeVoxUnitTestBase.prototype,
16 16
17 /** @override */ 17 /** @override */
18 closureModuleDeps: [ 18 closureModuleDeps: [
19 'cvox.PanStrategy', 19 'cvox.PanStrategy',
20 ], 20 ],
21
22 assertArrayBuffersEquals(arrayBufA, arrayBufB) {
23 var view1 = new Uint8Array(arrayBufA);
24 var view2 = new Uint8Array(arrayBufB);
25 assertEquals(JSON.stringify(view1), JSON.stringify(view2));
26 },
27 assertArraysEquals(arrayA, arrayB) {
28 assertEquals(JSON.stringify(arrayA), JSON.stringify(arrayB));
David Tseng 2016/11/30 22:11:54 Add these to testing/assert_additions.js Also, I
ultimatedbz 2016/12/07 23:40:43 Done.
29 },
21 }; 30 };
22 31
23 /** 32 /**
24 * @param {string} content String representing the content with spaces 33 * @param {string} content String representing the content with spaces
25 * representing blank cells and any other character representing 34 * representing blank cells and any other character representing
26 * arbitrary non-blank cells. 35 * arbitrary non-blank cells.
27 */ 36 */
28 function createArrayBuffer(content) { 37 function createArrayBuffer(content) {
29 var result = new ArrayBuffer(content.length); 38 var result = new ArrayBuffer(content.length);
30 var view = new Uint8Array(result); 39 var view = new Uint8Array(result);
31 for (var i = 0; i < content.length; ++i) { 40 for (var i = 0; i < content.length; ++i) {
32 view[i] = (content[i] != ' ' ? 1 : 0); 41 view[i] = (content[i] != ' ' ? 1 : 0);
33 } 42 }
34 return result; 43 return result;
35 } 44 }
36 45
37 TEST_F('CvoxPanStrategyUnitTest', 'FixedPanning', function() { 46 TEST_F('CvoxPanStrategyUnitTest', 'FixedPanning', function() {
38 var panner = new cvox.FixedPanStrategy(); 47 var panner = new cvox.PanStrategy();
48 panner.setPanStrategy(false);
39 49
40 panner.setDisplaySize(0); 50 panner.setDisplaySize(0, 0);
41 panner.setContent(createArrayBuffer(''), 0); 51 panner.setContent('', createArrayBuffer(''), [], 0);
42 assertEqualsJSON({start: 0, end: 0}, panner.viewPort); 52 assertEqualsJSON({firstRow: 0, lastRow: 0}, panner.viewPort);
43 assertFalse(panner.previous()); 53 assertFalse(panner.previous());
44 assertFalse(panner.next()); 54 assertFalse(panner.next());
45 55
46 // 25 cells with a blank cell in the first 10 characters. 56 // 25 cells with a blank cell in the first 10 characters.
47 var content = createArrayBuffer('01234567 9012345678901234'); 57 var translatedContent = createArrayBuffer('01234567 9012345678901234');
48 panner.setContent(content, 0); 58 var brailleToText = [0, 0, 0, 0, 0, 0,];
David Tseng 2016/11/30 22:11:55 Unused, remove.
ultimatedbz 2016/12/01 05:12:15 Done.
49 assertEqualsJSON({start: 0, end: 0}, panner.viewPort); 59 panner.setContent('a', translatedContent, [], 0);
David Tseng 2016/11/30 22:11:54 If 'a' is unused, pass it as 'unused' to not set u
ultimatedbz 2016/12/01 05:12:15 Done.
60 assertEqualsJSON({firstRow: 0, lastRow: 0}, panner.viewPort);
50 assertFalse(panner.next()); 61 assertFalse(panner.next());
51 assertFalse(panner.previous()); 62 assertFalse(panner.previous());
52 63
53 panner.setDisplaySize(10); 64 panner.setDisplaySize(1, 10);
54 assertEqualsJSON({start: 0, end: 10}, panner.viewPort); 65 assertEqualsJSON({firstRow: 0, lastRow: 0}, panner.viewPort);
David Tseng 2016/11/30 22:11:54 Assert column size is 10 to keep the spirit of the
ultimatedbz 2016/12/01 05:12:15 Done.
55 assertTrue(panner.next()); 66 assertTrue(panner.next());
56 assertEqualsJSON({start: 10, end: 20}, panner.viewPort); 67 assertEqualsJSON({firstRow: 1, lastRow: 1}, panner.viewPort);
57 assertTrue(panner.next()); 68 assertTrue(panner.next());
58 assertEqualsJSON({start: 20, end: 25}, panner.viewPort); 69 assertEqualsJSON({firstRow: 2, lastRow: 2}, panner.viewPort);
59 assertFalse(panner.next()); 70 assertFalse(panner.next());
60 assertEqualsJSON({start: 20, end: 25}, panner.viewPort); 71 assertEqualsJSON({firstRow: 2, lastRow: 2}, panner.viewPort);
61 assertTrue(panner.previous()); 72 assertTrue(panner.previous());
62 assertEqualsJSON({start: 10, end: 20}, panner.viewPort); 73 assertEqualsJSON({firstRow: 1, lastRow: 1}, panner.viewPort);
63 assertTrue(panner.previous()); 74 assertTrue(panner.previous());
64 assertEqualsJSON({start: 0, end: 10}, panner.viewPort); 75 assertEqualsJSON({firstRow: 0, lastRow: 0}, panner.viewPort);
65 76
66 panner.setContent(content, 19); 77 panner.setContent('a', translatedContent, [], 19);
67 assertEqualsJSON({start: 10, end: 20}, panner.viewPort); 78 assertEqualsJSON({firstRow: 1, lastRow: 1}, panner.viewPort);
68 79
69 panner.setContent(content, 20); 80 panner.setContent('a', translatedContent, [], 20);
70 assertEqualsJSON({start: 20, end: 25}, panner.viewPort); 81 assertEqualsJSON({firstRow: 2, lastRow: 2}, panner.viewPort);
71 82
72 panner.setDisplaySize(8); 83 panner.setDisplaySize(1, 8);
73 assertEqualsJSON({start: 16, end: 24}, panner.viewPort); 84 assertEqualsJSON({firstRow: 0, lastRow: 0}, panner.viewPort);
74 85
75 panner.viewPort_ = {start: 2, end: 10}; 86 // Test Multi-line Panning.
87 panner.setDisplaySize(2, 10);
88 assertEqualsJSON({firstRow: 0, lastRow: 1}, panner.viewPort);
89 assertTrue(panner.next());
90 assertEqualsJSON({firstRow: 2, lastRow: 2}, panner.viewPort);
91 assertFalse(panner.next());
92 assertEqualsJSON({firstRow: 2, lastRow: 2}, panner.viewPort);
76 assertTrue(panner.previous()); 93 assertTrue(panner.previous());
77 assertEqualsJSON({start: 0, end: 8}, panner.viewPort); 94 assertEqualsJSON({firstRow: 0, lastRow: 1}, panner.viewPort);
95 assertFalse(panner.previous());
96 assertEqualsJSON({firstRow: 0, lastRow: 1}, panner.viewPort);
97
David Tseng 2016/11/30 22:11:55 nit: remove
ultimatedbz 2016/12/01 05:12:15 Done.
78 }); 98 });
79 99
80 TEST_F('CvoxPanStrategyUnitTest', 'WrappedPanning', function() { 100 TEST_F('CvoxPanStrategyUnitTest', 'WrappedPanning', function() {
81 var panner = new cvox.WrappingPanStrategy(); 101 var panner = new cvox.PanStrategy();
102 panner.setPanStrategy(true);
82 103
83 // 30 cells with blank cells at positions 8, 22 and 26. 104 // 30 cells with blank cells at positions 8, 22 and 26.
84 var content = createArrayBuffer('01234567 9012345678901 345 789'); 105 var content = createArrayBuffer('01234567 9012345678901 345 789');
85 panner.setContent(content, 0); 106 panner.setContent('a', content, [], 0);
86 assertEqualsJSON({start: 0, end: 0}, panner.viewPort); 107 assertEqualsJSON({firstRow: 0, lastRow: 0}, panner.viewPort);
87 assertFalse(panner.next()); 108 assertFalse(panner.next());
88 assertFalse(panner.previous()); 109 assertFalse(panner.previous());
89 110
90 panner.setDisplaySize(10); 111 panner.setDisplaySize(1, 10);
91 assertEqualsJSON({start: 0, end: 9}, panner.viewPort); 112 assertEqualsJSON({firstRow: 0, lastRow: 0}, panner.viewPort);
92 assertTrue(panner.next()); 113 assertTrue(panner.next());
93 assertEqualsJSON({start: 9, end: 19}, panner.viewPort); 114 assertEqualsJSON({firstRow: 1, lastRow: 1}, panner.viewPort);
94 assertTrue(panner.next()); 115 assertTrue(panner.next());
95 assertEqualsJSON({start: 19, end: 27}, panner.viewPort); 116 assertEqualsJSON({firstRow: 2, lastRow: 2}, panner.viewPort);
96 assertTrue(panner.next()); 117 assertTrue(panner.next());
97 assertEqualsJSON({start: 27, end: 30}, panner.viewPort); 118 assertEqualsJSON({firstRow: 3, lastRow: 3}, panner.viewPort);
98 assertFalse(panner.next()); 119 assertFalse(panner.next());
99 assertEqualsJSON({start: 27, end: 30}, panner.viewPort); 120 assertEqualsJSON({firstRow: 3, lastRow: 3}, panner.viewPort);
100 assertTrue(panner.previous()); 121 assertTrue(panner.previous());
101 assertEqualsJSON({start: 23, end: 27}, panner.viewPort); 122 assertEqualsJSON({firstRow: 2, lastRow: 2}, panner.viewPort);
102 assertTrue(panner.previous()); 123 assertTrue(panner.previous());
103 assertEqualsJSON({start: 13, end: 23}, panner.viewPort); 124 assertEqualsJSON({firstRow: 1, lastRow: 1}, panner.viewPort);
104 assertTrue(panner.previous()); 125 assertTrue(panner.previous());
105 assertEqualsJSON({start: 9, end: 13}, panner.viewPort); 126 assertEqualsJSON({firstRow: 0, lastRow: 0}, panner.viewPort);
David Tseng 2016/11/30 22:21:52 I would also test the individual slices and assert
ultimatedbz 2016/12/01 05:12:15 The current function 'createArrayBuffer()' takes i
David Tseng 2016/12/07 16:46:36 Ok. The only concern was that we're just testing
ultimatedbz 2016/12/07 23:39:25 Acknowledged.
127 assertFalse(panner.previous());
128
129 panner.setContent('a', content, [], 21);
130 assertEqualsJSON({firstRow: 2, lastRow: 2}, panner.viewPort);
131
132 panner.setContent('a', content, [], 30);
133 assertEqualsJSON({firstRow: 3, lastRow: 3}, panner.viewPort);
134
135 panner.setDisplaySize(1, 8);
136 assertEqualsJSON({firstRow: 0, lastRow: 0}, panner.viewPort);
137
138 // Test Multi-line Panning.
139 panner.setDisplaySize(2, 10);
140 assertEqualsJSON({firstRow: 0, lastRow: 1}, panner.viewPort);
141 assertTrue(panner.next());
142 assertEqualsJSON({firstRow: 2, lastRow: 3}, panner.viewPort);
143 assertFalse(panner.next());
144 assertEqualsJSON({firstRow: 2, lastRow: 3}, panner.viewPort);
106 assertTrue(panner.previous()); 145 assertTrue(panner.previous());
107 assertEqualsJSON({start: 0, end: 9}, panner.viewPort); 146 assertEqualsJSON({firstRow: 0, lastRow: 1}, panner.viewPort);
147 assertFalse(panner.previous());
148 assertEqualsJSON({firstRow: 0, lastRow: 1}, panner.viewPort);
149 });
108 150
109 panner.setContent(content, 21); 151 TEST_F('CvoxPanStrategyUnitTest', 'FixedSetContent', function() {
110 assertEqualsJSON({start: 19, end: 27}, panner.viewPort); 152 var panner = new cvox.PanStrategy();
153 panner.setPanStrategy(false);
111 154
112 panner.setContent(content, 30); 155 var textContent = "ABCDE FGHI"
113 assertEqualsJSON({start: 27, end: 30}, panner.viewPort); 156 var translatedContent = createArrayBuffer('01234 6789');
157 var mapping = [0,1,2,3,4,5,6,7,8,9];
158 panner.setDisplaySize(1, 5);
159 panner.setContent(textContent, translatedContent,
160 mapping, 0);
161 var expectedBufferValue = translatedContent;
162 this.assertArrayBuffersEquals(expectedBufferValue, panner.fixedBuffer_);
163 var expectedMappingValue = mapping;
164 this.assertArraysEquals(expectedMappingValue, panner.brailleToText);
165 });
114 166
115 panner.setDisplaySize(8); 167 TEST_F('CvoxPanStrategyUnitTest', 'WrappedSetContent', function() {
116 assertEqualsJSON({start: 23, end: 30}, panner.viewPort); 168 var panner = new cvox.PanStrategy();
169 panner.setPanStrategy(true);
117 170
118 panner.viewPort_ = {start: 2, end: 10}; 171 // When first word is bigger than column size. (Don't wrap word)
119 assertTrue(panner.previous()); 172 var textContent = "ABCDE"
120 assertEqualsJSON({start: 0, end: 8}, panner.viewPort); 173 var translatedContent = createArrayBuffer('01234');
174 var mapping = [0,1,2,3,4];
175 panner.setDisplaySize(1, 4);
176 panner.setContent(textContent, translatedContent,
177 mapping, 0);
178 var expectedBufferValue = translatedContent;
179 this.assertArrayBuffersEquals(expectedBufferValue, panner.wrappedBuffer_);
180 var expectedMappingValue = mapping;
181 this.assertArraysEquals(expectedMappingValue, panner.brailleToText);
182
183 // When first word is equal to column size.
184 // (We expect space to be removed on next line)
185 textContent = "ABCDE FGHI"
186 translatedContent = createArrayBuffer('01234 6789');
187 var mapping = [0,1,2,3,4,5,6,7,8,9];
188 panner.setDisplaySize(1, 5);
189 panner.setContent(textContent, translatedContent,
190 mapping, 0);
191 expectedBufferValue = createArrayBuffer('012346789');
192 this.assertArrayBuffersEquals(expectedBufferValue, panner.wrappedBuffer_);
193 expectedMappingValue = [0,1,2,3,4,6,7,8,9];
194 this.assertArraysEquals(expectedMappingValue, panner.brailleToText);
195
196 // When first word is equal to column size + 1. (Space stays)
197 panner.setDisplaySize(1, 6);
198 expectedBufferValue = createArrayBuffer('01234 6789');
199 this.assertArrayBuffersEquals(expectedBufferValue, panner.wrappedBuffer_);
200 expectedMappingValue = mapping;
201 this.assertArraysEquals(expectedMappingValue, panner.brailleToText);
202
203 // When first word is smaller than column size but second word is too big
204 // to fit the same line. (Pad that line, move second word to next line)
205 panner.setDisplaySize(1, 7);
206 expectedBufferValue = createArrayBuffer('01234 6789');
207 this.assertArrayBuffersEquals(expectedBufferValue, panner.wrappedBuffer_);
208 expectedMappingValue = [0,1,2,3,4,5,5,6,7,8,9];
209 this.assertArraysEquals(expectedMappingValue, panner.brailleToText);
210
211 // Test all excess spaces are removed.
212 panner.setDisplaySize(1, 6);
213 textContent = "ABCDEF GHI"
214 translatedContent = createArrayBuffer('012345 789');
215 mapping = [0,1,2,3,4,5,6,7,7,7,7,7,8,9,10];
216 panner.setContent(textContent, translatedContent,
217 mapping, 0);
218 expectedBufferValue = createArrayBuffer('012345789');
219 this.assertArrayBuffersEquals(expectedBufferValue, panner.wrappedBuffer_);
220 expectedMappingValue = [0,1,2,3,4,5,7,8,9];
221 this.assertArraysEquals(expectedMappingValue, panner.brailleToText);
David Tseng 2016/11/30 22:21:52 I would also add unit tests to exercise the new pu
ultimatedbz 2016/12/01 05:12:15 I believe that by testing for the current slices a
David Tseng 2016/12/07 16:46:36 Sgtm For organizational purposes, one test per fu
121 }); 222 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698