def test_association_end(self): """ Test association end parsing """ f = """ class c1 "C1" class c2 "C2" c1 == "An association" c2 : """ n = parse(f + 'attr') data = n[2].data self.assertEquals('attr', data['tail'][1].name) self.assertTrue(data['tail'][1].mult is None) n = parse(f + 'attr [0..1]') data = n[2].data self.assertEquals('attr', data['tail'][1].name) self.assertEquals('[0..1]', str(data['tail'][1].mult)) n = parse(f + '[0..1]') data = n[2].data self.assertEquals('[0..1]', str(data['tail'][1].mult)) self.assertEquals('', data['tail'][1].name) n = parse(f + 'attr[n..m]') data = n[2].data self.assertEquals('attr', data['tail'][1].name) self.assertEquals('[n..m]', str(data['tail'][1].mult))
def test_comment(self): """ Test comment token parsing """ parse('# this is comment') parse('#this is comment') self.assertRaises(ParseError, parse, 'this is not comment # this is comment') self.assertRaises(ParseError, parse, r'\# this is not comment')
def test_st_attributes(self): """ Test stereotype attributes token parsing """ n = parse('class c1 "c1"\n : <<test>> :\n : attr = 1') n = parse('class c1 "c1"\n : <<test>> :\n : attr = "1"') n = parse('class c1 "c1"\n : <<test>> :\n : attr = abc') self.assertRaises(ParseError, parse, 'class c1 "c1"\n : <<t1, t2>> :')
def test_operation(self): """ Test operation token parsing """ n = parse('class a1 "a1"\n : oper()') self.assertEquals('oper()', n[0].data['operations'][0].name) n = parse('class a1 "a1"\n : oper(a: int)') self.assertEquals('oper(a: int)', n[0].data['operations'][0].name) n = parse('class a1 "a1"\n : oper(a: int, b: str): double') self.assertEquals('oper(a: int, b: str): double', n[0].data['operations'][0].name)
def test_id(self): """ Test parsing id """ n = parse('class id1 "test"') self.assertEquals('id1', n[0].id) self.assertRaises(ParseError ,parse, 'class 1id "test"') n = parse('class class1 "test"') self.assertEquals('class1', n[0].id) self.assertRaises(ParseError ,parse, 'class 1class "test"') n = parse('class class "test"') self.assertEquals('class', n[0].id)
def generate(f, fout, filetype='pdf'): """ Generate UML diagram into output file. :Parameters: f File containing UML diagram description in piUML language. fout Output of file name. filetype Type of a file: pdf, svg or mp. """ ast = parse(f) layout = Layout(ast) router = Router() renderer = Renderer() renderer.filetype = filetype renderer.output = fout renderer.measure(ast) layout.layout() router.route(ast) renderer.render(ast)
def _process(self, f): """ Process layout and return the root node. """ n = parse(f) l = self._layout = Layout(n) l.layout(solve=False) return n
def test_string(self): """ Test string parsing """ n = parse('class id1 "bc d"') self.assertEquals("bc d", n[0].name) n = parse('class id1 \'bc d\'') self.assertEquals("bc d", n[0].name) # " char inside string quoted with " n = parse('class id1 "b\\"cd"') self.assertEquals("b\"cd", n[0].name) # ' char inside string quoted with ' n = parse('class id1 \'b\\\'cd\'') self.assertEquals('b\'cd', n[0].name) # \" string inside string quoted with ' n = parse('class id1 \'a"b\\\\"cd"ef\'') self.assertEquals('a"b\\"cd"ef', n[0].name)
def test_stereotype(self): """ Test stereotype token parsing """ n = parse('class id <<test>> "aa"') self.assertEquals(['test'], n[0].stereotypes) n = parse('class id << test >> "aa"') self.assertEquals(['test'], n[0].stereotypes) n = parse('class id <<t1, t2>> "aa"') self.assertEquals(['t1', 't2'], n[0].stereotypes) n = parse('class id <<t1,t2>> "aa"') self.assertEquals(['t1', 't2'], n[0].stereotypes) n = parse('class id << t1,t2 >> "aa"') self.assertEquals(['t1', 't2'], n[0].stereotypes) n = parse('class id << t1 , t2 >> "aa"') self.assertEquals(['t1', 't2'], n[0].stereotypes)
def test_attribute(self): """ Test attribute token parsing """ f = 'class a "a"\n ' n = parse(f + ': attr') self.assertEquals('attr', n[0].data['attributes'][0].name) n = parse(f + ': attr-_1') self.assertEquals('attr-_1', n[0].data['attributes'][0].name) n = parse(f + ':attr') self.assertEquals('attr', n[0].data['attributes'][0].name) n = parse(f + ': attr: int') self.assertEquals('attr', n[0].data['attributes'][0].name) self.assertEquals('int', n[0].data['attributes'][0].type) n = parse(f + ': attr: int = 1') self.assertEquals('attr', n[0].data['attributes'][0].name) self.assertEquals('int', n[0].data['attributes'][0].type) self.assertEquals('1', n[0].data['attributes'][0].value) n = parse(f + ': attr = "test"') self.assertEquals('attr', n[0].data['attributes'][0].name) n = parse(f + ': attr: str = "test"') self.assertEquals('attr', n[0].data['attributes'][0].name) n = parse(f + ': attr: str = test()') self.assertEquals('attr', n[0].data['attributes'][0].name) n = parse(f + ': attr[11]') self.assertEquals('attr', n[0].data['attributes'][0].name) n = parse(f + ': attr [0..1]') self.assertEquals('attr', n[0].data['attributes'][0].name) n = parse(f + ': attr [n..m]') self.assertEquals('attr', n[0].data['attributes'][0].name)