Exemplo n.º 1
0
class StoryTests(unittest.TestCase):

    def setUp(self):
        self.s = Story()

    def tearDown(self):
        del self.s

    def test_add_node(self):
        self.s.add_node('a')
        self.assertTrue('a' in self.s)

        self.s.add_node(1)
        self.assertFalse(1 in self.s)
        self.assertTrue('1' in self.s)

        l = ['b', 'c', 'd']
        self.s.add_nodes_from(l)
        for c in l:
            self.assertTrue(c in self.s)
        self.assertTrue('a' in self.s)
        self.assertTrue('1' in self.s)

    def test_add_edge(self):
        self.s.add_node('a')
        self.s.add_node('b')
        self.s.add_edge('a', 'b')
        self.assertTrue('a' in self.s)
        self.assertTrue('b' in self.s)
        self.assertTrue('b' in self.s.neighbors('a'))
        self.assertFalse('a' in self.s.neighbors('b'))

        self.s.add_edge('c', 'd')
        self.assertTrue('c' in self.s)
        self.assertTrue('d' in self.s)
        self.assertTrue('d' in self.s.neighbors('c'))
        self.assertFalse('c' in self.s.neighbors('d'))

        ebunch = [('b', 'c'), ('d', 'e')]
        self.s.add_edges_from(ebunch)
        self.assertTrue('e' in self.s)
        
    def test_add_undir_edge(self):
        self.s.add_node('a')
        self.s.add_node('b')
        self.s.add_undirected_edge('a', 'b')
        self.assertTrue('a' in self.s)
        self.assertTrue('b' in self.s)
        self.assertTrue('b' in self.s.neighbors('a'))
        self.assertTrue('a' in self.s.neighbors('b'))

        self.s.add_undirected_edge('c', 'd')
        self.assertTrue('c' in self.s)
        self.assertTrue('d' in self.s)
        self.assertTrue('d' in self.s.neighbors('c'))
        self.assertTrue('c' in self.s.neighbors('d'))

        ebunch = [('b', 'c'), ('d', 'e')]
        self.s.add_undirected_edges_from(ebunch)
        self.assertTrue('e' in self.s)

    def test_set_current(self):
        with self.assertRaises(StoryError):
            self.s.current = 'a'
        self.s.add_node('a')
        self.s.current = 'a'
        self.assertTrue('a' in self.s.visited)
        self.assertTrue(self.s.current == 'a')

    def test_add_actions(self):
        self.s.add_node('a')
        s1 = 'This is a test message'
        self.s.add_say('a', message=s1)
        s2 = 'Fake message'
        self.s.add_say('a', message=s2)
        actions = self.s.node['a']['actions']
        self.assertTrue(actions == [{'type': 'say', 'kwargs': {'message': s1}},
                                    {'type': 'say', 'kwargs': {'message': s2}}])

    def test_run_conditions1(self):
        l = ['a', 'b', 'c']
        self.s.add_nodes_from(l)
        
        self.s.require_visit('b', 'a')
        self.s.require_visit('c', 'a', 'b')

        self.assertFalse('a' in self.s.visited)
        condition = self.s.run_conditions('b')[0]
        self.assertFalse(condition())
        condition = self.s.run_conditions('c')[0]
        self.assertFalse(condition())

        self.s.current = 'a'
        condition = self.s.run_conditions('b')[0]
        self.assertTrue(condition())
        condition = self.s.run_conditions('c')[0]
        self.assertFalse(condition())

        self.s.current = 'b'
        condition = self.s.run_conditions('c')[0]
        self.assertTrue(condition())

    def test_run_conditions2(self):
        l = ['a', 'b', 'c', 'd']
        self.s.add_nodes_from(l)
        self.s.context = {'apples': 5}

        self.s.check_context_for('b', 'apples')
        self.s.check_context_for('c', apples=6)
        self.s.check_context_for('d', 'oranges')

        condition = self.s.run_conditions('b')[0]
        self.assertTrue(condition())
        condition = self.s.run_conditions('c')[0]
        self.assertFalse(condition())
        condition = self.s.run_conditions('d')[0]
        self.assertFalse(condition())
        
        updated_context = {'apples': 6, 'oranges': 0}
        self.s.update_context(updated_context)

        condition = self.s.run_conditions('b')[0]
        self.assertTrue(condition())
        condition = self.s.run_conditions('c')[0]
        self.assertTrue(condition())
        condition = self.s.run_conditions('d')[0]
        self.assertTrue(condition())

    def test_context(self):
        d = {'a': 1, 'b': 2}
        self.s.context = d
        self.assertTrue(self.s.context == d)
        self.assertFalse(self.s.context is d)

    def test_run(self):
        # test empty
        self.s()

        l = ['a', 'b', 'c', 'd']
        self.s.add_nodes_from(l)
        self.s.add_edge('a', 'b')
        self.s.add_edge('a', 'c')
        self.s.add_edge('c', 'd')
        self.s.current = 'a'
        
        path = ['c', 'd']
        path_iter = iter(path)
        current = iter(path)
        dummy_input = lambda: next(path_iter)
        while not self.s.is_finished:
            self.s.input_fct = dummy_input 
            self.s()
            self.assertTrue(self.s.current == next(current))


    '''