Merge "Provide the stopwatch elapsed method a maximum"

This commit is contained in:
Jenkins
2015-01-21 07:03:14 +00:00
committed by Gerrit Code Review
2 changed files with 28 additions and 8 deletions

View File

@@ -217,6 +217,23 @@ class StopWatchTest(test.TestCase):
watch.start()
self.assertEqual(0, len(watch.splits))
def test_elapsed_maximum(self):
watch = tt.StopWatch()
watch.start()
timeutils.advance_time_seconds(1)
self.assertEqual(1, watch.elapsed())
timeutils.advance_time_seconds(10)
self.assertEqual(11, watch.elapsed())
self.assertEqual(1, watch.elapsed(maximum=1))
watch.stop()
self.assertEqual(11, watch.elapsed())
timeutils.advance_time_seconds(10)
self.assertEqual(11, watch.elapsed())
self.assertEqual(0, watch.elapsed(maximum=-1))
class TableTest(test.TestCase):
def test_create_valid_no_rows(self):

View File

@@ -137,17 +137,20 @@ class StopWatch(object):
self.start()
return self
def elapsed(self):
def elapsed(self, maximum=None):
"""Returns how many seconds have elapsed."""
if self._state == self._STOPPED:
return max(0.0, float(timeutils.delta_seconds(self._started_at,
self._stopped_at)))
elif self._state == self._STARTED:
return max(0.0, float(timeutils.delta_seconds(self._started_at,
timeutils.utcnow())))
else:
if self._state not in (self._STOPPED, self._STARTED):
raise RuntimeError("Can not get the elapsed time of a stopwatch"
" if it has not been started/stopped")
if self._state == self._STOPPED:
elapsed = max(0.0, float(timeutils.delta_seconds(
self._started_at, self._stopped_at)))
else:
elapsed = max(0.0, float(timeutils.delta_seconds(
self._started_at, timeutils.utcnow())))
if maximum is not None and elapsed > maximum:
elapsed = max(0.0, maximum)
return elapsed
def __enter__(self):
"""Starts the watch."""