1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
#!/usr/bin/env python
from pubsub import pub
from pubsub.utils.xmltopicdefnprovider import (
XmlTopicDefnProvider,
TOPIC_TREE_FROM_FILE,
exportTopicTreeSpecXml
)
topicMgr = pub.getDefaultTopicMgr()
def test_xml_from_file():
pub.clearTopicDefnProviders()
provider = XmlTopicDefnProvider('xmlprovider_topics.xml', TOPIC_TREE_FROM_FILE)
assert topicMgr.getTopic('parent', True) is None
assert topicMgr.getTopic('parent.child', True) is None
assert topicMgr.getOrCreateTopic('parent') is not None
assert topicMgr.getOrCreateTopic('parent.child') is not None
def test_xml_import():
pub.clearTopicDefnProviders()
topicMgr.delTopic('parent')
# verify pre:
assert topicMgr.getTopic('parent', True) is None
assert topicMgr.getTopic('parent.child', True) is None
provider = XmlTopicDefnProvider('xmlprovider_topics.xml', TOPIC_TREE_FROM_FILE)
pub.addTopicDefnProvider( provider )
# force instantiation of two topic definitions that were defined in xml:
pub.sendMessage('parent', lastname='')
pub.sendMessage('parent.child', lastname='', nick='')
# verify post:
assert topicMgr.getTopic('parent') is not None
assert topicMgr.getTopic('parent.child') is not None
def test_xml_string_import():
xml="""<topicdefntree>
<description>Test Topics showing hierarchy and topic inheritance</description>
<topic id="parent">
<description>Parent with a parameter and subtopics</description>
<listenerspec>
<arg id="lastname">surname</arg>
<arg id="name" optional="True">given name</arg>
</listenerspec>
<topic id="child">
<description>This is the first child</description>
<listenerspec>
<arg id="nick">A nickname</arg>
</listenerspec>
</topic>
</topic>
</topicdefntree>"""
topicMgr.delTopic('parent')
pub.clearTopicDefnProviders()
assert topicMgr.getTopic('parent', True) is None
assert topicMgr.getTopic('parent.child', True) is None
provider = XmlTopicDefnProvider(xml)
pub.addTopicDefnProvider( provider )
# to force instantiation of two topic definitions that were defined in xml,
# this time we just instantiate all of them:
pub.instantiateAllDefinedTopics(provider)
assert topicMgr.getTopic('parent') is not None
assert topicMgr.getTopic('parent.child') is not None
def test_xml_topics():
# validate that topic specs were properly parsed
def isValid(topicName, listener):
topic = topicMgr.getTopic(topicName)
assert topic.getDescription() is not None
assert topic.hasMDS()
return topic.isValid(listener)
def hello(lastname, name=None): pass
def friend(lastname, nick, name=None): pass
assert isValid('parent', hello)
assert isValid('parent.child', friend)
|