|
1 | | -from datetime import date, datetime, time, timezone |
2 | | -from os import popen |
| 1 | +from datetime import date, datetime, time, timedelta, timezone |
| 2 | +from os import chdir, getcwd, popen |
| 3 | +from pathlib import Path |
3 | 4 | from sys import version_info |
4 | | -from unittest import TestCase |
| 5 | +from unittest import TestCase, skipIf |
5 | 6 |
|
6 | | -from datetype import ( |
7 | | - AwareDateTime, |
8 | | - NaiveDateTime, |
9 | | - NaiveTime, |
10 | | - Time, |
11 | | - aware, |
12 | | - naive, |
13 | | -) |
| 7 | +from datetype import AwareDateTime, NaiveDateTime, NaiveTime, Time, aware, naive |
| 8 | + |
| 9 | +TEST_DATA = (Path(__file__) / "..").resolve() |
| 10 | +while not (TEST_DATA / ".git").is_dir(): |
| 11 | + TEST_DATA = TEST_DATA / ".." |
| 12 | +TEST_DATA = TEST_DATA.resolve() |
14 | 13 |
|
15 | 14 |
|
16 | 15 | class DateTypeTests(TestCase): |
@@ -57,15 +56,34 @@ def test_mypy_output(self) -> None: |
57 | 56 | Make sure that we get expected mypy errors. |
58 | 57 | """ |
59 | 58 | mypy_command = "mypy" |
60 | | - expected_file_name = "expected_mypy" |
| 59 | + expected_file_name = ( |
| 60 | + TEST_DATA / f"expected_mypy{'_37' if (version_info < (3, 8)) else ''}" |
| 61 | + ) |
61 | 62 | if version_info < (3, 9): |
62 | 63 | mypy_command += " --ignore-missing-imports" # zoneinfo |
63 | | - if version_info[:2] == (3, 7): |
64 | | - expected_file_name += "_37" |
65 | 64 |
|
66 | | - with popen(f"{mypy_command} tryit.py") as f: |
| 65 | + cwd = getcwd() |
| 66 | + try: |
| 67 | + chdir(TEST_DATA) |
| 68 | + it = popen(f"{mypy_command} tryit.py") |
| 69 | + finally: |
| 70 | + chdir(cwd) |
| 71 | + with it as f: |
67 | 72 | actual = f.read() |
68 | | - with open(f"{expected_file_name}.txt") as f: |
| 73 | + with expected_file_name.with_suffix(".txt").open() as f: |
69 | 74 | expected = f.read() |
70 | 75 | self.maxDiff = 9999 |
71 | 76 | self.assertEqual(expected, actual) |
| 77 | + |
| 78 | + @skipIf(version_info < (3, 9), "ZoneInfo") |
| 79 | + def test_none_aware(self) -> None: |
| 80 | + """ |
| 81 | + L{aware} with no argument will produce a ZoneInfo. |
| 82 | + """ |
| 83 | + from zoneinfo import ZoneInfo |
| 84 | + |
| 85 | + zi = ZoneInfo("US/Pacific") |
| 86 | + stddt = datetime(2025, 2, 13, 15, 35, 13, 574354, tzinfo=zi) |
| 87 | + awareified = aware(stddt) |
| 88 | + self.assertIs(awareified.tzinfo, zi) |
| 89 | + self.assertEqual(awareified.tzinfo.dst(stddt), timedelta(0)) |
0 commit comments