def testRecursiveFunc(self):
        self.assertEqual(
            Run('''
【阶乘】(那啥)哪能组:
轧苗头:那啥比一推板?
要来赛就再会一。
再会那啥乘白相【阶乘】(那啥减一)。
组好了。

嘎讪胡:白相【阶乘】(五)。
        '''), '120\n')
 def testRunConditional(self):
     self.assertEqual(Run('轧苗头:5比2老卵?要来赛就嘎讪胡:“OK”。'), 'OK\n')
     self.assertEqual(Run('轧苗头:5比2老卵?要来赛就一道组特:\n' '组好了。'), '')
     self.assertEqual(
         Run('轧苗头:5比2老卵?\n'
             '要来赛就一道组特:\n'
             '    嘎讪胡:5。\n'
             '组好了。'), '5\n')
     self.assertEqual(Run('轧苗头:5比6老卵?要来赛就嘎讪胡:“OK”。\n'
                          '勿来赛就嘎讪胡:“不OK”。'), '不OK\n')
     self.assertEqual(
         Run('轧苗头:5比6老卵?\n'
             '要来赛就嘎讪胡:“OK”。\n'
             '勿来赛就一道组特:\n'
             '  嘎讪胡:“不OK”。\n'
             '  嘎讪胡:“还是不OK”。\n'
             '组好了。'), '不OK\n还是不OK\n')
     # Else should match the last If.
     self.assertEqual(
         Run('''
       轧苗头:2比1老卵?   # condition 1: True
       要来赛就轧苗头:2比3老卵?  # condition 2: False
           要来赛就嘎讪胡:“A”。  # for condition 2
           勿来赛就嘎讪胡:“B”。# for condition 2
       '''), 'B\n')
 def testCompound(self):
     self.assertEqual(Run('一道组特:组好了。'), '')
     self.assertEqual(Run('一道组特:嘎讪胡:1。组好了。'), '1\n')
     self.assertEqual(Run('一道组特:嘎讪胡:1。嘎讪胡:2。组好了。'), '1\n2\n')
 def testConcat(self):
     self.assertEqual(Run('嘎讪胡:“牛”、二。'), '牛2\n')
     self.assertEqual(Run('嘎讪胡:“阿庆”、665加一。'), '阿庆666\n')
 def testIntegerLiteral(self):
     self.assertEqual(Run('嘎讪胡:零。'), '0\n')
     self.assertEqual(Run('嘎讪胡:一。'), '1\n')
     self.assertEqual(Run('嘎讪胡:二。'), '2\n')
     self.assertEqual(Run('嘎讪胡:两。'), '2\n')
     self.assertEqual(Run('嘎讪胡:良。'), '2\n')
     self.assertEqual(Run('嘎讪胡:三。'), '3\n')
     self.assertEqual(Run('嘎讪胡:赛。'), '3\n')
     self.assertEqual(Run('嘎讪胡:四。'), '4\n')
     self.assertEqual(Run('嘎讪胡:五。'), '5\n')
     self.assertEqual(Run('嘎讪胡:六。'), '6\n')
     self.assertEqual(Run('嘎讪胡:七。'), '7\n')
     self.assertEqual(Run('嘎讪胡:八。'), '8\n')
     self.assertEqual(Run('嘎讪胡:九。'), '9\n')
     self.assertEqual(Run('嘎讪胡:十。'), '10\n')
 def testDelete(self):
     self.assertEqual(Run('阿庆是则赤佬。阿庆毛估估是二。色特阿庆!嘎讪胡:阿庆。'), '脑子瓦特了\n')
 def testRunHelloWorld(self):
     self.assertEqual(Run('嘎讪胡:“申花老卵!”。'), '申花老卵!\n')
 def testFuncCallWithParam(self):
     self.assertEqual(Run('【加一】(那啥)哪能组:嘎讪胡:那啥加一。组好了。\n'
                          '白相【加一】(五)。'), '6\n')
 def testLoop(self):
     self.assertEqual(Run('阿德从1到3搞七捻三:嘎讪胡:阿德。搞好了。'), '1\n2\n3\n')
 def testDecrements(self):
     self.assertEqual(Run('阿德是则赤佬。阿德毛估估是二。阿德混腔势。嘎讪胡:阿德。'), '1\n')
     self.assertEqual(Run('阿德是则赤佬。阿德毛估估是三。阿德混五趟。嘎讪胡:阿德。'), '-2\n')
 def testIncrements(self):
     self.assertEqual(Run('阿德是则赤佬。阿德毛估估是二。阿德扎台型。嘎讪胡:阿德。'), '3\n')
     self.assertEqual(Run('阿德是则赤佬。阿德毛估估是三。阿德扎五趟。嘎讪胡:阿德。'), '8\n')
 def testVarAssignmentFromVar(self):
     self.assertEqual(
         Run('阿德是则赤佬。\n阿庆是则赤佬。\n'
             '阿德毛估估是250。\n阿庆毛估估是阿德。\n嘎讪胡:阿庆。'), '250\n')
 def testVarAssignment(self):
     self.assertEqual(Run('阿德是则赤佬。\n阿德毛估估是250。\n嘎讪胡:阿德。'), '250\n')
 def testVarDecl(self):
     self.assertEqual(Run('阿德是则赤佬。'), '')
 def testRunHelloWorld2(self):
     self.assertEqual(Run('嘎讪胡:“上港老卵!”。'), '上港老卵!\n')
 def testLoopWithNoStatement(self):
     self.assertEqual(Run('阿德从1到2搞七捻三:搞好了。'), '')
 def testRunFunc(self):
     self.assertEqual(Run('埋汰哪能组:嘎讪胡:“侬是小瘪三”。组好了。'), '')
     self.assertEqual(Run('埋汰哪能组:嘎讪胡:“侬是小瘪三”。组好了。白相埋汰。'), '侬是小瘪三\n')
 def testLoopWithMultipleStatements(self):
     self.assertEqual(Run('阿德从1到2搞七捻三:嘎讪胡:阿德。嘎讪胡:阿德加一。搞好了。'),
                      '1\n2\n2\n3\n')
 def testFuncWithReturnValue(self):
     self.assertEqual(Run('【加一】(那啥)哪能组:再会那啥加一。组好了。\n'
                          '嘎讪胡:白相【加一】(二)。'), '3\n')
 def testPrintBool(self):
     self.assertEqual(Run('阿庆是则赤佬。嘎讪胡:阿庆。嘎讪胡:阿庆脑子瓦特了。'), '脑子瓦特了\n对额\n')
     self.assertEqual(Run('嘎讪胡:五比二老卵。'), '对额\n')
     self.assertEqual(Run('嘎讪胡:五比二老卵、五比二推板、一帮2一色一样、1帮二伐大一样。'), '对额勿对勿对对额\n')
 def testNormalizingBang(self):
     self.assertEqual(Run('【加一】(那啥)哪能组:嘎讪胡:那啥加一!组好了!\n'
                          '白相【加一】(五)!'), '6\n')
 def testRunEmptyProgram(self):
     self.assertEqual(Run(''), '')