1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4#
5# Copyright 2017, Data61
6# Commonwealth Scientific and Industrial Research Organisation (CSIRO)
7# ABN 41 687 119 230.
8#
9# This software may be distributed and modified according to the terms of
10# the BSD 2-Clause license. Note that NO WARRANTY is provided.
11# See "LICENSE_BSD2.txt" for details.
12#
13# @TAG(DATA61_BSD)
14#
15
16from __future__ import absolute_import, division, print_function, \
17    unicode_literals
18
19import os, six, sys, unittest
20
21ME = os.path.abspath(__file__)
22
23# Make CAmkES importable
24sys.path.append(os.path.join(os.path.dirname(ME), '../../..'))
25
26from camkes.internal.tests.utils import CAmkESTest
27from camkes.ast import ASTError
28from camkes.parser import ParseError
29from camkes.parser.stage0 import Reader
30from camkes.parser.stage1 import Parse1
31from camkes.parser.stage2 import Parse2
32from camkes.parser.stage3 import Parse3
33from camkes.parser.stage4 import Parse4
34from camkes.parser.stage5 import Parse5
35from camkes.parser.stage6 import Parse6
36from camkes.parser.stage7 import Parse7
37from camkes.parser.stage8 import Parse8
38from camkes.parser.stage9 import Parse9
39from camkes.parser.stage10 import Parse10
40
41class TestStage9(CAmkESTest):
42    def setUp(self):
43        super(TestStage9, self).setUp()
44        r = Reader()
45        s1 = Parse1(r)
46        s2 = Parse2(s1)
47        s3 = Parse3(s2, debug=True)
48        s4 = Parse4(s3)
49        s5 = Parse5(s4)
50        s6 = Parse6(s5)
51        s7 = Parse7(s6)
52        s8 = Parse8(s7)
53        self.parser = Parse9(s8)
54
55    def test_multiple_connectors(self):
56        with six.assertRaisesRegex(self, ParseError, 'Multiple connectors used in connections'):
57            self.parser.parse_string('''
58            connector C1 {
59                from Dataports;
60                to Dataports;
61            }
62            connector C2 {
63                from Dataports;
64                to Dataports;
65            }
66            component Foo {
67                dataport Buf p1;
68            }
69            component Baz {
70                dataport Buf p1;
71                dataport Buf p2;
72            }
73            assembly {
74                composition {
75                    component Foo f;
76                    component Baz b;
77                    connection C1 c1(from b.p1, to f.p1);
78                    connection C2 c2(from b.p2, to f.p1);
79                }
80            }
81            ''')
82
83if __name__ == '__main__':
84    unittest.main()
85