diff options
author | eugue <eug.sun@gmail.com> | 2011-02-12 20:07:15 -0500 |
---|---|---|
committer | eugue <eug.sun@gmail.com> | 2011-02-12 20:07:15 -0500 |
commit | 9e342041f05e88f8d1987a48fdcdc10c14ef095f (patch) | |
tree | 2513db9b09bc5d199dcf328cfba815df32af3dc0 | |
parent | ff07b18748c64243c1c6bc62f489bfd03205d13a (diff) |
Added SwitchBehavior and its unit test file. Could be used to control games.
-rw-r--r-- | behaviors/SwitchBehavior.py | 24 | ||||
-rw-r--r-- | tests/TestSwitchBehavior.py | 35 |
2 files changed, 59 insertions, 0 deletions
diff --git a/behaviors/SwitchBehavior.py b/behaviors/SwitchBehavior.py new file mode 100644 index 0000000..1fb755d --- /dev/null +++ b/behaviors/SwitchBehavior.py @@ -0,0 +1,24 @@ +from operationscore.Behavior import * +import util.ComponentRegistry as compReg + +class SwitchBehavior(Behavior): + """ + SwitchBehavior is a behavior that transform into different behaviors base on the input data. + The behavior expects Args in the form of <Prefix>s mapping to <Behavior ID>s. The behavior detects the prefix on the data and use the corresponding Behavior to process the data and return the outputs. + In Config file, include: + <Prefix>Behavior's ID<Prefix> + <DefaultBehavior>Default behavior's ID<DefaultBehavior> + """ + def behaviorInit(self): + self.defaultBehavior = compReg.getComponent(self['DefaultBehavior']) + self.currBehavior = None + + def processResponse(self, sInputs, rInputs): + dataStr = sInputs[-1]['Data'] + if dataStr[0] in self.argDict: + self.currBehavior = compReg.getComponent(self[dataStr[0]]) + sInputs[-1]['Data'] = sInputs[-1]['Data'][1:] # remove prefix + return self.currBehavior.processResponse(sInputs, rInputs) + else: + return self.defaultBehavior.processsResponse(sInputs, rInputs) + diff --git a/tests/TestSwitchBehavior.py b/tests/TestSwitchBehavior.py new file mode 100644 index 0000000..f130431 --- /dev/null +++ b/tests/TestSwitchBehavior.py @@ -0,0 +1,35 @@ +import unittest +import util.ComponentRegistry as compReg + +from behaviors.SwitchBehavior import SwitchBehavior +from behaviors.EchoBehavior import EchoBehavior +from behaviors.DebugBehavior import DebugBehavior + +class TestSwitchBehavior(unittest.TestCase): + def setUp(self): + compReg.initRegistry() + + # add a test registry + self.behavior1 = EchoBehavior({'Id': 'behavior1'}) + self.behavior2 = DebugBehavior({'Id': 'behavior2'}) + compReg.registerComponent(self.behavior1) + compReg.registerComponent(self.behavior2) + + self.switchBehavior = SwitchBehavior({'Id': 'switch', '1': 'behavior1', '2': 'behavior2', 'DefaultBehavior': 'behavior1'}) + compReg.registerComponent(self.switchBehavior) + + def tearDown(self): + pass + + def test_switch_to_behavior1(self): + inputs = [{'Data': '1something', 'Location': 'someloc'}] + returned = self.switchBehavior.processResponse(inputs, []) + assert returned[0][0]['Location'] == 'someloc' + + def test_switch_to_behavior2(self): + inputs = [{'Data': '2something'}] + returned = self.switchBehavior.processResponse(inputs, []) + assert returned[0] == [] + +if __name__ == '__main__': + unittest.main() |