def setUp(self):
     self.sm = StateManager()
Exemple #2
0
 def setUp(self):
     self.sm = StateManager()
class StateManagerStackTests(unittest.TestCase):
    def setUp(self):
        self.sm = StateManager()

    def create_and_register_state(self, name):
        state = create_state(name)
        self.sm.register_state(state)
        return state

    def test_no_states_current_state_is_none(self):
        self.assertEqual(self.sm.current_state, None)

    def test_can_register_state(self):
        state = self.create_and_register_state("1")
        self.assertIn(state, self.sm.state_dict.values())

    def test_can_push_state(self):
        self.create_and_register_state("1")
        state1 = self.sm.push_state("1")
        self.assertIn(state1, self.sm.state_stack)

    def test_zero_index_is_current_state(self):
        self.create_and_register_state("1")
        state1 = self.sm.push_state("1")
        self.assertEqual(state1, self.sm.current_state)
        self.assertEqual(self.sm.state_stack[0], self.sm.current_state)

    def test_push_state_old_state_pushed_back_and_paused(self):
        self.create_and_register_state("1")
        self.create_and_register_state("2")
        state1 = self.sm.push_state("1")
        state2 = self.sm.push_state("2")

        self.assertIn(state1, self.sm.state_stack)
        self.assertEqual(self.sm.state_stack[1], state1)
        self.assertTrue(state1.pause.called)

    def test_push_state_old_state_resumes(self):
        self.create_and_register_state("1")
        self.create_and_register_state("2")
        state1 = self.sm.push_state("1")
        state2 = self.sm.push_state("2")
        self.sm.pop_state()

        self.assertTrue(state1.resume.called)

    def test_push_state_starts_state(self):
        self.create_and_register_state("1")
        state1 = self.sm.push_state("1")

        self.assertTrue(state1.startup.called)

    def test_can_pop_state(self):
        self.create_and_register_state("1")
        self.sm.push_state("1")
        self.sm.pop_state()

    def test_pop_state_removes_current_state(self):
        self.create_and_register_state("1")
        state1 = self.sm.push_state("1")
        self.sm.pop_state()

        self.assertEqual(self.sm.current_state, None)

    def test_pop_state_shutsdown_state(self):
        self.create_and_register_state("1")
        state1 = self.sm.push_state("1")
        self.sm.pop_state()

        self.assertTrue(state1.shutdown.called)

    def test_pop_empty_stack_raises_runtimeError(self):
        with self.assertRaises(RuntimeError):
            self.sm.pop_state()
Exemple #4
0
class StateManagerStackTests(unittest.TestCase):
    def setUp(self):
        self.sm = StateManager()

    def create_and_register_state(self, name):
        state = create_state(name)
        self.sm.register_state(state)
        return state

    def test_replace_state(self):
        self.create_and_register_state('1')
        self.create_and_register_state('2')
        state1 = self.sm.push_state('1')
        state2 = self.sm.replace_state('2')

        self.assertNotIn(state1, self.sm.active_states)
        self.assertIn(state2, self.sm.active_states)

    def test_no_states_current_state_is_none(self):
        self.assertEqual(self.sm.current_state, None)

    def test_can_register_state(self):
        state = self.create_and_register_state('1')
        self.assertIn(state, self.sm._state_dict.values())

    def test_can_push_state(self):
        self.create_and_register_state('1')
        state1 = self.sm.push_state('1')
        self.assertIn(state1, self.sm.active_states)

    def test_zero_index_is_current_state(self):
        self.create_and_register_state('1')
        state1 = self.sm.push_state('1')
        self.assertEqual(state1, self.sm.current_state)
        self.assertEqual(self.sm.active_states[0], self.sm.current_state)

    def test_push_state_old_state_pushed_back_and_paused(self):
        self.create_and_register_state('1')
        self.create_and_register_state('2')
        state1 = self.sm.push_state('1')
        state2 = self.sm.push_state('2')

        self.assertIn(state1, self.sm.active_states)
        self.assertEqual(self.sm.active_states[1], state1)
        self.assertTrue(state1.pause.called)

    def test_push_state_old_state_resumes(self):
        self.create_and_register_state('1')
        self.create_and_register_state('2')
        state1 = self.sm.push_state('1')
        state2 = self.sm.push_state('2')
        self.sm.pop_state()
        self.assertTrue(state1.resume.called)

    def test_pop_state_by_ref(self):
        self.create_and_register_state('1')
        self.create_and_register_state('2')
        instance = self.sm.push_state('1')

        self.sm.push_state('2')
        self.sm.pop_state(instance)
        self.assertNotIn(instance, self.sm.active_states)
        self.assertNotEqual(instance, self.sm.current_state)

    def test_push_state_starts_state(self):
        self.create_and_register_state('1')
        state1 = self.sm.push_state('1')

        self.assertTrue(state1.startup.called)

    def test_can_pop_state(self):
        self.create_and_register_state('1')
        instance = self.sm.push_state('1')
        self.sm.pop_state()

        self.assertNotIn(instance, self.sm.active_states)

    def test_pop_state_removes_current_state(self):
        self.create_and_register_state('1')
        state1 = self.sm.push_state('1')
        self.sm.pop_state()

        self.assertEqual(self.sm.current_state, None)

    def test_pop_state_shutsdown_state(self):
        self.create_and_register_state('1')
        state1 = self.sm.push_state('1')
        self.sm.pop_state()

        self.assertTrue(state1.shutdown.called)

    def test_pop_empty_stack_raises_runtimeError(self):
        with self.assertRaises(RuntimeError):
            self.sm.pop_state()

    @unittest.skip("needs a refactor...but i know it works (tm)")
    def test_queued_state_replaces_top_on_pop(self):
        self.create_and_register_state('1')
        self.create_and_register_state('2')
        self.create_and_register_state('3')
        state1 = self.sm.push_state('1')
        state2 = self.sm.push_state('2')
        self.sm.queue_state('3')

        self.assertEqual(state2, self.sm.current_state)
        self.sm.pop_state()