diff options
author | Gustavo Niemeyer <gustavo@niemeyer.net> | 2007-12-09 13:37:49 -0200 |
---|---|---|
committer | Gustavo Niemeyer <gustavo@niemeyer.net> | 2007-12-09 13:37:49 -0200 |
commit | 7ba4e6a4eff5896808e7b95e84744cd97a963c07 (patch) | |
tree | fa8d823d53de7ec05e28128009186c2fbe413f59 | |
parent | 92e4f5b0bc5ec7a06284b9cc2245fdfb052d9707 (diff) | |
download | mocker-7ba4e6a4eff5896808e7b95e84744cd97a963c07.tar.gz |
Fixed problem when requesting order on similar expressions. The
second expression might not be accepted.
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | mocker.py | 18 | ||||
-rwxr-xr-x | test.py | 26 |
3 files changed, 34 insertions, 13 deletions
@@ -26,6 +26,9 @@ consistently returns an unexistent temporary filename which is properly cleaned up if created. +- Fixed problem when requesting order on similar expressions. The + second expression might not be accepted. + 0.9.3 (2007-11-24) ================== @@ -684,13 +684,11 @@ class MockerBase(object): recorder(self, event) return Mock(self, path) else: - satisfied = [] - for event in self._events: - if event.satisfied(): - satisfied.append(event) - elif event.matches(path): - return event.run(path) - for event in satisfied: + # First run unsatisfied events, then ones not previously run. + events = [(event.satisfied()*2 + event.has_run(), event) + for event in self._events] + events.sort() + for key, event in events: if event.matches(path): return event.run(path) raise MatchError(ERROR_PREFIX + "Unexpected expression: %s" % path) @@ -1458,6 +1456,7 @@ class Event(object): def __init__(self, path=None): self.path = path self._tasks = [] + self._has_run = False def add_task(self, task): """Add a new task to this taks.""" @@ -1477,6 +1476,9 @@ class Event(object): return False return bool(self._tasks) + def has_run(self): + return self._has_run + def run(self, path): """Run all tasks with the given action. @@ -1487,6 +1489,7 @@ class Event(object): The result of this method will be the last result of a task which isn't None, or None if they're all None. """ + self._has_run = True result = None errors = [] for task in self._tasks: @@ -1548,6 +1551,7 @@ class Event(object): def replay(self): """Put all tasks in replay mode.""" + self._has_run = False for task in self._tasks: task.replay() @@ -1370,27 +1370,33 @@ class MockerTest(TestCase): self.assertRaises(AssertionError, self.mocker.act, self.path) self.assertEquals(calls, ["matches"]) - def test_replaying_not_satisfied_first(self): + def test_replaying_order_not_satisfied_first_then_not_run(self): class MyTask1(Task): def run(self, path): return "result1" class MyTask2(Task): + def run(self, path): + return "result2" + class MyTask3(Task): raised = False def verify(self): if not self.raised: self.raised = True raise AssertionError("An error") def run(self, path): - return "result2" + return "result3" event1 = self.mocker.add_event(Event()) event1.add_task(MyTask1()) event2 = self.mocker.add_event(Event()) event2.add_task(MyTask2()) event3 = self.mocker.add_event(Event()) - event3.add_task(MyTask1()) + event3.add_task(MyTask3()) + event4 = self.mocker.add_event(Event()) + event4.add_task(MyTask1()) self.mocker.replay() - self.assertEquals(self.mocker.act(self.path), "result2") + self.assertEquals(self.mocker.act(self.path), "result3") self.assertEquals(self.mocker.act(self.path), "result1") + self.assertEquals(self.mocker.act(self.path), "result2") def test_recorder_decorator(self): result = recorder(42) @@ -2540,8 +2546,6 @@ class MockTest(TestCase): pass - - class EventTest(TestCase): def setUp(self): @@ -2649,6 +2653,16 @@ class EventTest(TestCase): self.event.add_task(MyTask()) self.assertRaises(RuntimeError, self.event.run, 42) + def test_has_run(self): + self.assertFalse(self.event.has_run()) + self.event.run(None) + self.assertTrue(self.event.has_run()) + + def test_has_run_reset_on_replay(self): + self.event.run(None) + self.event.replay() + self.assertFalse(self.event.has_run()) + def test_satisfied_false(self): def raise_error(): raise AssertionError("An error") |