diff --git a/AUTHORS.rst b/AUTHORS.rst index 28cd64e..36afa42 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -22,3 +22,4 @@ Patches and Suggestions - `staticdev `_ - `Marcin Sulikowski `_ - `Ashish Patil `_ +- `Victor Ferrer `_ diff --git a/freezegun/api.py b/freezegun/api.py index 43b117e..366d2cb 100644 --- a/freezegun/api.py +++ b/freezegun/api.py @@ -496,6 +496,13 @@ def __init__(self, time_to_freeze, start): def __call__(self): return self.time_to_freeze + (real_datetime.now() - self.start) + def tick(self, delta=datetime.timedelta(seconds=1)): + if isinstance(delta, numbers.Real): + # noinspection PyTypeChecker + self.move_to(self.time_to_freeze + datetime.timedelta(seconds=delta)) + else: + self.move_to(self.time_to_freeze + delta) + def move_to(self, target_datetime): """Moves frozen date to the given ``target_datetime``""" self.start = real_datetime.now() diff --git a/tests/test_ticking.py b/tests/test_ticking.py index 434a6e7..e33b5d2 100644 --- a/tests/test_ticking.py +++ b/tests/test_ticking.py @@ -63,6 +63,22 @@ def test_ticking_time(): assert time.time() > 1326585599.0 +@utils.cpython_only +def test_ticking_tick(): + with freeze_time("Jan 14th, 2012, 23:59:59", tick=True) as ft: + ft.tick(61) + time.sleep(0.001) # Deal with potential clock resolution problems + assert datetime.datetime.now().replace( + second=0, microsecond=0 + ) == datetime.datetime(2012, 1, 15, 0, 1, 0) + + ft.tick(delta=datetime.timedelta(minutes=2)) + time.sleep(0.001) # Deal with potential clock resolution problems + assert datetime.datetime.now().replace( + second=0, microsecond=0 + ) == datetime.datetime(2012, 1, 15, 0, 3, 0) + + @utils.cpython_only def test_ticking_move_to(): with freeze_time("Jan 14th, 2012, 23:59:59", tick=True) as ft: