File: test5_xmlprovider.py

package info (click to toggle)
python-pypubsub 4.0.3-7
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 928 kB
  • sloc: python: 4,884; makefile: 156; xml: 16; php: 2
file content (84 lines) | stat: -rw-r--r-- 2,920 bytes parent folder | download | duplicates (2)
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)