|
103 | 103 | runtime_checkable, |
104 | 104 | ) |
105 | 105 |
|
106 | | -if sys.version_info >= (3, 14): |
107 | | - from test.support import EqualToForwardRef |
108 | | -else: |
109 | | - EqualToForwardRef = typing.ForwardRef |
110 | | - |
111 | 106 | NoneType = type(None) |
112 | 107 | T = TypeVar("T") |
113 | 108 | KT = TypeVar("KT") |
@@ -444,6 +439,48 @@ def assertNotIsSubclass(self, cls, class_or_tuple, msg=None): |
444 | 439 | raise self.failureException(message) |
445 | 440 |
|
446 | 441 |
|
| 442 | +class EqualToForwardRef: |
| 443 | + """Helper to ease use of annotationlib.ForwardRef in tests. |
| 444 | +
|
| 445 | + This checks only attributes that can be set using the constructor. |
| 446 | +
|
| 447 | + """ |
| 448 | + |
| 449 | + def __init__( |
| 450 | + self, |
| 451 | + arg, |
| 452 | + *, |
| 453 | + module=None, |
| 454 | + owner=None, |
| 455 | + is_class=False, |
| 456 | + ): |
| 457 | + self.__forward_arg__ = arg |
| 458 | + self.__forward_is_class__ = is_class |
| 459 | + self.__forward_module__ = module |
| 460 | + self.__owner__ = owner |
| 461 | + |
| 462 | + def __eq__(self, other): |
| 463 | + if not isinstance(other, (EqualToForwardRef, typing.ForwardRef)): |
| 464 | + return NotImplemented |
| 465 | + if sys.version_info >= (3, 14) and self.__owner__ != other.__owner__: |
| 466 | + return False |
| 467 | + return ( |
| 468 | + self.__forward_arg__ == other.__forward_arg__ |
| 469 | + and self.__forward_module__ == other.__forward_module__ |
| 470 | + and self.__forward_is_class__ == other.__forward_is_class__ |
| 471 | + ) |
| 472 | + |
| 473 | + def __repr__(self): |
| 474 | + extra = [] |
| 475 | + if self.__forward_module__ is not None: |
| 476 | + extra.append(f", module={self.__forward_module__!r}") |
| 477 | + if self.__forward_is_class__: |
| 478 | + extra.append(", is_class=True") |
| 479 | + if sys.version_info >= (3, 14) and self.__owner__ is not None: |
| 480 | + extra.append(f", owner={self.__owner__!r}") |
| 481 | + return f"EqualToForwardRef({self.__forward_arg__!r}{''.join(extra)})" |
| 482 | + |
| 483 | + |
447 | 484 | class Employee: |
448 | 485 | pass |
449 | 486 |
|
|
0 commit comments