Source code for evennia.utils.tests.test_gametime
"""
Unit tests for the utilities of the evennia.utils.gametime module.
"""
import time
import unittest
from unittest.mock import Mock
from django.conf import settings
from django.test import TestCase
from evennia.utils import gametime
[docs]class TestGametime(TestCase):
[docs] def setUp(self) -> None:
self.time = time.time
self._SERVER_EPOCH = gametime._SERVER_EPOCH
time.time = Mock(return_value=1555595378.0)
gametime._SERVER_EPOCH = None
gametime.SERVER_RUNTIME = 600.0
gametime.SERVER_START_TIME = time.time() - 300
gametime.SERVER_RUNTIME_LAST_UPDATED = time.time() - 30
gametime.TIMEFACTOR = 5.0
self.timescripts = []
[docs] def tearDown(self) -> None:
time.time = self.time
gametime._SERVER_EPOCH = self._SERVER_EPOCH
gametime.SERVER_RUNTIME_LAST_UPDATED = 0.0
gametime.SERVER_RUNTIME = 0.0
gametime.SERVER_START_TIME = 0.0
gametime.TIMEFACTOR = settings.TIME_FACTOR
for script in self.timescripts:
script.stop()
[docs] def test_runtime(self):
self.assertAlmostEqual(gametime.runtime(), 630.0)
[docs] def test_server_epoch(self):
self.assertAlmostEqual(gametime.server_epoch(), time.time() - 630.0)
[docs] def test_uptime(self):
self.assertAlmostEqual(gametime.uptime(), 300.0)
[docs] def test_game_epoch_no_setting(self):
self.assertAlmostEqual(gametime.game_epoch(), gametime.server_epoch())
[docs] def test_game_epoch_setting(self):
with self.settings(TIME_GAME_EPOCH=0):
self.assertEqual(gametime.game_epoch(), 0)
[docs] def test_gametime_simple(self):
self.assertAlmostEqual(gametime.gametime(), 630.0 * 5)
[docs] def test_gametime_absolute(self):
self.assertAlmostEqual(gametime.gametime(absolute=True), 1555597898.0)
[docs] def test_gametime_downtimes(self):
gametime.IGNORE_DOWNTIMES = True
self.assertAlmostEqual(gametime.gametime(), 630 * 5.0)
gametime.IGNORE_DOWNTIMES = False
[docs] def test_real_seconds_until(self):
# using the gametime value above, we are working from the following
# datetime: datetime.datetime(2019, 4, 18, 14, 31, 38, 245449)
self.assertAlmostEqual(gametime.real_seconds_until(sec=48), 2)
self.assertAlmostEqual(gametime.real_seconds_until(min=32), 12)
self.assertAlmostEqual(gametime.real_seconds_until(hour=15), 720)
self.assertAlmostEqual(gametime.real_seconds_until(day=19), 17280)
self.assertAlmostEqual(gametime.real_seconds_until(month=5), 518400)
self.assertAlmostEqual(gametime.real_seconds_until(year=2020), 6324480)
[docs] def test_real_seconds_until_behind(self):
self.assertAlmostEqual(gametime.real_seconds_until(sec=28), 10)
self.assertAlmostEqual(gametime.real_seconds_until(min=30), 708)
self.assertAlmostEqual(gametime.real_seconds_until(hour=13), 16560)
self.assertAlmostEqual(gametime.real_seconds_until(day=17), 501120)
self.assertAlmostEqual(gametime.real_seconds_until(month=1), 4752000)
[docs] def test_real_seconds_until_leap_year(self):
self.assertAlmostEqual(gametime.real_seconds_until(month=3), 5788800)
[docs] def test_schedule(self):
callback = Mock()
script = gametime.schedule(callback, day=19)
self.timescripts.append(script)
self.assertIsInstance(script, gametime.TimeScript)
self.assertAlmostEqual(script.interval, 17280)
self.assertEqual(script.repeats, 1)
[docs] def test_repeat_schedule(self):
callback = Mock()
script = gametime.schedule(callback, repeat=True, min=32)
self.timescripts.append(script)
self.assertIsInstance(script, gametime.TimeScript)
self.assertAlmostEqual(script.interval, 12)
self.assertEqual(script.repeats, 0)