def test_assignment_uri_double(self): name = Identifier(Uri('http://variable/#v')) value = Value(1.2345) self.assertEqual(Assignment(name, value).evaluate( self.env), value.evaluate(self.env)) self.assertEqual(name.evaluate(self.env), value.evaluate(self.env))
def test_expansion_in_property_with_args(self): script = 'A()(x = e is a B(12345))' forms = self.parser.parse(script) e = self.parser.parse('e is a B(12345)')[0] expected_template = Template(Identifier(Name('A')), [], [Property(Identifier(Name('x')), e)]) self.assertEqual(expected_template, forms[0])
def test_as_triples_simple_triple_with_self(self): ''' Tests if triples list is not empty when parser call with self. ''' template = self.parser.parse('t()(x = self)')[0] expect = [(Identifier(Self()), Identifier(Name('x')), Identifier(Self()))] self.assertCountEqual(template.as_triples(self.env), expect)
def test_assignment_name_name(self): script = 'Name = Name' expected = [ Assignment(Identifier(Name('Name')), Identifier(Name('Name'))) ] actually = self.parser.parse(script) self.assertEqual(expected, actually)
def test_expansion_one_arg_with_body(self): forms = self.parser.parse('e is a a(12345)(x=true)') expect = Expansion(Identifier(Name('e')), Identifier(Name('a')), [Value(12345)], [Property(Identifier(Name('x')), Value(True))]) self.assertEqual(expect, forms[0])
def test_assignment_name_string(self): name = Identifier(Name('variable')) value = Value("string") self.assertEqual(Assignment(name, value).evaluate( self.env), value.evaluate(self.env)) self.assertEqual(name.evaluate(self.env), value.evaluate(self.env))
def test_assignment_name_boolean(self): name = Identifier(Name('variable')) value = Value(False) self.assertEqual(Assignment(name, value).evaluate( self.env), value.evaluate(self.env)) self.assertEqual(name.evaluate(self.env), value.evaluate(self.env))
def test_identifier_equal(self): i1 = Identifier(Name('n1'), Name('n2'), Name('n3')) i2 = Identifier(Name('n1'), Name('n2'), Name('n3')) self.assertEqual(i1, i2) i3 = Identifier(Name('n1'), Name('n2')) self.assertNotEqual(i1, i3)
def test_assignment_name_double(self): name = Identifier(Name('variable')) value = Value(0.12345) self.assertEqual(Assignment(name, value).evaluate( self.env), value.evaluate(self.env)) self.assertEqual(name.evaluate(self.env), value.evaluate(self.env))
def test_expansion_one_arg_no_body(self): forms = self.parser.parse('e is a a(12345)') expect = Expansion(Identifier(Name('e')), Identifier(Name('a')), [Value(12345)], []) self.assertEqual(expect, forms[0])
def test_expansion_no_args_no_body(self): forms = self.parser.parse('e is a a()') expect = Expansion(Identifier(Name('e')), Identifier(Name('a')), [], []) self.assertEqual(expect, forms[0])
def test_empty_template_noargs(self): script = 'DNASequence()(Other())' forms = self.parser.parse(script) expected_template = Template( Identifier(Name('DNASequence')), [], [Expansion(None, Identifier(Name('Other')), [], [])]) self.assertCountEqual(forms, [expected_template])
def test_as_triples_multiple_properties(self): ''' Tests if triples list is not empty when parser call with multiple properties. ''' template = self.parser.parse('t()(x = y z = 12345)')[0] expect = [(Identifier(Self()), Identifier(Name('x')), Identifier(Name('y'))), (Identifier(Self()), Identifier(Name('z')), Value(12345))] self.assertCountEqual(template.as_triples(self.env), expect)
def test_identifier_evaluate_bound_prefix(self): i = Identifier(Name('first'), Name('second')) prefix = Uri('http://first.org/#') self.env.assign(Identifier(Name('first')).evaluate(self.env), prefix) expected = Uri('http://first.org/#second') actually = i.evaluate(self.env) self.assertEqual(expected, actually)
def test_identifier_evaluate_bound_prefix_not_uri(self): i = Identifier(Name('first'), Name('second')) value = Value(12345) self.env.assign(Identifier(Name('first')).evaluate(self.env), value) expected = Uri('prefixfirstsecond') actually = i.evaluate(self.env) self.assertEqual(expected, actually)
def test_triples_get_triples_exact(self): self.assertEqual( self.pack.search((Identifier(Name('e')).evaluate(self.env), Value(1), Value(42))), [(Identifier(Name('e')).evaluate(self.env), Value(1), Value(42))]) self.assertEqual( self.pack.search((Value(1), Value(2, None), Value(3, None))), [])
def test_template_onearg_nobase(self): script = 'DNASequence(x)(encoding = <SBOL:IUPACDNA>)' forms = self.parser.parse(script) expected_template = Template(Identifier(Name('DNASequence')), ['x'], [ Property(Identifier(Name('encoding')), Identifier(Uri('SBOL:IUPACDNA'))) ]) self.assertCountEqual(forms, [expected_template])
def test_assignment_name_uri(self): script = 'Name = <http://uri.org/>' expected = [ Assignment(Identifier(Name('Name')), Identifier(Uri('http://uri.org/'))) ] actually = self.parser.parse(script) self.assertEqual(expected, actually)
def test_assignment_uri_uri(self): script = '<http://uri.org/> = <http://value.org>' expected = [ Assignment(Identifier(Uri('http://uri.org/')), Identifier(Uri('http://value.org'))) ] actually = self.parser.parse(script) self.assertEqual(expected, actually)
def test_expansion_multiple_properties(self): forms = self.parser.parse('e is a a()(x=true y=false)') expect = Expansion(Identifier(Name('e')), Identifier(Name('a')), [], [Property(Identifier(Name('x')), Value(True)), Property(Identifier(Name('y')), Value(False))]) self.assertEqual(expect, forms[0])
def test_expansion_expansion_as_arg(self): forms = self.parser.parse('e is a a(f is a b(12345))') f = self.parser.parse('f is a b(12345)')[0] expect = Expansion(Identifier(Name('e')), Identifier(Name('a')), [f], []) self.assertEqual(expect, forms[0])
def test_import_pragma_uri(self): script = "@use <import>" expected = [ImportPragma(Identifier(Uri('import')))] actually = self.parser.parse(script) self.assertEqual(expected, actually) script = "use <import>" expected = [ImportPragma(Identifier(Uri('import')))] actually = self.parser.parse(script) self.assertEqual(expected, actually)
def test_triples_get_triples_by_object(self): self.assertEqual( self.pack.search((None, None, Value(42))), [(Identifier(Name('e')).evaluate(self.env), Value(1), Value(42))]) self.assertEqual(self.pack.search( (None, None, Value(2))), [(Identifier(Name('e')).evaluate( self.env), Uri('http://example.eg/predicate'), Value(2))]) self.assertEqual(self.pack.search((None, None, Value(3))), [])
def test_triples_subject_has_property(self): self.assertTrue( self.pack.has( Identifier(Name('e')).evaluate(self.env), Value(1, None))) self.assertFalse( self.pack.has( Identifier(Name('e')).evaluate(self.env), Value(2, None))) self.assertFalse( self.pack.has( Identifier(Name('f')).evaluate(self.env), Value(1, None)))
def test_identifier_evaluate_uri_and_symbol_parts(self): i = Identifier(Uri('first'), Name('second')) expected = Value(1) uri = Uri('firstsecond') self.assertEqual(i.evaluate(self.env), uri) self.env.assign(i.evaluate(self.env), expected) actually = i.evaluate(self.env) self.assertEqual(expected, actually)
def test_assignment_name_boolean(self): script = 'Name = true' expected = [Assignment(Identifier(Name('Name')), Value(True))] actually = self.parser.parse(script) self.assertEqual(expected, actually) script = 'Name = false' expected = [Assignment(Identifier(Name('Name')), Value(False))] actually = self.parser.parse(script) self.assertEqual(expected, actually)
def test_assignment_uri_expansion(self): script = '<expansion> = e is a t()' expected = [ Assignment( Identifier(Uri('expansion')), Expansion(Identifier(Name('e')), Identifier(Name('t')), [], [])) ] actually = self.parser.parse(script) self.assertEqual(expected, actually)
def test_evaluate_stores_triples_with_expansions(self): forms = self.parser.parse('a(x)(e=x)' + 'b(y)(p=y)' + 'c()(a(f is a b(1))' + ' q = g is a b(2)' + ' h is a b(3))') a = forms[0] b = forms[1] c = forms[2] a.evaluate(self.env) b.evaluate(self.env) c.evaluate(self.env) me = Identifier(Self()) env = self.env f = Identifier(Name('f')).evaluate(env) g = Identifier(Name('g')).evaluate(env) h = Identifier(Name('h')).evaluate(env) found = env.lookup_template(c.identifier.evaluate(env)) expect = [(me, Identifier(Name('e')).evaluate(env), f), (g, Identifier(Name('p')).evaluate(env), Value(2)), (me, Identifier(Name('q')).evaluate(env), g), (h, Identifier(Name('p')).evaluate(env), Value(3))] self.assertCountEqual(found, expect) expect = [(f, Identifier(Name('p')).evaluate(env), Value(1))] self.assertCountEqual(self.env._rdf.triples, expect)
def test_as_triples_with_expansion_in_property_with_self_as_name(self): forms = self.parser.parse('a()(x = 1) b()(y = self.e is a a())') a = forms[0] b = forms[1] a.evaluate(self.env) expect = [(Identifier(Self(), Name('e')), Identifier(Name('x')).evaluate(self.env), Value(1)), (Identifier(Self()), Identifier(Name('y')), Identifier(Self(), Name('e')))] self.assertCountEqual(expect, b.as_triples(self.env))
def test_template_onearg_base(self): script = 'B(x)(x = 42)\nA(x)(B(x) encoding = <SBOL:IUPACDNA>)' forms = self.parser.parse(script) expected_template = Template(Identifier(Name('A')), ['x'], [ Expansion(None, Identifier(Name('B')), [Identifier(Name('x'))], []), Property(Identifier(Name('encoding')), Identifier(Uri('SBOL:IUPACDNA'))) ]) self.assertCountEqual([forms[1]], [expected_template])