123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- initial_state = 0
- class ActionTypes(object):
- SET_STATE = 'counter/SET_STATE'
- INCREMENT = 'counter/INCREMENT'
- DECREMENT = 'counter/DECREMENT'
- class ActionCreators(object):
- @staticmethod
- def set_state(value):
- return dict(
- type=ActionTypes.SET_STATE,
- value=value
- )
- @staticmethod
- def increment():
- return dict(
- type=ActionTypes.INCREMENT
- )
- @staticmethod
- def decrement():
- return dict(
- type=ActionTypes.DECREMENT
- )
- def reducer(state=None, action=None):
- if state is None:
- state = initial_state
- if not (isinstance(action, dict) and 'type' in action):
- return state
- if action['type'] == ActionTypes.SET_STATE:
- state = action['value']
- elif action['type'] == ActionTypes.INCREMENT:
- state += 1
- elif action['type'] == ActionTypes.DECREMENT:
- state -= 1
- return state
- if __name__ == '__main__':
- import unittest
- class TestSuite(unittest.TestCase):
- def test_action_creators(self):
- self.assertEqual(ActionCreators.set_state(12), {'type': 'counter/SET_STATE', 'value': 12})
- self.assertEqual(ActionCreators.increment(), {'type': 'counter/INCREMENT'})
- self.assertEqual(ActionCreators.decrement(), {'type': 'counter/DECREMENT'})
- def test_reducer(self):
- self.assertEqual(reducer(67, None), 67)
- self.assertEqual(reducer(None, None), 0)
- self.assertEqual(reducer(None, ActionCreators.set_state(13)), 13)
- self.assertEqual(reducer(452, ActionCreators.set_state(13)), 13)
- self.assertEqual(reducer(None, ActionCreators.increment()), 1)
- self.assertEqual(reducer(341, ActionCreators.increment()), 342)
- self.assertEqual(reducer(None, ActionCreators.decrement()), -1)
- self.assertEqual(reducer(251, ActionCreators.decrement()), 250)
- unittest.main()
|