From 28057f9da051541e633150044a16bbe617768309 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Piotr=20Ma=C5=9Blanka?= <piotr.maslanka@henrietta.com.pl>
Date: Sun, 23 Apr 2023 09:23:53 +0200
Subject: [PATCH] fix reset_and_stop, v2.23.2

---
 CHANGELOG.md            |  1 +
 satella/__init__.py     |  2 +-
 satella/time/measure.py | 18 ++++++++++++++++++
 tests/test_time.py      | 13 +++++++++++++
 4 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5960160f..d6099df8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,4 @@
 # v2.23.2
 
 * minor changes to DictObject's documentation
+* added methods reset_and_stop and property stopped to measure
diff --git a/satella/__init__.py b/satella/__init__.py
index 30f94a2c..c75c4fcb 100644
--- a/satella/__init__.py
+++ b/satella/__init__.py
@@ -1 +1 @@
-__version__ = '2.23.2a1'
+__version__ = '2.23.2'
diff --git a/satella/time/measure.py b/satella/time/measure.py
index b56dcba4..08220a43 100644
--- a/satella/time/measure.py
+++ b/satella/time/measure.py
@@ -145,6 +145,15 @@ class measure:
         self.reset()
         self.start()
 
+    def reset_and_stop(self) -> None:
+        """
+        Syntactic sugar for calling stop() and then reset()
+
+        .. versionadded:: 2.23.2
+        """
+        self.stop()
+        self.reset()
+
     def has_exceeded(self, value: float) -> bool:
         """
         Return whether the timer has exceeded provided value.
@@ -245,6 +254,15 @@ class measure:
             self.start()
         return self
 
+    @property
+    def stopped(self) -> bool:
+        """
+        Whether this counter is already stopped
+
+        .. versionadded:: 2.23.2
+        """
+        return self.stopped_on is not None
+
     def stop(self) -> None:
         """
         Stop counting time
diff --git a/tests/test_time.py b/tests/test_time.py
index 7088544c..a97c9c13 100644
--- a/tests/test_time.py
+++ b/tests/test_time.py
@@ -144,6 +144,19 @@ class TestTime(unittest.TestCase):
             time.sleep(1)
             self.assertTrue(measurement.timeouted)
 
+    def test_measure_reset_and_stop(self):
+        m1 = measure(create_stopped=True)
+        m1.start()
+        time.sleep(0.5)
+        self.assertFalse(m1.stopped)
+        self.assertGreaterEqual(m1(), 0.5)
+        m1.reset_and_stop()
+        self.assertTrue(m1.stopped)
+        self.assertEqual(m1(), 0)
+        m1.start()
+        time.sleep(0.5)
+        self.assertGreaterEqual(m1(), 0.5)
+
     @unittest.skipIf('win' in sys.platform, 'Needs POSIX to run')
     def test_sleep(self):
         sleep(-2)
-- 
GitLab