|
@@ -1,55 +1,66 @@
|
|
|
initial_state = 0
|
|
|
|
|
|
+
|
|
|
class ActionTypes(object):
|
|
|
- SET_STATE = 'counter/SET_STATE'
|
|
|
- INCREMENT = 'counter/INCREMENT'
|
|
|
- DECREMENT = 'counter/DECREMENT'
|
|
|
+ SET_STATE = 'counter/SET_STATE'
|
|
|
+ INCREMENT = 'counter/INCREMENT'
|
|
|
+ DECREMENT = 'counter/DECREMENT'
|
|
|
+
|
|
|
|
|
|
class ActionCreators(object):
|
|
|
- def set_state(value):
|
|
|
- return dict(
|
|
|
- type=ActionTypes.SET_STATE,
|
|
|
- value=value
|
|
|
- )
|
|
|
-
|
|
|
- def increment():
|
|
|
- return dict(
|
|
|
- type=ActionTypes.INCREMENT
|
|
|
- )
|
|
|
-
|
|
|
- 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 = state + 1
|
|
|
- elif action['type'] == ActionTypes.DECREMENT:
|
|
|
- state = state - 1
|
|
|
- return state
|
|
|
+ @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(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()
|
|
|
+ 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()
|