# vim: set fileencoding=utf-8 : import unittest from node import Node, Leaf from graph import generate_graph class TestGraph(unittest.TestCase): def setUp(self): self.l0, self.l1, self.multi = Leaf(0), Leaf(1), Leaf('test') def tearDown(self): pass def test_simple_unary(self): uminus = Node('-', self.l1) g = generate_graph(uminus, Node) self.assertEqualGraphs(g, """ - │ 1 """) def test_simple_binary(self): plus = Node('+', self.l0, self.l1) g = generate_graph(plus, Node) self.assertEqualGraphs(g, """ + ╭┴╮ 0 1 """) def test_multichar_unary(self): uminus = Node('-', self.multi) g = generate_graph(uminus, Node) self.assertEqualGraphs(g, """ - │ test """) def test_multichar_binary(self): plus = Node('+', self.multi, self.l1) g = generate_graph(plus, Node) self.assertEqualGraphs(g, """ + ╭──┴╮ test 1 """) def test_ternary(self): exp = Leaf('x') inf = Leaf('o') minus_inf = Node('-', Leaf('L')) integral = Node('n', exp, minus_inf, inf) g = generate_graph(integral, Node, verbose=True) self.assertEqualGraphs(g, """ n ╭─┼─╮ x - o │ L """) def test_ternary_multichar(self): exp = Leaf('x') inf = Leaf('oo') minus_inf = Node('-', Leaf('LL')) integral = Node('int', exp, minus_inf, inf) g = generate_graph(integral, Node, verbose=True) self.assertEqualGraphs(g, """ int ╭─┼──╮ x - oo │ LL """) def strip(self, str): return str.replace('\n ', '\n')[1:-1] def assertEqualGraphs(self, g, expect): expect = self.strip(expect) if g != expect: print 'Expected:' print expect print 'Got:' print g raise AssertionError('Graph does not match expected value')