summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS8
-rw-r--r--mocker.py6
-rwxr-xr-xtest.py36
3 files changed, 48 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index 25a9885..9ff0dbc 100644
--- a/NEWS
+++ b/NEWS
@@ -2,8 +2,12 @@
================
- Added MockerTestCase.makeFile() and .makeDir() helpers. They offer
- easy creation of temporary files/directories with certainty of
- removal after tests finish running.
+ easy creation of temporary files/directories, and ensure that they
+ get removed after each test method runs.
+
+- If the replay() method is called twice, expectations will be fully
+ reset so that several similar tests may be performed in a row by
+ just calling replay() again.
- Mocker.on_restore() removed. Restore isn't performed if replay()
isn't called, and that may not be obvious, so a hook won't be
diff --git a/mocker.py b/mocker.py
index 71d3ac7..fe27892 100644
--- a/mocker.py
+++ b/mocker.py
@@ -1514,6 +1514,9 @@ class RunCounter(Task):
self.max = max
self._runs = 0
+ def replay(self):
+ self._runs = 0
+
def run(self, path):
self._runs += 1
if self._runs > self.max:
@@ -1618,6 +1621,9 @@ class Orderer(Task):
self._run = False
self._dependencies = []
+ def replay(self):
+ self._run = False
+
def run(self, path):
self._run = True
diff --git a/test.py b/test.py
index ecbb74d..1d8acc6 100755
--- a/test.py
+++ b/test.py
@@ -2461,6 +2461,15 @@ class RunCounterTest(unittest.TestCase):
task.run(self.path)
task.verify()
+ def test_reset_on_replay(self):
+ task = RunCounter(1, 1)
+ task.run(self.path)
+ self.assertRaises(AssertionError, task.run, self.path)
+ task.replay()
+ self.assertRaises(AssertionError, task.verify)
+ task.run(self.path)
+ self.assertRaises(AssertionError, task.run, self.path)
+
def test_recorder(self):
run_counter_recorder(self.mocker, self.event)
(task,) = self.event.get_tasks()
@@ -2535,6 +2544,17 @@ class RunCounterTest(unittest.TestCase):
self.assertEquals(len(events[2].get_tasks()), 1)
self.assertEquals(len(events[3].get_tasks()), 1)
+ def test_reset_on_replay_with_mock(self):
+ mock = self.mocker.mock()
+ mock()
+ self.mocker.count(1)
+ self.mocker.replay()
+ mock()
+ self.assertRaises(AssertionError, mock)
+ self.mocker.replay()
+ mock()
+ self.assertRaises(AssertionError, mock)
+
def test_is_standard_recorder(self):
self.assertTrue(run_counter_recorder in Mocker.get_recorders())
self.assertTrue(run_counter_removal_recorder in Mocker.get_recorders())
@@ -2671,6 +2691,22 @@ class OrdererTest(unittest.TestCase):
orderer.run(self.path)
self.assertTrue(orderer.has_run())
+ def test_reset_on_replay(self):
+ orderer = Orderer()
+ orderer.run(self.path)
+ orderer.replay()
+ self.assertFalse(orderer.has_run())
+
+ def test_reset_on_replay_with_mock(self):
+ self.mocker.add_recorder(path_matcher_recorder)
+ mock = self.mocker.mock()
+ self.mocker.order(mock(1), mock(2))
+ self.mocker.replay()
+ mock(1)
+ mock(2)
+ self.mocker.replay()
+ self.assertRaises(AssertionError, mock, 2)
+
def test_add_dependency_and_match(self):
orderer1 = Orderer()
orderer2 = Orderer()