예제 #1
0
    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))
예제 #2
0
 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')
예제 #3
0
    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>>   :')
예제 #4
0
    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)
예제 #5
0
    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)
예제 #6
0
파일: __init__.py 프로젝트: wrobell/piuml
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)
예제 #7
0
 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
예제 #8
0
    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)
예제 #9
0
    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)
예제 #10
0
    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)