# 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)