diff --git a/python2/test_typing.py b/python2/test_typing.py index 829cd9de..d154dea0 100644 --- a/python2/test_typing.py +++ b/python2/test_typing.py @@ -2,8 +2,10 @@ import collections import contextlib +import os import pickle import re +import subprocess import sys from unittest import TestCase, main, SkipTest from copy import copy, deepcopy @@ -1896,6 +1898,16 @@ def foo(x): self.assertIsNone(typing.get_type_hints(foo)) + def test_typing_compiles_with_opt(self): + file_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), + 'typing.py') + try: + subprocess.check_output('python -OO {}'.format(file_path), + stderr=subprocess.STDOUT, + shell=True) + except subprocess.CalledProcessError: + self.fail('Module does not compile with optimize=2 (-OO flag).') + if __name__ == '__main__': main() diff --git a/src/test_typing.py b/src/test_typing.py index a2c96117..956f223e 100644 --- a/src/test_typing.py +++ b/src/test_typing.py @@ -1,7 +1,9 @@ import contextlib import collections +import os import pickle import re +import subprocess import sys from unittest import TestCase, main, skipUnless, SkipTest, expectedFailure from copy import copy, deepcopy @@ -2572,6 +2574,16 @@ def test_all(self): self.assertIn('SupportsBytes', a) self.assertIn('SupportsComplex', a) + def test_typing_compiles_with_opt(self): + file_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), + 'typing.py') + try: + subprocess.check_output('python -OO {}'.format(file_path), + stderr=subprocess.STDOUT, + shell=True) + except subprocess.CalledProcessError: + self.fail('Module does not compile with optimize=2 (-OO flag).') + if __name__ == '__main__': main() diff --git a/typing_extensions/src_py2/test_typing_extensions.py b/typing_extensions/src_py2/test_typing_extensions.py index 14d18ddd..63ede5c1 100644 --- a/typing_extensions/src_py2/test_typing_extensions.py +++ b/typing_extensions/src_py2/test_typing_extensions.py @@ -4,6 +4,7 @@ import contextlib import collections import pickle +import subprocess from unittest import TestCase, main, skipUnless from typing_extensions import NoReturn, ClassVar @@ -740,6 +741,16 @@ def test_typing_extensions_defers_when_possible(self): getattr(typing_extensions, item), getattr(typing, item)) + def test_typing_extensions_compiles_with_opt(self): + file_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), + 'typing_extensions.py') + try: + subprocess.check_output('python -OO {}'.format(file_path), + stderr=subprocess.STDOUT, + shell=True) + except subprocess.CalledProcessError: + self.fail('Module does not compile with optimize=2 (-OO flag).') + if __name__ == '__main__': main() diff --git a/typing_extensions/src_py3/test_typing_extensions.py b/typing_extensions/src_py3/test_typing_extensions.py index c3235cae..2d295f8b 100644 --- a/typing_extensions/src_py3/test_typing_extensions.py +++ b/typing_extensions/src_py3/test_typing_extensions.py @@ -4,6 +4,7 @@ import contextlib import collections import pickle +import subprocess from unittest import TestCase, main, skipUnless from typing import TypeVar, Optional from typing import T, KT, VT # Not in __all__. @@ -1208,6 +1209,7 @@ class E: class AllTests(BaseTestCase): + def test_typing_extensions_includes_standard(self): a = typing_extensions.__all__ self.assertIn('ClassVar', a) @@ -1244,6 +1246,16 @@ def test_typing_extensions_defers_when_possible(self): getattr(typing_extensions, item), getattr(typing, item)) + def test_typing_extensions_compiles_with_opt(self): + file_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), + 'typing_extensions.py') + try: + subprocess.check_output('python -OO {}'.format(file_path), + stderr=subprocess.STDOUT, + shell=True) + except subprocess.CalledProcessError: + self.fail('Module does not compile with optimize=2 (-OO flag).') + if __name__ == '__main__': main() diff --git a/typing_extensions/src_py3/typing_extensions.py b/typing_extensions/src_py3/typing_extensions.py index b4606672..e0026533 100644 --- a/typing_extensions/src_py3/typing_extensions.py +++ b/typing_extensions/src_py3/typing_extensions.py @@ -981,9 +981,9 @@ def __new__(cls, *args, **kwds): if OLD_GENERICS: return _generic_new(_next_in_mro(cls), cls, *args, **kwds) return _generic_new(cls.__next_in_mro__, cls, *args, **kwds) - - Protocol.__doc__ = Protocol.__doc__.format(bases="Protocol, Generic[T]" if - OLD_GENERICS else "Protocol[T]") + if Protocol.__doc__ is not None: + Protocol.__doc__ = Protocol.__doc__.format(bases="Protocol, Generic[T]" if + OLD_GENERICS else "Protocol[T]") def runtime(cls): """Mark a protocol class as a runtime protocol, so that it