| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| GEN_INCLUDE(['../select_to_speak/select_to_speak_e2e_test_base.js']); |
| |
| /** |
| * Test fixture for sentence_utils.js. |
| */ |
| SelectToSpeakSentenceUtilsUnitTest = class extends SelectToSpeakE2ETest { |
| /** @override */ |
| async setUpDeferred() { |
| await super.setUpDeferred(); |
| await importModule('SentenceUtils', '/common/sentence_utils.js'); |
| } |
| }; |
| |
| AX_TEST_F( |
| 'SelectToSpeakSentenceUtilsUnitTest', 'getNextSentenceStart', function() { |
| // The text of the test node group is "Hello. New. World." |
| const nodeGroup = getTestNodeGroupWithOneNode(); |
| assertEquals( |
| 7, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 0 /* startCharIndex */, |
| constants.Dir.FORWARD /* direction */)); |
| assertEquals( |
| 7, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 6 /* startCharIndex */, |
| constants.Dir.FORWARD /* direction */)); |
| assertEquals( |
| 12, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 7 /* startCharIndex */, |
| constants.Dir.FORWARD /* direction */)); |
| assertEquals( |
| null, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 12 /* startCharIndex */, |
| constants.Dir.FORWARD /* direction */)); |
| assertEquals( |
| null, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 13 /* startCharIndex */, |
| constants.Dir.FORWARD /* direction */)); |
| }); |
| |
| AX_TEST_F( |
| 'SelectToSpeakSentenceUtilsUnitTest', 'getPrevSentenceStart', function() { |
| // The text of the test node group is "Hello. New. World." |
| const nodeGroup = getTestNodeGroupWithOneNode(); |
| |
| assertEquals( |
| null, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 0 /* startCharIndex */, |
| constants.Dir.BACKWARD /* direction */)); |
| assertEquals( |
| 0, |
| SentenceUtils.getSentenceStart( |
| nodeGroup, 6 /* startCharIndex */, |
| constants.Dir.BACKWARD /* direction */)); |
| assertEquals( |
| 0, |
| SentenceUtils.getSentenceStart( |
| nodeGroup, 7 /* startCharIndex */, |
| constants.Dir.BACKWARD /* direction */)); |
| assertEquals( |
| 7, |
| SentenceUtils.getSentenceStart( |
| nodeGroup, 12 /* startCharIndex */, |
| constants.Dir.BACKWARD /* direction */)); |
| assertEquals( |
| 12, |
| SentenceUtils.getSentenceStart( |
| nodeGroup, 13 /* startCharIndex */, |
| constants.Dir.BACKWARD /* direction */)); |
| }); |
| |
| AX_TEST_F( |
| 'SelectToSpeakSentenceUtilsUnitTest', 'getNextSentenceStartMultiNodes', |
| function() { |
| // The text of the test node group is "Hello. New. Beautiful. World." The |
| // char indexes of four sentence starts are 0, 7, 12, 23. |
| const nodeGroup = getTestNodeGroupWithMultiNodes(); |
| |
| assertEquals( |
| 7, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 0 /* startCharIndex */, |
| constants.Dir.FORWARD /* direction */)); |
| assertEquals( |
| 7, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 6 /* startCharIndex */, |
| constants.Dir.FORWARD /* direction */)); |
| assertEquals( |
| 12, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 7 /* startCharIndex */, |
| constants.Dir.FORWARD /* direction */)); |
| assertEquals( |
| 23, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 12 /* startCharIndex */, |
| constants.Dir.FORWARD /* direction */)); |
| assertEquals( |
| null, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 23 /* startCharIndex */, |
| constants.Dir.FORWARD /* direction */)); |
| }); |
| |
| AX_TEST_F( |
| 'SelectToSpeakSentenceUtilsUnitTest', 'getPrevSentenceStartMultiNodes', |
| function() { |
| // The text of the test node group is "Hello. New. Beautiful. World." The |
| // char indexes of four sentence starts are 0, 7, 12, 23. |
| const nodeGroup = getTestNodeGroupWithMultiNodes(); |
| |
| assertEquals( |
| null, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 0 /* startCharIndex */, |
| constants.Dir.BACKWARD /* direction */)); |
| assertEquals( |
| 0, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 6 /* startCharIndex */, |
| constants.Dir.BACKWARD /* direction */)); |
| assertEquals( |
| 0, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 7 /* startCharIndex */, |
| constants.Dir.BACKWARD /* direction */)); |
| assertEquals( |
| 7, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 12 /* startCharIndex */, |
| constants.Dir.BACKWARD /* direction */)); |
| assertEquals( |
| 12, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 23 /* startCharIndex */, |
| constants.Dir.BACKWARD /* direction */)); |
| }); |
| |
| AX_TEST_F( |
| 'SelectToSpeakSentenceUtilsUnitTest', |
| 'getNextSentenceStartSentenceSpanningAcrossMultiNodes', function() { |
| // The text of the test node group is "Hello world. New world." The |
| // char indexes of four sentence starts are 0, 13. |
| const nodeGroup = getTestNodeGroupWithSentenceSpanningAcrossMultiNodes(); |
| |
| assertEquals( |
| 13, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 0 /* startCharIndex */, |
| constants.Dir.FORWARD /* direction */)); |
| assertEquals( |
| 13, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 6 /* startCharIndex */, |
| constants.Dir.FORWARD /* direction */)); |
| assertEquals( |
| 13, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 11 /* startCharIndex */, |
| constants.Dir.FORWARD /* direction */)); |
| assertEquals( |
| null, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 13 /* startCharIndex */, |
| constants.Dir.FORWARD /* direction */)); |
| }); |
| |
| AX_TEST_F( |
| 'SelectToSpeakSentenceUtilsUnitTest', |
| 'getPrevSentenceStartSentenceSpanningAcrossMultiNodes', function() { |
| // The text of the test node group is "Hello world. New world." The |
| // char indexes of four sentence starts are 0, 13. |
| const nodeGroup = getTestNodeGroupWithSentenceSpanningAcrossMultiNodes(); |
| |
| assertEquals( |
| null, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 0 /* startCharIndex */, |
| constants.Dir.BACKWARD /* direction */)); |
| assertEquals( |
| 0, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 6 /* startCharIndex */, |
| constants.Dir.BACKWARD /* direction */)); |
| assertEquals( |
| 0, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 11 /* startCharIndex */, |
| constants.Dir.BACKWARD /* direction */)); |
| assertEquals( |
| 0, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 13 /* startCharIndex */, |
| constants.Dir.BACKWARD /* direction */)); |
| assertEquals( |
| 13, |
| SentenceUtils.getSentenceStart( |
| nodeGroup /* nodeGroup */, 15 /* startCharIndex */, |
| constants.Dir.BACKWARD /* direction */)); |
| }); |
| |
| AX_TEST_F('SelectToSpeakSentenceUtilsUnitTest', 'isSentenceStart', function() { |
| // The text of the test node group is "Hello. New. World." |
| const nodeGroup = getTestNodeGroupWithOneNode(); |
| |
| assertEquals( |
| true, |
| SentenceUtils.isSentenceStart( |
| nodeGroup /* nodeGroup */, 0 /* startCharIndex */)); |
| assertEquals( |
| false, |
| SentenceUtils.isSentenceStart( |
| nodeGroup /* nodeGroup */, 3 /* startCharIndex */)); |
| assertEquals( |
| true, |
| SentenceUtils.isSentenceStart( |
| nodeGroup /* nodeGroup */, 7 /* startCharIndex */)); |
| assertEquals( |
| false, |
| SentenceUtils.isSentenceStart( |
| nodeGroup /* nodeGroup */, 11 /* startCharIndex */)); |
| assertEquals( |
| true, |
| SentenceUtils.isSentenceStart( |
| nodeGroup /* nodeGroup */, 12 /* startCharIndex */)); |
| }); |
| |
| AX_TEST_F( |
| 'SelectToSpeakSentenceUtilsUnitTest', 'isSentenceStartMultiNodes', |
| function() { |
| // The text of the test node group is "Hello. New. Beautiful. World." The |
| // char indexes of four sentence starts are 0, 7, 12, 23. |
| const nodeGroup = getTestNodeGroupWithMultiNodes(); |
| |
| assertEquals( |
| true, |
| SentenceUtils.isSentenceStart( |
| nodeGroup /* nodeGroup */, 0 /* startCharIndex */)); |
| assertEquals( |
| false, |
| SentenceUtils.isSentenceStart( |
| nodeGroup /* nodeGroup */, 3 /* startCharIndex */)); |
| assertEquals( |
| true, |
| SentenceUtils.isSentenceStart( |
| nodeGroup /* nodeGroup */, 7 /* startCharIndex */)); |
| assertEquals( |
| false, |
| SentenceUtils.isSentenceStart( |
| nodeGroup /* nodeGroup */, 11 /* startCharIndex */)); |
| assertEquals( |
| true, |
| SentenceUtils.isSentenceStart( |
| nodeGroup /* nodeGroup */, 12 /* startCharIndex */)); |
| assertEquals( |
| false, |
| SentenceUtils.isSentenceStart( |
| nodeGroup /* nodeGroup */, 15 /* startCharIndex */)); |
| assertEquals( |
| true, |
| SentenceUtils.isSentenceStart( |
| nodeGroup /* nodeGroup */, 23 /* startCharIndex */)); |
| }); |
| function getTestNodeGroupWithOneNode() { |
| const staticText = { |
| sentenceStarts: [0, 7, 12], |
| name: 'Hello. New. World.', |
| role: 'staticText', |
| }; |
| const node = {node: staticText, startChar: 0}; |
| return {nodes: [node], text: 'Hello. New. World.'}; |
| } |
| |
| function getTestNodeGroupWithMultiNodes() { |
| const staticText1 = { |
| name: 'Hello. New. ', |
| role: 'staticText', |
| sentenceStarts: [0, 7], |
| }; |
| const node1 = {node: staticText1, startChar: 0}; |
| |
| const staticText2 = { |
| name: 'Beautiful. World.', |
| role: 'staticText', |
| sentenceStarts: [0, 11], |
| }; |
| const node2 = {node: staticText2, startChar: 12}; |
| |
| return {nodes: [node1, node2], text: 'Hello. New. Beautiful. World.'}; |
| } |
| |
| function getTestNodeGroupWithSentenceSpanningAcrossMultiNodes() { |
| const staticText1 = {name: 'Hello', role: 'staticText', sentenceStarts: [0]}; |
| const node1 = {node: staticText1, startChar: 0}; |
| |
| const staticText2 = { |
| name: ' world. New', |
| role: 'staticText', |
| sentenceStarts: [8], |
| }; |
| const node2 = {node: staticText2, startChar: 5}; |
| |
| const staticText3 = {name: ' world.', role: 'staticText', sentenceStarts: []}; |
| const node3 = {node: staticText3, startChar: 16}; |
| |
| return {nodes: [node1, node2, node3], text: 'Hello world. New world.'}; |
| } |