File: test2_spec.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 (129 lines) | stat: -rw-r--r-- 3,715 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
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
"""
Test topicargspec.

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

import pytest

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


#class  Test2_specTestCase:
    #def setUp(self):
    #    self.foo = Test2_spec()
    #

    #def tearDown(self):
    #    self.foo.dispose()
    #    self.foo = None

def test_create():
    # 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 test_update():
    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 test_filter():
    td = ArgSpecGiven(
        argsDocs = dict(arg1='doc for arg1', arg2='doc for arg2'),
        reqdArgs = ('arg2',))
    ai = ArgsInfo(('t1',), td, None)

    # check:
    argsMissingReqd = {}
    pytest.raises(SenderMissingReqdMsgDataError, ai.check, argsMissingReqd)

    argsExtraOpt = dict(arg2=2, arg5=5)
    pytest.raises(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