def zoo_story_factory(): s = Story(input_fct=get_input, workspace_id=actions.WKSPACE_ID) s.add_node(actions.entrance, start=True) s.add_node(actions.wallet) s.add_node(actions.parking_lot) exhibits = [actions.monkeys, actions.elephants, actions.lions, actions.tigers, actions.penguins, actions.otters, actions.pandas] exhibits = random.sample(exhibits, 4) for exhibit in exhibits: s.add_node(exhibit) dir_edges = [(actions.entrance, exhibit) for exhibit in exhibits] dir_edges += [(exhibit, actions.parking_lot) for exhibit in exhibits] dir_edges.append((actions.wallet, actions.parking_lot)) undir_edges = [] # the exhibits are fully connected for i, v in enumerate(exhibits): for w in exhibits[i+1:]: undir_edges.append((v, w)) s.add_edges_from(dir_edges) s.add_undirected_edges_from(undir_edges) s.node[actions.entrance]['dynamic_events'][actions.wallet] = 0.01 context = {'name': None, 'remaining': [e.__name__ for e in exhibits]} s.update_context(context) return s
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)) '''