import unittest from narval.extensions.xml_template import * class GeneratorTC(unittest.TestCase): def setUp(self): self.root = XMLTemplateNode('rdf:RDF', {}) self.root.prefixes = {'rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'rdfs': 'http://www.w3.org/2000/01/rdf-schema#', 'foaf': 'http://xmlns.com/foaf/0.1/', } templ = XMLTemplateNode('foaf:Person', {'rdf:about': '%s'}) templ.set_cardinality('*') templ.append( XMLTemplateNode('foaf:isDescribedIn', {'rdf:resource': '%s'})) templ.append( XMLTemplateNode('foaf:name', {}, content='%s')) child_person = XMLTemplateNode('foaf:Person', {}) child_person.append( XMLTemplateNode('rdfs:seeAlso', {'rdf:resource' :'%s'})) knows = XMLTemplateNode('foaf:knows', {}) knows.append(child_person) knows.set_cardinality('*') templ.append( knows ) templ.append( XMLTemplateNode('foaf:interest', {'rdf:resource': '%s'})) templ[-1].set_cardinality('*') self.root.append(templ) def test_generation(self): gen = Generator(self.root) self.assertEquals(gen.next_question(), 'add a new foaf:Person ?') gen.push_answer('yes') self.assertEquals(gen.next_question(), 'rdf:about for foaf:Person :') gen.push_answer('http://www.logilab.fr/~toto') self.assertEquals(gen.next_question(), 'rdf:resource for foaf:Person/foaf:isDescribedIn :') gen.push_answer('http://www.logilab.fr/~toto') self.assertEquals(gen.next_question(), 'foaf:name for foaf:Person :') gen.push_answer('Toto') self.assertEquals(gen.next_question(), 'add a new foaf:knows to foaf:Person ?') gen.push_answer('oui') self.assertEquals(gen.next_question(), 'rdf:resource for foaf:Person/foaf:knows/foaf:Person/rdfs:seeAlso :') gen.push_answer('http://www.logilab.fr/~tutu') self.assertEquals(gen.next_question(), 'add a new foaf:knows to foaf:Person ?') gen.push_answer('y') self.assertEquals(gen.next_question(), 'rdf:resource for foaf:Person/foaf:knows/foaf:Person/rdfs:seeAlso :') gen.push_answer('http://www.logilab.fr/~titi') self.assertEquals(gen.next_question(), 'add a new foaf:knows to foaf:Person ?') gen.push_answer('no') self.assertEquals(gen.next_question(), 'add a new foaf:interest to foaf:Person ?') gen.push_answer('o') self.assertEquals(gen.next_question(), 'rdf:resource for foaf:Person/foaf:interest :') gen.push_answer('http://www.logilab.fr/projects/narval') self.assertEquals(gen.next_question(), 'add a new foaf:interest to foaf:Person ?') gen.push_answer('n') self.assertEquals(gen.next_question(), 'add a new foaf:Person ?') gen.push_answer('n') self.assertRaises(NoMoreQuestion, gen.next_question) for i, (l1, l2) in enumerate(zip(''' Toto '''.splitlines(), gen.as_xml().splitlines())): self.assertEquals(l1, l2, '%r != %r on index %s' % (l1, l2, i)) class ReaderTC(unittest.TestCase): def setUp(self): self.template = XMLTemplateReader().from_string(''' %s %s ''') def test_base(self): template = self.template self.assertEquals(template.qname, 'rdf:RDF') self.assertEquals(len(template), 1) self.assertEquals(template.prefixes, {'rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'rdfs': 'http://www.w3.org/2000/01/rdf-schema#', 'foaf': 'http://xmlns.com/foaf/0.1/'}) self.assertEquals(template.attrs, {}) self.assertEquals(template.content, '') person_template = template[0] self.assertEquals(person_template.qname, 'foaf:Person') self.assertEquals(len(person_template), 8, list(person_template)) self.assertEquals(person_template.attrs, {'rdf:about': '%s'}) self.assertEquals(person_template.content, '') self.assertEquals(person_template[0].qname, 'foaf:isDescribedIn') self.assertEquals(person_template[0].content, '') self.assertEquals(person_template[1].qname, 'foaf:name') self.assertEquals(person_template[1].content, '%s') self.assertEquals(person_template[2].qname, 'foaf:mbox') self.assertEquals(person_template[3].qname, 'foaf:nick') self.assertEquals(person_template[4].qname, 'foaf:homepage') self.assertEquals(person_template[5].qname, 'foaf:interest') self.assertEquals(person_template[6].qname, 'foaf:currentProject') self.assertEquals(person_template[7].qname, 'foaf:knows') def test_cardinality(self): template = self.template self.assertEquals(template.cardinality, '') person_template = template[0] self.assertEquals(person_template.cardinality, '*') self.assertEquals(person_template[0].cardinality, '') self.assertEquals(person_template[1].cardinality, '') self.assertEquals(person_template[2].cardinality, '') self.assertEquals(person_template[3].cardinality, '') self.assertEquals(person_template[4].cardinality, '') self.assertEquals(person_template[5].cardinality, '*') self.assertEquals(person_template[6].cardinality, '*') self.assertEquals(person_template[7].cardinality, '*') if __name__ == '__main__': unittest.main()