Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 38 additions & 13 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,22 +1,47 @@
language: python
python:
- "nightly"
- "3.7-dev"
- "3.6.2"
- "3.6.1"
- "3.6.0"
- "3.5.3"
- "3.5.2"
- "3.5.1"
- "3.5.0"
- "3.4"
- "2.7"

jobs:
include:
- name: "3.8-dev"
dist: xenial
python: 3.8-dev
- name: "3.7.3"
dist: xenial
python: 3.7.3
- name: "3.7.2"
dist: xenial
python: 3.7.2
- name: "3.7.1"
dist: xenial
python: 3.7.1
- name: "3.7.0"
dist: xenial
python: 3.7.0
- name: "3.6.2"
python: 3.6.2
- name: "3.6.1"
python: 3.6.1
- name: "3.6.0"
python: 3.6.0
- name: "3.5.3"
python: 3.5.3
- name: "3.5.2"
python: 3.5.2
- name: "3.5.1"
python: 3.5.1
- name: "3.5.0"
python: 3.5.0
- name: "3.4"
python: 3.4
- name: "2.7"
python: 2.7

install:
- pip install -r test-requirements.txt

script:
- export PYTHONPATH=`python -c "import sys; print('python2' if sys.version.startswith('2') else 'src')"`; py.test $PYTHONPATH
- export PYTHONPATH=`python -c "import sys; print('python2' if sys.version.startswith('2') else 'src')"`;
if [[ $TRAVIS_PYTHON_VERSION < '3.7' ]]; then py.test $PYTHONPATH; fi
- if [[ $TRAVIS_PYTHON_VERSION < '3.5' ]]; then python setup.py install; fi
- export PYTHONPATH=`python -c "import sys; print('typing_extensions/src_py2' if sys.version.startswith('2') else 'typing_extensions/src_py3')"`;
py.test $PYTHONPATH;
Expand Down
36 changes: 25 additions & 11 deletions typing_extensions/src_py3/test_typing_extensions.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,11 +190,15 @@ def test_basics(self):
Final[int][str]

def test_repr(self):
self.assertEqual(repr(Final), 'typing_extensions.Final')
if hasattr(typing, 'Final') and sys.version_info[:2] >= (3, 7):
mod_name = 'typing'
else:
mod_name = 'typing_extensions'
self.assertEqual(repr(Final), mod_name + '.Final')
cv = Final[int]
self.assertEqual(repr(cv), 'typing_extensions.Final[int]')
self.assertEqual(repr(cv), mod_name + '.Final[int]')
cv = Final[Employee]
self.assertEqual(repr(cv), 'typing_extensions.Final[%s.Employee]' % __name__)
self.assertEqual(repr(cv), mod_name + '.Final[%s.Employee]' % __name__)

@skipUnless(SUBCLASS_CHECK_FORBIDDEN, "Behavior added in typing 3.5.3")
def test_cannot_subclass(self):
Expand Down Expand Up @@ -242,7 +246,7 @@ def test_basics(self):

def test_illegal_parameters_do_not_raise_runtime_errors(self):
# Type checkers should reject these types, but we do not
# raise errors at runtime to maintain maximium flexibility
# raise errors at runtime to maintain maximum flexibility
Literal[int]
Literal[Literal[1, 2], Literal[4, 5]]
Literal[3j + 2, ..., ()]
Expand All @@ -255,11 +259,15 @@ def test_literals_inside_other_types(self):
List[Literal[("foo", "bar", "baz")]]

def test_repr(self):
self.assertEqual(repr(Literal[1]), "typing_extensions.Literal[1]")
self.assertEqual(repr(Literal[1, True, "foo"]), "typing_extensions.Literal[1, True, 'foo']")
self.assertEqual(repr(Literal[int]), "typing_extensions.Literal[int]")
self.assertEqual(repr(Literal), "typing_extensions.Literal")
self.assertEqual(repr(Literal[None]), "typing_extensions.Literal[None]")
if hasattr(typing, 'Literal'):
mod_name = 'typing'
else:
mod_name = 'typing_extensions'
self.assertEqual(repr(Literal[1]), mod_name + ".Literal[1]")
self.assertEqual(repr(Literal[1, True, "foo"]), mod_name + ".Literal[1, True, 'foo']")
self.assertEqual(repr(Literal[int]), mod_name + ".Literal[int]")
self.assertEqual(repr(Literal), mod_name + ".Literal")
self.assertEqual(repr(Literal[None]), mod_name + ".Literal[None]")

def test_cannot_init(self):
with self.assertRaises(TypeError):
Expand Down Expand Up @@ -1303,8 +1311,11 @@ def meth(self):
self.assertTrue(P._is_protocol)
self.assertTrue(PR._is_protocol)
self.assertTrue(PG._is_protocol)
with self.assertRaises(AttributeError):
if hasattr(typing, 'Protocol'):
self.assertFalse(P._is_runtime_protocol)
else:
with self.assertRaises(AttributeError):
self.assertFalse(P._is_runtime_protocol)
self.assertTrue(PR._is_runtime_protocol)
self.assertTrue(PG[int]._is_protocol)
self.assertEqual(typing_extensions._get_protocol_attrs(P), {'meth'})
Expand Down Expand Up @@ -1419,7 +1430,10 @@ def test_basics_keywords_syntax(self):

def test_typeddict_errors(self):
Emp = TypedDict('Emp', {'name': str, 'id': int})
self.assertEqual(TypedDict.__module__, 'typing_extensions')
if hasattr(typing, 'TypedDict'):
self.assertEqual(TypedDict.__module__, 'typing')
else:
self.assertEqual(TypedDict.__module__, 'typing_extensions')
jim = Emp(name='Jim', id=1)
with self.assertRaises(TypeError):
isinstance({}, Emp)
Expand Down
Loading