class NodeParserTests(unittest.TestCase): def setUp(self): self.mock = mox.Mox() self.rpnMock = self.mock.CreateMock(ReversePolishNotationConverter) self.parser = NodeParser(self.rpnMock) def parse_expression(self, exp, rpn_exp): self.rpnMock.transform(exp).AndReturn(rpn_exp) self.mock.ReplayAll() tree = self.parser.parse(exp) return tree def test_parses_a_plus(self): tree = self.parse_expression("1+2", "1 2 +") self.assertEqual(1, tree.left.evaluate()) self.assertEqual(2, tree.right.evaluate()) self.assertEqual(3, tree.evaluate()) def test_parses_a_minus(self): tree = self.parse_expression("1-2", "1 2 -") self.assertEqual(1, tree.left.evaluate()) self.assertEqual(2, tree.right.evaluate()) self.assertEqual(-1, tree.evaluate()) def test_parses_a_multiplication(self): tree = self.parse_expression("2*3", "2 3 *") self.assertEqual(2, tree.left.evaluate()) self.assertEqual(3, tree.right.evaluate()) self.assertEqual(6, tree.evaluate()) def test_parses_a_division(self): tree = self.parse_expression("1/2", "1 2 /") self.assertEqual(1, tree.left.evaluate()) self.assertEqual(2, tree.right.evaluate()) self.assertEqual(0.5, tree.evaluate()) def test_parses_complex_no_brackets(self): tree = self.parse_expression("1+2/8", "1 2 8 / +") self.assertEqual(1, tree.left.evaluate()) self.assertEqual(2, tree.right.left.evaluate()) self.assertEqual(8, tree.right.right.evaluate()) self.assertEqual(1.25, tree.evaluate()) def test_parses_complex_with_brackets(self): tree = self.parse_expression("(2+7)*4", "2 7 + 4 *") self.assertEqual(2, tree.left.left.evaluate()) self.assertEqual(7, tree.left.right.evaluate()) self.assertEqual(4, tree.right.evaluate()) self.assertEqual(36, tree.evaluate())
def setUp(self): self.mock = mox.Mox() self.rpnMock = self.mock.CreateMock(ReversePolishNotationConverter) self.parser = NodeParser(self.rpnMock)