Ejemplo n.º 1
0
    def test_init_extensions(self):
        forms = self.parser.parse('t()(@extension E() @extension F())')
        t = forms[0]

        expect = [ExtensionPragma('E', []), ExtensionPragma('F', [])]

        self.assertCountEqual(t.collect_extensions(self.env), expect)
Ejemplo n.º 2
0
    def test_evaluate_stores_extensions(self):
        forms = self.parser.parse('t()(@extension E() @extension F())')
        t = forms[0]

        t.evaluate(self.env)

        found = self.env.lookup_extensions(t.identifier.evaluate(self.env))

        self.assertCountEqual(found, [ExtensionPragma(
            'E', []), ExtensionPragma('F', [])])
Ejemplo n.º 3
0
    def test_evaluate_stores_base_extensions(self):
        forms = self.parser.parse(
            's()(@extension F()) t()(s() @extension E())')
        s = forms[0]
        t = forms[1]

        s.evaluate(self.env)
        t.evaluate(self.env)

        found = self.env.lookup_extensions(t.identifier.evaluate(self.env))
        expect = [ExtensionPragma('F', []), ExtensionPragma('E', [])]

        self.assertCountEqual(found, expect)
Ejemplo n.º 4
0
    def __init__(self, identifier, template, args, body, location=None):
        super().__init__(location)
        self.template = template
        self.identifier = Self() if identifier is None else identifier
        self.args = []
        for n in range(0, len(args)):
            arg = args[n]
            if isinstance(arg, Argument):
                self.args.append(Argument(arg.value, n, location))
            else:
                self.args.append(Argument(arg, n, location))

        self.args.insert(0, Argument(self.identifier, -1))

        self.extensions = []
        self.body = []
        for statement in body:
            if isinstance(statement, ExtensionPragma):
                for arg in self.args:
                    ext_args = [
                        arg.marshal(ext_arg) for ext_arg in statement.args
                    ]
                self.extensions.append(
                    ExtensionPragma(statement.name, ext_args))
            else:
                self.body.append(statement)
Ejemplo n.º 5
0
 def test_extension_in_body_with_arg(self):
     script = 'A()(@extension ExtensionName(12345))'
     forms = self.parser.parse(script)
     a = forms[0]
     expected_template = Template(Identifier(
         Name('A')), [], [ExtensionPragma('ExtensionName', [Value(12345)])])
     self.assertEqual(expected_template, a)
Ejemplo n.º 6
0
    def test_evaluate_extension_arguments(self):
        forms = self.parser.parse('t()(@extension E(12345))')
        t = forms[0]

        t.evaluate(self.env)

        found = self.env.lookup_extensions(t.identifier.evaluate(self.env))

        self.assertCountEqual(found, [ExtensionPragma('E', [Value(12345)])])
Ejemplo n.º 7
0
    def test_evaluate_extension_arguments_name(self):
        forms = self.parser.parse('t()(@extension E(argument))')
        t = forms[0]

        t.evaluate(self.env)

        found = self.env.lookup_extensions(t.identifier.evaluate(self.env))
        expect = [ExtensionPragma('E', [Identifier(Name('argument')).evaluate(self.env)])]

        self.assertCountEqual(found, expect)
Ejemplo n.º 8
0
def pre_process(forms, version):
    '''
    We want to add a default prefix if one isnt present.
    Also, add the new include extension if not present.
    Also, add the sbol_identity extension
    '''

    default_prefix_name = "shb_ns"
    default_prefix = Identifier(Uri("http://shortbol.org/v2#"))
    if version == "sbol_3":
        default_prefix = Identifier(Uri("http://shortbol.org/v3#"))

    if not any(isinstance(x, PrefixPragma) for x in forms):
        forms.insert(0, PrefixPragma(default_prefix_name, default_prefix))

    pos = 0
    if not any(isinstance(x, DefaultPrefixPragma) for x in forms):
        for index, form in enumerate(forms):
            if isinstance(form, PrefixPragma):
                prefix = form.prefix
                pos = index + 1
                break
        forms.insert(pos, DefaultPrefixPragma(prefix))
    else:
        for index, form in enumerate(forms):
            if isinstance(form, DefaultPrefixPragma):
                pos = pos + 1

    extensions = [x for x in forms if isinstance(x, ExtensionPragma)]
    include_ns = ExtensionPragma("Include", Identifier(Uri(version)))

    if include_ns not in extensions:
        forms.insert(pos + 1, include_ns)
    if version == "sbol_2":
        sbol_identity = ExtensionPragma("SBOL2", [])
        if sbol_identity not in extensions:
            forms.append(sbol_identity)
    elif version == "sbol_3":
        sbol_identity = ExtensionPragma("SBOL3", [])
        if sbol_identity not in extensions:
            forms.append(sbol_identity)

    return forms
Ejemplo n.º 9
0
    def test_evaluate_extension_self_name(self):
        forms = self.parser.parse('t()(@extension E(self.argument))')
        t = forms[0]

        self.env.current_self = Name(Self())
        t.evaluate(self.env)

        found = self.env.lookup_extensions(t.identifier.evaluate(self.env))
        expect = [ExtensionPragma('E', [Identifier(Self(), Name('argument'))])]

        self.assertCountEqual(found, expect)
Ejemplo n.º 10
0
    def get_extensions(self, context):
        template_uri = self.template.evaluate(context)

        raw_extensions = context.lookup_extensions(template_uri)
        processed_extensions = []
        for ext in raw_extensions:
            ext_args = ext.args
            for arg in self.args:
                ext_args = [arg.marshal(ext_arg) for ext_arg in ext_args]
            processed_extensions += [ExtensionPragma(ext.name, ext_args)]

        return processed_extensions + self.extensions
Ejemplo n.º 11
0
 def test_extension_pragma(self):
     expected = [ExtensionPragma('E', [])]
     actually = self.parser.parse('@extension E()')
     self.assertEqual(expected, actually)