Source code for badidatetime.tests.test_structure

# -*- coding: utf-8 -*-
#
# badidatetime/test/test_structures.py
#
__docformat__ = "restructuredtext en"

import unittest
import importlib
from zoneinfo import ZoneInfo

from .._structures import struct_time

datetime = importlib.import_module('badidatetime.datetime')


[docs] class TestStructures(unittest.TestCase): def __init__(self, name): super().__init__(name) #@unittest.skip("Temporarily skipped")
[docs] def test_struct_time(self): """ Test that the struct_time class can properly store short form Badi dates and times. """ err_msg0 = "struct_time() takes a 9 or 11-sequence ({}-sequence given)" err_msg1 = "Invalid isdst '{}', it must be in the range of [-1, 1]." tz = ZoneInfo('US/Eastern') coords0 = (35.5894, -78.7792, -5.0) tz0 = datetime.TZWithCoords.fromzoneinfo(tz, *coords0) coords1 = (35.5894, -78.7792, -4.0) tz1 = datetime.TZWithCoords.fromzoneinfo(tz, *coords1) # *** TODO *** Need to find offset from ZoneInfo data = ( ((181, 9, 6, 8, 45, 1, 0, 0, -1), None, False, ("structures.ShortFormStruct(tm_year=181, tm_mon=9, tm_mday=6, " "tm_hour=8, tm_min=45, tm_sec=1, tm_wday=0, tm_yday=0, " "tm_isdst=-1)", None, None)), ((1, 10, 10, 9, 6, 8, 45, 1, 0, 0, -1), None, False, ("structures.LongFormStruct(tm_kull_i_shay=1, tm_vahid=10, " "tm_year=10, tm_mon=9, tm_mday=6, tm_hour=8, tm_min=45, " "tm_sec=1, tm_wday=0, tm_yday=0, tm_isdst=-1)", None, None)), ((1, 1, 1, 0, 0, 0, 0, 0, -1), datetime.BADI, False, ('structures.ShortFormStruct(tm_year=1, tm_mon=1, tm_mday=1, ' 'tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=0, ' 'tm_isdst=0)', 'Asia/Tehran', 12600.0)), ((181, 9, 6, 8, 45, 1, 0, 0, -1), tz1, False, ('structures.ShortFormStruct(tm_year=181, tm_mon=9, tm_mday=6, ' 'tm_hour=8, tm_min=45, tm_sec=1, tm_wday=0, tm_yday=0, ' 'tm_isdst=1)', 'US/Eastern', -14400)), ((181, 15, 13, 0, 0, 0, 0, 0, -1), tz0, False, ('structures.ShortFormStruct(tm_year=181, tm_mon=15, tm_mday=13, ' 'tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=0, ' 'tm_isdst=0)', 'US/Eastern', -18000)), # Errors ((181, 9, 6, 8, 45, 1, 0, 0, -1, 999), None, True, err_msg0.format(10)), ((1, 1, 1, 1, 1, 1, 1, 1, -2), None, True, err_msg1.format(-2)), ((1, 1, 1, 1, 1, 1, 1, 1, 2), None, True, err_msg1.format(2)), ) msg = "Expected {}, with dt {}, found {}." for dt, tz, validity, expected_result in data: if validity: try: result = struct_time(dt, tzinfo=tz) except (AssertionError, TypeError, ValueError) as e: self.assertEqual(expected_result, str(e)) else: result = result if result else None raise AssertionError(f"With {dt} an error is not " f"raised, with result {result}.") else: result = struct_time(dt, tzinfo=tz) self.assertEqual(expected_result[0], str(result), msg.format( expected_result[0], dt, result)) self.assertEqual(expected_result[1], result.tm_zone, msg.format(expected_result[1], dt, result.tm_zone)) self.assertEqual(expected_result[2], result.tm_gmtoff, msg.format(expected_result[2], dt, result.tm_gmtoff))
#@unittest.skip("Temporarily skipped")
[docs] def test_short(self): """ Test that the short property returns the correct boolean. """ data = ( ((181, 9, 6, 8, 45, 1, 0, 0, -1), True), ((1, 10, 10, 9, 6, 8, 45, 1, 1, 0, -1), False), ) msg = "Expected {}, with date {}, found {}." for date, expected_result in data: result = struct_time(date).short self.assertEqual(expected_result, result, msg.format( expected_result, date, result))