def testBreakElement(self, MockConversionDB): # Set up mock database db = conversion_db.ConversionDB() def mockCmdConversion(cmd): if cmd == 'a': return [BreakElement(time='3ms')] else: return None def mockEnvConversion(env): if env == 'b': return [ BreakElement(strength='strong'), ContentElement(), BreakElement(strength='weak') ] else: return None def mockEnvDefinition(env): if env == 'b': return { 'a': [BreakElement(time='5ms', strength='x-weak')], 'mathmode': False } else: return None db.getCmdConversion = Mock(side_effect=mockCmdConversion) db.getEnvConversion = Mock(side_effect=mockEnvConversion) db.getEnvDefinition = Mock(side_effect=mockEnvDefinition) # Set up TexSoup parse tree to be parsed doc = TexSoup.TexSoup(r'\a\begin{b}\a\end{b}') # Parse on the given db and tree parser = ConversionParser(db) ssmlParseTree = parser.parse(doc, test=True) # Check resulting tree structure self.assertIsInstance(ssmlParseTree, RootElement) self.assertEqual(len(ssmlParseTree.children), 4) self.assertIsInstance(ssmlParseTree.children[0], BreakElement) self.assertEqual(ssmlParseTree.children[0].getTime(), '3ms') self.assertEqual(ssmlParseTree.children[0].getStrength(), None) self.assertIsInstance(ssmlParseTree.children[1], BreakElement) self.assertEqual(ssmlParseTree.children[1].getTime(), None) self.assertEqual(ssmlParseTree.children[1].getStrength(), 'strong') self.assertIsInstance(ssmlParseTree.children[2], BreakElement) self.assertEqual(ssmlParseTree.children[2].getTime(), '5ms') self.assertEqual(ssmlParseTree.children[2].getStrength(), 'x-weak') self.assertIsInstance(ssmlParseTree.children[3], BreakElement) self.assertEqual(ssmlParseTree.children[3].getTime(), None) self.assertEqual(ssmlParseTree.children[3].getStrength(), 'weak')
def testEnvironments(self, MockConversionDB): # Set up mock database db = conversion_db.ConversionDB() def mockCmdConversion(cmd): if cmd == 'a': a = [TextElement('text1')] return a else: return None def mockEnvConversion(env): if env == 'a': a = [TextElement('text2')] return a if env == 'b': b = [ContentElement()] return b else: return None def mockEnvDefinition(env): if env == 'b': return {'a': [TextElement('text3')], 'mathmode': False} else: return None db.getCmdConversion = Mock(side_effect=mockCmdConversion) db.getEnvConversion = Mock(side_effect=mockEnvConversion) db.getEnvDefinition = Mock(side_effect=mockEnvDefinition) # Set up TexSoup parse tree to be parsed doc = TexSoup.TexSoup( r'\begin{a}\a\end{a}\begin{c}\begin{a}\a\end{a}\end{c}\begin{c}\begin{b}\a\end{b}\end{c}' ) # Parse on the given db and tree parser = ConversionParser(db) ssmlParseTree = parser.parse(doc, test=True) self.assertIsInstance(ssmlParseTree, RootElement) self.assertEqual(len(ssmlParseTree.children), 0) self.assertEqual( ssmlParseTree.getHeadText().strip().replace(" ", " "), 'text2 text2 text3')
def testTextElement(self, MockConversionDB): # Set up mock database db = conversion_db.ConversionDB() def mockCmdConversion(cmd): if cmd == 'a': return [TextElement('text 1')] else: return None def mockEnvConversion(env): if env == 'b': return [TextElement('text 2'), ContentElement()] else: return None def mockEnvDefinition(env): if env == 'b': return {'a': [TextElement('text 3')], 'type': None} else: return None db.getCmdConversion = Mock(side_effect=mockCmdConversion) db.getEnvConversion = Mock(side_effect=mockEnvConversion) db.getEnvDefinition = Mock(side_effect=mockEnvDefinition) # Set up TexSoup parse tree to be parsed doc = TexSoup.TexSoup(r'\a\begin{b}\a\end{b}') # Parse on the given db and tree parser = ConversionParser(db) ssmlParseTree = parser.parse(doc, test=True) print("TESTING SSSML PARSE " + str(ssmlParseTree)) # Check resulting tree structure self.assertIsInstance(ssmlParseTree, RootElement) self.assertEqual(len(ssmlParseTree.children), 0) self.assertEqual( ssmlParseTree.getHeadText().strip().replace(" ", " "), 'text 1 text 2 text 3')
def testProsodyElementMaxDura(self, MockConversionDB): # Set up mock database db = conversion_db.ConversionDB() def mockCmdConversion(cmd): if cmd == 'a': a = [ProsodyElement(duration='2000s'), ArgElement(1)] a[0].insertChild(0, ProsodyElement(duration='1000s')) a[0].children[0].insertChild(0, ArgElement(2)) return a else: return None def mockEnvConversion(env): if env == 'b': b = [ ContentElement(), ProsodyElement(duration='3000ms'), ArgElement(2), ProsodyElement(duration='5000ms') ] b[1].insertChild(0, ContentElement()) b[1].insertChild(0, ArgElement(1)) b[3].insertChild(0, ProsodyElement(duration='9000s')) return b else: return None def mockEnvDefinition(env): return None db.getCmdConversion = Mock(side_effect=mockCmdConversion) db.getEnvConversion = Mock(side_effect=mockEnvConversion) db.getEnvDefinition = Mock(side_effect=mockEnvDefinition) # Set up TexSoup parse tree to be parsed doc = TexSoup.TexSoup(r'\a{1}{2}\begin{b}{3}{4}\a{5}{6}\end{b}') # Parse on the given db and tree parser = ConversionParser(db) ssmlParseTree = parser.parse(doc, test=True) self.assertIsInstance(ssmlParseTree, RootElement) self.assertEqual(len(ssmlParseTree.children), 4) self.assertIsInstance(ssmlParseTree.children[0], ProsodyElement) self.assertEqual(ssmlParseTree.children[0].getHeadText(), '') self.assertEqual(ssmlParseTree.children[0].getTailText(), '1') self.assertEqual(ssmlParseTree.children[0].getDuration(), '2000000ms') self.assertEqual(len(ssmlParseTree.children[0].children), 1) self.assertIsInstance(ssmlParseTree.children[0].children[0], ProsodyElement) self.assertEqual(ssmlParseTree.children[0].children[0].getHeadText(), '2') self.assertEqual(ssmlParseTree.children[0].children[0].getTailText(), '') self.assertEqual(ssmlParseTree.children[0].children[0].getDuration(), '1000000ms') self.assertIsInstance(ssmlParseTree.children[1], ProsodyElement) self.assertEqual(ssmlParseTree.children[1].getHeadText(), '') self.assertEqual(ssmlParseTree.children[1].getTailText(), '5') self.assertEqual(ssmlParseTree.children[1].getDuration(), '2000000ms') self.assertEqual(len(ssmlParseTree.children[1].children), 1) self.assertIsInstance(ssmlParseTree.children[1].children[0], ProsodyElement) self.assertEqual(ssmlParseTree.children[1].children[0].getHeadText(), '6') self.assertEqual(ssmlParseTree.children[1].children[0].getTailText(), '') self.assertEqual(ssmlParseTree.children[1].children[0].getDuration(), '1000000ms') self.assertIsInstance(ssmlParseTree.children[2], ProsodyElement) self.assertEqual(ssmlParseTree.children[2].getHeadText(), '3') self.assertEqual(ssmlParseTree.children[2].getTailText(), '4') self.assertEqual(ssmlParseTree.children[2].getDuration(), '3000ms') self.assertEqual(len(ssmlParseTree.children[2].children), 1) self.assertIsInstance(ssmlParseTree.children[2].children[0], ProsodyElement) self.assertEqual(ssmlParseTree.children[2].children[0].getHeadText(), '') self.assertEqual(ssmlParseTree.children[2].children[0].getTailText(), '5') self.assertEqual(ssmlParseTree.children[2].children[0].getDuration(), '2000000ms') self.assertEqual(len(ssmlParseTree.children[2].children), 1) self.assertIsInstance( ssmlParseTree.children[2].children[0].children[0], ProsodyElement) self.assertEqual( ssmlParseTree.children[2].children[0].children[0].getHeadText(), '6') self.assertEqual( ssmlParseTree.children[2].children[0].children[0].getTailText(), '') self.assertEqual( ssmlParseTree.children[2].children[0].children[0].getDuration(), '1000000ms') self.assertIsInstance(ssmlParseTree.children[3], ProsodyElement) self.assertEqual(ssmlParseTree.children[3].getHeadText(), '') self.assertEqual(ssmlParseTree.children[3].getTailText(), '') self.assertEqual(ssmlParseTree.children[3].getDuration(), '5000ms') self.assertEqual(len(ssmlParseTree.children[3].children), 1) self.assertIsInstance(ssmlParseTree.children[3].children[0], ProsodyElement) self.assertEqual(ssmlParseTree.children[3].children[0].getHeadText(), '') self.assertEqual(ssmlParseTree.children[3].children[0].getTailText(), '') self.assertEqual(ssmlParseTree.children[3].children[0].getDuration(), '9000000ms')
def testArgElement(self, MockConversionDB): # Set up mock database db = conversion_db.ConversionDB() def mockCmdConversion(cmd): if cmd == 'a': a = [ArgElement(2), ArgElement('1', argType='bracket')] return a elif cmd == 'd': d = [BreakElement()] return d else: return None def mockEnvConversion(env): if env == 'b': b = [ ArgElement(1, 'bracket'), ArgElement(4, argType='brace'), ContentElement() ] return b else: return None def mockEnvDefinition(env): if env == 'b': return {'a': [ArgElement(1), ArgElement('2', argType='bracket')], \ 'c': [ArgElement(3)], 'mathmode': False} else: return None db.getCmdConversion = Mock(side_effect=mockCmdConversion) db.getEnvConversion = Mock(side_effect=mockEnvConversion) db.getEnvDefinition = Mock(side_effect=mockEnvDefinition) # Set up TexSoup parse tree to be parsed doc = TexSoup.TexSoup( r'\a{1}{\a{2}[3]{\d}}[\d]\begin{b}{4}{5}[6]{7}{\a[8]{9}{10}[\d]}\d\a[11]{12}[13]\d\c{14}{15}{\d 16}\d\end{b}' ) # Should be <speak> <break/> 3 <break/> 6 9 <break/> <break/> 12 13 <break/> <break/> 16 <break/> <speak/> # ^ Cmd ^ Env say ^ Env contents parser = ConversionParser(db) ssmlParseTree = parser.parse(doc, test=True) self.assertIsInstance(ssmlParseTree, RootElement) self.assertEqual(ssmlParseTree.getHeadText(), '') self.assertEqual(len(ssmlParseTree.children), 7) self.assertIsInstance(ssmlParseTree.children[0], BreakElement) self.assertEqual(ssmlParseTree.children[0].getTailText(), '3') self.assertIsInstance(ssmlParseTree.children[1], BreakElement) self.assertEqual(ssmlParseTree.children[1].getTailText(), '6 9') self.assertIsInstance(ssmlParseTree.children[2], BreakElement) self.assertEqual(ssmlParseTree.children[2].getTailText(), '') self.assertIsInstance(ssmlParseTree.children[3], BreakElement) self.assertEqual(ssmlParseTree.children[3].getTailText(), '12 13') self.assertIsInstance(ssmlParseTree.children[4], BreakElement) self.assertEqual(ssmlParseTree.children[4].getTailText(), '') self.assertIsInstance(ssmlParseTree.children[5], BreakElement) self.assertEqual(ssmlParseTree.children[5].getTailText(), ' 16') self.assertIsInstance(ssmlParseTree.children[6], BreakElement) self.assertEqual(ssmlParseTree.children[6].getTailText(), '')
def testEmphasisElement(self, MockConversionDB): # Set up mock database db = conversion_db.ConversionDB() def mockCmdConversion(cmd): if cmd == 'a': a = [EmphasisElement(level='strong'), ArgElement(1)] a[0].insertChild(0, EmphasisElement(level='reduced')) a[0].children[0].insertChild(0, ArgElement(2)) return a else: return None def mockEnvConversion(env): if env == 'b': b = [ ContentElement(), EmphasisElement(level='moderate'), ArgElement(2), EmphasisElement(level='none') ] b[1].insertChild(0, ContentElement()) b[1].insertChild(0, ArgElement(1)) b[3].insertChild(0, EmphasisElement(level='strong')) return b else: return None def mockEnvDefinition(env): return None db.getCmdConversion = Mock(side_effect=mockCmdConversion) db.getEnvConversion = Mock(side_effect=mockEnvConversion) db.getEnvDefinition = Mock(side_effect=mockEnvDefinition) # Set up TexSoup parse tree to be parsed doc = TexSoup.TexSoup(r'\a{1}{2}\begin{b}{3}{4}\a{5}{6}\end{b}') # Parse on the given db and tree parser = ConversionParser(db) ssmlParseTree = parser.parse(doc, test=True) self.assertIsInstance(ssmlParseTree, RootElement) self.assertEqual(len(ssmlParseTree.children), 4) self.assertIsInstance(ssmlParseTree.children[0], EmphasisElement) self.assertEqual(ssmlParseTree.children[0].getHeadText(), '') self.assertEqual(ssmlParseTree.children[0].getTailText(), '1') self.assertEqual(ssmlParseTree.children[0].getLevel(), 'strong') self.assertEqual(len(ssmlParseTree.children[0].children), 1) self.assertIsInstance(ssmlParseTree.children[0].children[0], EmphasisElement) self.assertEqual(ssmlParseTree.children[0].children[0].getHeadText(), '2') self.assertEqual(ssmlParseTree.children[0].children[0].getTailText(), '') self.assertEqual(ssmlParseTree.children[0].children[0].getLevel(), 'reduced') self.assertIsInstance(ssmlParseTree.children[1], EmphasisElement) self.assertEqual(ssmlParseTree.children[1].getHeadText(), '') self.assertEqual(ssmlParseTree.children[1].getTailText(), '5') self.assertEqual(ssmlParseTree.children[1].getLevel(), 'strong') self.assertEqual(len(ssmlParseTree.children[1].children), 1) self.assertIsInstance(ssmlParseTree.children[1].children[0], EmphasisElement) self.assertEqual(ssmlParseTree.children[1].children[0].getHeadText(), '6') self.assertEqual(ssmlParseTree.children[1].children[0].getTailText(), '') self.assertEqual(ssmlParseTree.children[1].children[0].getLevel(), 'reduced') self.assertIsInstance(ssmlParseTree.children[2], EmphasisElement) self.assertEqual(ssmlParseTree.children[2].getHeadText(), '3') self.assertEqual(ssmlParseTree.children[2].getTailText(), '4') self.assertEqual(ssmlParseTree.children[2].getLevel(), 'moderate') self.assertEqual(len(ssmlParseTree.children[2].children), 1) self.assertIsInstance(ssmlParseTree.children[2].children[0], EmphasisElement) self.assertEqual(ssmlParseTree.children[2].children[0].getHeadText(), '') self.assertEqual(ssmlParseTree.children[2].children[0].getTailText(), '5') self.assertEqual(ssmlParseTree.children[2].children[0].getLevel(), 'strong') self.assertEqual(len(ssmlParseTree.children[2].children), 1) self.assertIsInstance( ssmlParseTree.children[2].children[0].children[0], EmphasisElement) self.assertEqual( ssmlParseTree.children[2].children[0].children[0].getHeadText(), '6') self.assertEqual( ssmlParseTree.children[2].children[0].children[0].getTailText(), '') self.assertEqual( ssmlParseTree.children[2].children[0].children[0].getLevel(), 'reduced') self.assertIsInstance(ssmlParseTree.children[3], EmphasisElement) self.assertEqual(ssmlParseTree.children[3].getHeadText(), '') self.assertEqual(ssmlParseTree.children[3].getTailText(), '') self.assertEqual(ssmlParseTree.children[3].getLevel(), 'none') self.assertEqual(len(ssmlParseTree.children[3].children), 1) self.assertIsInstance(ssmlParseTree.children[3].children[0], EmphasisElement) self.assertEqual(ssmlParseTree.children[3].children[0].getHeadText(), '') self.assertEqual(ssmlParseTree.children[3].children[0].getTailText(), '') self.assertEqual(ssmlParseTree.children[3].children[0].getLevel(), 'strong')
def testProsodyElementMaxDura(self, MockConversionDB): # Set up mock database db = conversion_db.ConversionDB()