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)
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', [])])
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)
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)
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)
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)])])
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)
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
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)
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
def test_extension_pragma(self): expected = [ExtensionPragma('E', [])] actually = self.parser.parse('@extension E()') self.assertEqual(expected, actually)