From 7e27bf6bde9b979909686f62fd4bdd531a0a6bed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20Elio=20Petten=C3=B2?= Date: Sun, 3 Nov 2019 05:35:09 +0000 Subject: [PATCH] Allow datetime() with a delta=timedelta() in assert(Not)AlmostEqual(s). (#3426) While the documentation does not seem to make this particularly obvious, it is allowed. --- stdlib/2/unittest.pyi | 17 +++++++++++++++++ stdlib/3/unittest/case.pyi | 10 ++++++++++ 2 files changed, 27 insertions(+) diff --git a/stdlib/2/unittest.pyi b/stdlib/2/unittest.pyi index d8d499af9..948e141a4 100644 --- a/stdlib/2/unittest.pyi +++ b/stdlib/2/unittest.pyi @@ -6,6 +6,7 @@ from typing import (Any, Callable, Dict, FrozenSet, Iterable, Iterator, List, NoReturn, Optional, overload, Pattern, Sequence, Set, Text, TextIO, Tuple, Type, TypeVar, Union) from abc import abstractmethod, ABCMeta +import datetime import types _T = TypeVar('_T') @@ -96,11 +97,19 @@ class TestCase(Testable): def assertAlmostEqual(self, first: float, second: float, *, msg: Any = ..., delta: float = ...) -> None: ... @overload + def assertAlmostEqual(self, first: datetime.datetime, + second: datetime.datetime, *, + msg: Any = ..., delta: datetime.timedelta = ...) -> None: ... + @overload def assertAlmostEquals(self, first: float, second: float, places: int = ..., msg: Any = ...) -> None: ... @overload def assertAlmostEquals(self, first: float, second: float, *, msg: Any = ..., delta: float = ...) -> None: ... + @overload + def assertAlmostEquals(self, first: datetime.datetime, + second: datetime.datetime, *, + msg: Any = ..., delta: datetime.timedelta = ...) -> None: ... def failUnlessAlmostEqual(self, first: float, second: float, places: int = ..., msg: object = ...) -> None: ... @overload @@ -110,11 +119,19 @@ class TestCase(Testable): def assertNotAlmostEqual(self, first: float, second: float, *, msg: Any = ..., delta: float = ...) -> None: ... @overload + def assertNotAlmostEqual(self, first: datetime.datetime, + second: datetime.datetime, *, + msg: Any = ..., delta: datetime.timedelta = ...) -> None: ... + @overload def assertNotAlmostEquals(self, first: float, second: float, places: int = ..., msg: Any = ...) -> None: ... @overload def assertNotAlmostEquals(self, first: float, second: float, *, msg: Any = ..., delta: float = ...) -> None: ... + @overload + def assertNotAlmostEquals(self, first: datetime.datetime, + second: datetime.datetime, *, + msg: Any = ..., delta: datetime.timedelta = ...) -> None: ... def failIfAlmostEqual(self, first: float, second: float, places: int = ..., msg: object = ..., delta: float = ...) -> None: ... diff --git a/stdlib/3/unittest/case.pyi b/stdlib/3/unittest/case.pyi index 7590407a9..9a074cb84 100644 --- a/stdlib/3/unittest/case.pyi +++ b/stdlib/3/unittest/case.pyi @@ -1,3 +1,4 @@ +import datetime import logging import sys import unittest.result @@ -117,9 +118,14 @@ class TestCase: self, logger: Optional[logging.Logger] = ..., level: Union[int, str, None] = ... ) -> _AssertLogsContext: ... + @overload def assertAlmostEqual(self, first: float, second: float, places: int = ..., msg: Any = ..., delta: float = ...) -> None: ... @overload + def assertAlmostEqual(self, first: datetime.datetime, second: datetime.datetime, + places: int = ..., msg: Any = ..., + delta: datetime.timedelta = ...) -> None: ... + @overload def assertNotAlmostEqual(self, first: float, second: float, *, msg: Any = ...) -> None: ... @overload @@ -128,6 +134,10 @@ class TestCase: @overload def assertNotAlmostEqual(self, first: float, second: float, *, msg: Any = ..., delta: float = ...) -> None: ... + @overload + def assertNotAlmostEqual(self, first: datetime.datetime, second: datetime.datetime, + places: int = ..., msg: Any = ..., + delta: datetime.timedelta = ...) -> None: ... def assertRegex(self, text: AnyStr, expected_regex: Union[AnyStr, Pattern[AnyStr]], msg: Any = ...) -> None: ... def assertNotRegex(self, text: AnyStr, unexpected_regex: Union[AnyStr, Pattern[AnyStr]],