Index: chrome/browser/resources/chromeos/chromevox/braille/expanding_braille_translator_test.unitjs |
diff --git a/chrome/browser/resources/chromeos/chromevox/braille/expanding_braille_translator_test.unitjs b/chrome/browser/resources/chromeos/chromevox/braille/expanding_braille_translator_test.unitjs |
index bd598dd6e272ea382d1df8039e19f66fc60ddfe0..8b4f313789182fd479d53a612ef94d5fc5366fb4 100644 |
--- a/chrome/browser/resources/chromeos/chromevox/braille/expanding_braille_translator_test.unitjs |
+++ b/chrome/browser/resources/chromeos/chromevox/braille/expanding_braille_translator_test.unitjs |
@@ -116,28 +116,42 @@ var totalRunTranslationTests = 0; |
*/ |
function doTranslationTest(name, contracted, valueExpansion, text, |
expectedOutput) { |
- totalRunTranslationTests++; |
- var uncontractedTranslator = new FakeTranslator('u'); |
- var expandingTranslator; |
- if (contracted) { |
- var contractedTranslator = new FakeTranslator('c'); |
- expandingTranslator = new cvox.ExpandingBrailleTranslator( |
- contractedTranslator, uncontractedTranslator); |
- } else { |
- expandingTranslator = new cvox.ExpandingBrailleTranslator( |
- uncontractedTranslator); |
- } |
- var expectedMapping = []; |
- for (var i = 0; i < expectedOutput.length; ++i) { |
- expectedMapping[i] = i; |
+ try { |
+ totalRunTranslationTests++; |
+ var uncontractedTranslator = new FakeTranslator('u'); |
+ var expandingTranslator; |
+ if (contracted) { |
+ var contractedTranslator = new FakeTranslator('c'); |
+ expandingTranslator = new cvox.ExpandingBrailleTranslator( |
+ contractedTranslator, uncontractedTranslator); |
+ } else { |
+ expandingTranslator = new cvox.ExpandingBrailleTranslator( |
+ uncontractedTranslator); |
+ } |
+ var extraCellsSpan = text.getSpanInstanceOf(cvox.ExtraCellsSpan); |
+ if (extraCellsSpan) |
+ var extraCellsSpanPos = text.getSpanStart(extraCellsSpan); |
+ var expectedTextToBraille = []; |
+ var expectedBrailleToText = []; |
+ for (var i = 0, pos = 0; i < text.getLength(); ++i, ++pos) { |
+ if (i === extraCellsSpanPos) |
+ ++pos; |
+ expectedTextToBraille.push(pos); |
+ expectedBrailleToText.push(i); |
+ } |
+ if (extraCellsSpan) |
+ expectedBrailleToText.splice(extraCellsSpanPos, 0, extraCellsSpanPos); |
+ |
+ expandingTranslator.translate( |
+ text, valueExpansion, function(cells, textToBraille, brailleToText) { |
+ assertArrayBufferMatches(expectedOutput, cells, name); |
+ assertEqualsJSON(expectedTextToBraille, textToBraille, name); |
+ assertEqualsJSON(expectedBrailleToText, brailleToText, name); |
+ }); |
+ } catch (e) { |
+ console.error('Subtest ' + name + ' failed.'); |
+ throw e; |
} |
- |
- expandingTranslator.translate( |
- text, valueExpansion, function(cells, textToBraille, brailleToText) { |
- assertArrayBufferMatches(expectedOutput, cells, name); |
- assertEqualsJSON(expectedMapping, textToBraille, name); |
- assertEqualsJSON(expectedMapping, brailleToText, name); |
- }); |
}; |
/** |
@@ -149,16 +163,27 @@ function doTranslationTest(name, contracted, valueExpansion, text, |
* and contracted translators. |
* @param {cvox.ExpandingBrailleTranslation.ExpansionType} valueExpansion |
* What kind of value expansion to apply. |
- * @param {cvox.Spannable} text Input text. |
- * @param {string=} opt_expectedContractedOutput Expected output (see |
- * {@code TESTDATA}). |
+ * @param {boolean} withExtraCells Whether to insert an extra cells span |
+ * right before the selection in the input. |
*/ |
-function runTranslationTestVariants(testCase, contracted, valueExpansion) { |
+function runTranslationTestVariants(testCase, contracted, valueExpansion, |
+ withExtraCells) { |
var expType = cvox.ExpandingBrailleTranslator.ExpansionType; |
// Construct the full name. |
var fullName = contracted ? 'Contracted_' : 'Uncontracted_'; |
fullName += 'Expansion' + valueExpansion + '_'; |
+ if (withExtraCells) |
+ fullName += 'ExtraCells_'; |
fullName += testCase.name; |
+ var input = testCase.input; |
+ if (withExtraCells) { |
+ input = input.substring(0); // Shallow copy. |
+ var selectionStart = input.getSpanStart( |
+ input.getSpanInstanceOf(cvox.ValueSelectionSpan)); |
+ var extraCellsSpan = new cvox.ExtraCellsSpan(); |
+ extraCellsSpan.cells = new Uint8Array(['e'.charCodeAt(0)]).buffer; |
+ input.setSpan(extraCellsSpan, selectionStart, selectionStart); |
+ } |
// The expected output depends on the contraction mode and value expansion. |
var outputChar = contracted ? 'c' : 'u'; |
var expectedOutput; |
@@ -170,14 +195,18 @@ function runTranslationTestVariants(testCase, contracted, valueExpansion) { |
expectedOutput = |
new Array(testCase.input.getLength() + 1).join(outputChar); |
} |
- doTranslationTest(fullName, contracted, valueExpansion, testCase.input, |
+ if (withExtraCells) { |
+ expectedOutput = expectedOutput.substring(0, selectionStart) + 'e' + |
+ expectedOutput.substring(selectionStart); |
+ } |
+ doTranslationTest(fullName, contracted, valueExpansion, input, |
expectedOutput); |
// Run another test, with the value surrounded by some text. |
var surroundedText = new cvox.Spannable('Name: '); |
var surroundedExpectedOutput = |
new Array('Name: '.length + 1).join(outputChar); |
- surroundedText.append(testCase.input); |
+ surroundedText.append(input); |
surroundedExpectedOutput += expectedOutput; |
if (testCase.input.getLength() > 0) { |
surroundedText.append(' '); |
@@ -186,7 +215,7 @@ function runTranslationTestVariants(testCase, contracted, valueExpansion) { |
surroundedText.append('edtxt'); |
surroundedExpectedOutput += |
new Array('edtxt'.length + 1).join(outputChar); |
- doTranslationTest(fullName + '_Surrounded', contracted, valueExpansion, |
+ doTranslationTest(fullName + '_Surrounded', contracted, valueExpansion, |
surroundedText, surroundedExpectedOutput); |
} |
@@ -250,15 +279,23 @@ TEST_F('CvoxExpandingBrailleTranslatorUnitTest', 'successfulTranslations', |
input: createText(TEXT, 2, 9), |
contractedOutput: 'uuuuuucuuuuuu' } |
]; |
+ var TESTDATA_WITH_SELECTION = TESTDATA.filter(function(testCase) { |
+ return testCase.input.getSpanInstanceOf(cvox.ValueSelectionSpan); |
+ }); |
var expType = cvox.ExpandingBrailleTranslator.ExpansionType; |
for (var i = 0, testCase; testCase = TESTDATA[i]; ++i) { |
- runTranslationTestVariants(testCase, false, expType.SELECTION); |
- runTranslationTestVariants(testCase, true, expType.NONE); |
- runTranslationTestVariants(testCase, true, expType.SELECTION); |
- runTranslationTestVariants(testCase, true, expType.ALL); |
+ runTranslationTestVariants(testCase, false, expType.SELECTION, false); |
+ runTranslationTestVariants(testCase, true, expType.NONE, false); |
+ runTranslationTestVariants(testCase, true, expType.SELECTION, false); |
+ runTranslationTestVariants(testCase, true, expType.ALL, false); |
} |
+ for (var i = 0, testCase; testCase = TESTDATA_WITH_SELECTION[i]; ++i) |
+ runTranslationTestVariants(testCase, true, expType.SELECTION, true); |
+ |
// Make sure that the logic above runs the tests, adjust when adding more |
- // tests. |
- assertEquals(64, totalRunTranslationTests); |
+ // test variants. |
+ var totalExpectedTranslationTests = |
+ 2 * (TESTDATA.length * 4 + TESTDATA_WITH_SELECTION.length); |
+ assertEquals(totalExpectedTranslationTests, totalRunTranslationTests); |
}); |