File: test_lib_pubsub_spec.py

package info (click to toggle)
wxpython4.0 4.2.3%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 221,752 kB
  • sloc: cpp: 962,555; python: 230,573; ansic: 170,731; makefile: 51,756; sh: 9,342; perl: 1,564; javascript: 584; php: 326; xml: 200
file content (132 lines) | stat: -rw-r--r-- 4,170 bytes parent folder | download | duplicates (4)
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
"""

:copyright: Copyright 2006-2009 by Oliver Schoenborn, all rights reserved.
:license: BSD, see LICENSE.txt for details.

"""

import unittest
from unittests import wtc


from wx.lib.pubsub.core.topicargspec import (
     ArgsInfo,
     ArgSpecGiven,
     SenderMissingReqdMsgDataError ,
     SenderUnknownMsgDataError
     )

#---------------------------------------------------------------------------


class lib_pubsub_Specs(wtc.PubsubTestCase):


    def test1_create(self):
        # root
        td1 = ArgSpecGiven(dict())
        ai1 = ArgsInfo(('t1',), td1, None)
        assert ai1.isComplete()
        assert ai1.numArgs() == 0
        assert ai1.getArgs() == ()
        assert ai1.getCompleteAI() is ai1

        # sub, complete
        td2 = ArgSpecGiven(
            argsDocs = dict(arg1='doc for arg1', arg2='doc for arg2'),
            reqdArgs = ('arg2',))
        ai2 = ArgsInfo(('t1','st1'), td2, ai1)
        assert ai2.isComplete()
        assert ai2.numArgs() == 2
        assert ai2.getArgs() == ('arg1', 'arg2')
        assert ai2.getCompleteAI() is ai2

        # sub, missing
        td2.argsSpecType = ArgSpecGiven.SPEC_GIVEN_NONE
        ai4 = ArgsInfo(('t1','st3'), td2, ai1)
        assert not ai4.isComplete()
        assert ai4.numArgs() == 0
        assert ai4.getArgs() == ()
        assert ai4.getCompleteAI() is ai1

        # sub, of incomplete spec, given ALL args
        td3 = ArgSpecGiven(
            argsDocs = dict(arg1='doc for arg1', arg2='doc for arg2'),
            reqdArgs = ('arg2',))
        ai5 = ArgsInfo(('t1','st3','sst1'), td3, ai4)
        assert ai5.isComplete()
        assert ai5.numArgs() == 2
        assert ai5.hasSameArgs('arg1', 'arg2')
        assert ai5.getCompleteAI() is ai5

    def test2_update(self):
        td1 = ArgSpecGiven(dict())
        td2 = ArgSpecGiven()
        td4 = ArgSpecGiven()
        td5 = ArgSpecGiven(
            argsDocs = dict(
                arg1='doc for arg1', arg2='doc for arg2',
                arg3='doc for arg3', arg4='doc for arg4'),
            reqdArgs = ('arg4','arg2'))

        ai1 = ArgsInfo(('t1',), td1, None)             # root, complete
        ai2 = ArgsInfo(('t1','st1'), td2, ai1)         # sub 1, empty
        ai4 = ArgsInfo(('t1','st1','sst2'), td4, ai2)  # empty sub of sub 1
        ai5 = ArgsInfo(('t1','st1','sst3'), td5, ai2)  # completed sub of sub 1

        # check assumptions before we start:
        assert not ai2.isComplete()
        assert not ai4.isComplete()
        assert     ai5.isComplete()
        assert ai2.numArgs() == 0
        assert ai4.numArgs() == 0
        assert ai5.numArgs() == 4

        # pretend we have an update for ai2: all args now available
        ai2.updateAllArgsFinal( ArgSpecGiven(
                dict(arg1='doc for arg1', arg2='doc for arg2'),
                ('arg2',)) )
        assert ai2.isComplete()
        assert ai2.numArgs() == 2
        assert ai2.hasSameArgs('arg1', 'arg2')
        assert ai2.getCompleteAI() is ai2

        assert not ai4.isComplete()

        assert ai2.numArgs() == 2
        assert ai4.numArgs() == 0
        assert ai5.numArgs() == 4

        assert ai4.getCompleteAI() is ai2

        assert ai2.hasSameArgs('arg1', 'arg2')
        assert ai5.hasSameArgs('arg1', 'arg2', 'arg3', 'arg4')

    def test3_filter(self):
        td = ArgSpecGiven(
            argsDocs = dict(arg1='doc for arg1', arg2='doc for arg2'),
            reqdArgs = ('arg2',))
        ai = ArgsInfo(('t1',), td, None)

        # check:
        argsMissingReqd = {}
        self.assertRaises(SenderMissingReqdMsgDataError , ai.check, argsMissingReqd)

        argsExtraOpt = dict(arg2=2, arg5=5)
        self.assertRaises(SenderUnknownMsgDataError  , ai.check, argsExtraOpt)

        args = dict(arg1=1, arg2=2)
        ai.check(args)

        # filter:
        msgArgs = dict(arg1=1, arg2=2)
        argsOK = msgArgs.copy()
        assert ai.filterArgs( msgArgs ) == argsOK
        msgArgs.update(arg3=3, arg4=4)
        assert ai.filterArgs( msgArgs ) == argsOK

#---------------------------------------------------------------------------


if __name__ == '__main__':
    unittest.main()