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()
|