# a basic test of Bag objects, initially based on a 4suite list message # from Martin Strohal, 2003-07-09 from cStringIO import StringIO from Ft.Lib.Uri import OsPathToUri from Ft.Rdf import Model, Container from Ft.Rdf.Drivers import Memory from Ft.Rdf.Serializers.Dom import Serializer from Ft.Xml.Domlette import PrettyPrint from Ft.Xml.Lib.TreeCompare import TreeCompare SCOPE = OsPathToUri(__file__, attemptAbsolute=True) + '-INTERNAL-XML-STRING' CONTAINER_CONTENTS_1 = ['bogus://example.org/testresource1', 'bogus://example.org/testresource2'] EXPECTED_MODEL_1 = """ """ % SCOPE CONTAINER_CONTENTS_2 = ['testliteral1', 'testliteral2'] EXPECTED_MODEL_2 = """ testliteral1 testliteral2 """ % SCOPE # TODO: # # Add a test that is a mix of literals and resources. # # Change the bag tests so that item order in the expected # results doesn't matter. # # Add tests for the other types of containers def getModel(): db = Memory.CreateDb('') return Model.Model(db) def serializeModel(model): serializer = Serializer() stream = StringIO() doc = serializer.serialize(model) PrettyPrint(doc, stream) return stream.getvalue() def Test(tester): tester.startGroup('RDF Bag creation and serialization') tester.startTest('all items are resources') bag = Container.Bag(SCOPE) for item in CONTAINER_CONTENTS_1: bag.append(item) model = getModel() # addContainer() turns the bag into statements. # The items in the bag become the objects of those statements. # What can we do here to ensure that these get serialized as resources? # # Currently, when converted to statements, the object type is # forced to be resource; we have no control over it. model.addContainer(bag) res = serializeModel(model) tester.compare(EXPECTED_MODEL_1, res, func=TreeCompare) tester.testDone() tester.startTest('all items are literals') bag = Container.Bag(SCOPE) for item in CONTAINER_CONTENTS_2: bag.append(item) model = getModel() # addContainer() turns the bag into statements. # The items in the bag become the objects of those statements. # What can we do here to ensure that these get serialized as literals? # # Currently, when converted to statements, the object type is # forced to be resource; we have no control over it. model.addContainer(bag) res = serializeModel(model) tester.compare(EXPECTED_MODEL_2, res, func=TreeCompare) tester.testDone() tester.groupDone() return