emmental/tests/audio/test_stopwatch.py

88 lines
3.3 KiB
Python

# Copyright 2024 (c) Anna Schumaker.
"""Tests our StopWatch object."""
import datetime
import emmental.audio.stopwatch
import unittest
from gi.repository import GObject
@unittest.mock.patch.object(emmental.audio.stopwatch, "datetime")
class TestStopwatch(unittest.TestCase):
"""Our stopwatch test case."""
def setUp(self):
"""Set up common variables."""
self.now = datetime.datetime.now()
self.newdelta = datetime.timedelta
self.stopwatch = emmental.audio.stopwatch.StopWatch()
def test_init(self, mock_datetime: unittest.mock.Mock):
"""Test that the StopWatch was created properly."""
self.assertIsInstance(self.stopwatch, GObject.GObject)
def test_elapsed_time(self, mock_datetime: unittest.mock.Mock):
"""Test the elapsed_time() function."""
mock_datetime.timedelta = self.newdelta
self.assertEqual(self.stopwatch.elapsed_time(), 0.0)
mock_datetime.datetime.now.return_value = self.now
self.stopwatch.start()
soon = self.now + datetime.timedelta(seconds=12.345)
mock_datetime.datetime.now.return_value = soon
self.assertEqual(self.stopwatch.elapsed_time(), 12.345)
self.stopwatch._saved = datetime.timedelta(seconds=2)
self.assertEqual(self.stopwatch.elapsed_time(), 14.345)
self.stopwatch.stop()
self.assertEqual(self.stopwatch.elapsed_time(), 14.345)
self.stopwatch.reset()
self.assertEqual(self.stopwatch.elapsed_time(), 0.0)
def test_reset(self, mock_datetime: unittest.mock.Mock):
"""Test resetting the StopWatch."""
mock_datetime.datetime.now.return_value = self.now
self.stopwatch.start()
soon = self.now + datetime.timedelta(seconds=12.345)
mock_datetime.datetime.now.return_value = soon
self.stopwatch.stop()
self.stopwatch.reset()
self.assertIsNone(self.stopwatch._saved)
self.assertIsNone(self.stopwatch._started)
def test_start(self, mock_datetime: unittest.mock.Mock):
"""Test starting the StopWatch."""
self.assertIsNone(self.stopwatch._started)
mock_datetime.datetime.now.return_value = self.now
self.stopwatch.start()
self.assertEqual(self.stopwatch._started, self.now)
def test_stop(self, mock_datetime: unittest.mock.Mock):
"""Test stopping the StopWatch."""
self.assertIsNone(self.stopwatch._saved)
self.stopwatch.stop()
self.assertIsNone(self.stopwatch._saved)
mock_datetime.datetime.now.return_value = self.now
self.stopwatch.start()
delta1 = datetime.timedelta(seconds=12.345)
mock_datetime.datetime.now.return_value = self.now + delta1
self.stopwatch.stop()
self.assertEqual(self.stopwatch._saved, delta1)
self.assertIsNone(self.stopwatch._started)
now = self.now + delta1 + datetime.timedelta(seconds=2)
mock_datetime.datetime.now.return_value = now
self.stopwatch.start()
delta2 = datetime.timedelta(seconds=3)
mock_datetime.datetime.now.return_value = now + delta2
self.stopwatch.stop()
self.assertEqual(self.stopwatch._saved, delta1 + delta2)
self.stopwatch.stop()
self.assertEqual(self.stopwatch._saved, delta1 + delta2)