Commit 46441912 authored by Tzer-jen Wei's avatar Tzer-jen Wei

add tests for list, set, dict

parent d47a25b5
...@@ -66,9 +66,6 @@ class TestJediTyper(TransformTest): ...@@ -66,9 +66,6 @@ class TestJediTyper(TransformTest):
a = i + 1 a = i + 1
''' '''
types = self._test(code) types = self._test(code)
if not types:
# old Jedi version
return
self.assertIn((None, (1, 0)), types) self.assertIn((None, (1, 0)), types)
variables = types.pop((None, (1, 0))) variables = types.pop((None, (1, 0)))
self.assertFalse(types) self.assertFalse(types)
...@@ -120,6 +117,92 @@ class TestJediTyper(TransformTest): ...@@ -120,6 +117,92 @@ class TestJediTyper(TransformTest):
self.assertFalse(types) self.assertFalse(types)
self.assertEqual({'a': set(['int']), 'i': set(['int'])}, variables) self.assertEqual({'a': set(['int']), 'i': set(['int'])}, variables)
def test_typing_global_list(self):
code = '''\
a = [x for x in range(10)]
b = list(range(10))
c = a + b
d = [0]*10
'''
types = self._test(code)
self.assertIn((None, (1, 0)), types)
variables = types.pop((None, (1, 0)))
self.assertFalse(types)
self.assertEqual({'a': set(['list']), 'b': set(['list']), 'c': set(['list']), 'd': set(['list'])}, variables)
def test_typing_function_list(self):
code = '''\
def func(x):
a = [[], []]
b = [0]* 10 + a
c = a[0]
print(func([0]*100))
'''
types = self._test(code)
self.assertIn(('func', (1, 0)), types)
variables = types.pop(('func', (1, 0)))
self.assertFalse(types)
self.assertEqual({'a': set(['list']), 'b': set(['list']), 'c': set(['list']), 'x': set(['list'])}, variables)
def test_typing_global_dict(self):
code = '''\
a = dict()
b = {i: i**2 for i in range(10)}
c = a
'''
types = self._test(code)
self.assertIn((None, (1, 0)), types)
variables = types.pop((None, (1, 0)))
self.assertFalse(types)
self.assertEqual({'a': set(['dict']), 'b': set(['dict']), 'c': set(['dict'])}, variables)
def test_typing_function_dict(self):
code = '''\
def func(x):
a = dict()
b = {i: i**2 for i in range(10)}
c = x
print(func({1:2, 'x':7}))
'''
types = self._test(code)
self.assertIn(('func', (1, 0)), types)
variables = types.pop(('func', (1, 0)))
self.assertFalse(types)
self.assertEqual({'a': set(['dict']), 'b': set(['dict']), 'c': set(['dict']), 'x': set(['dict'])}, variables)
def test_typing_global_set(self):
code = '''\
a = set()
# b = {i for i in range(10)} # jedi does not support set comprehension yet
c = a
d = {1,2,3}
e = a | b
'''
types = self._test(code)
self.assertIn((None, (1, 0)), types)
variables = types.pop((None, (1, 0)))
self.assertFalse(types)
self.assertEqual({'a': set(['set']), 'c': set(['set']), 'd': set(['set']), 'e': set(['set'])}, variables)
def test_typing_function_set(self):
code = '''\
def func(x):
a = set()
# b = {i for i in range(10)} # jedi does not support set comprehension yet
c = a
d = a | b
print(func({1,2,3}))
'''
types = self._test(code)
self.assertIn(('func', (1, 0)), types)
variables = types.pop(('func', (1, 0)))
self.assertFalse(types)
self.assertEqual({'a': set(['set']), 'c': set(['set']), 'd': set(['set']), 'x': set(['set'])}, variables)
class TestTypeInjection(TestJediTyper): class TestTypeInjection(TestJediTyper):
""" """
......
...@@ -11,7 +11,7 @@ from itertools import chain ...@@ -11,7 +11,7 @@ from itertools import chain
import jedi import jedi
from jedi.parser.tree import Module, ImportName from jedi.parser.tree import Module, ImportName
from jedi.evaluate.representation import Function, Instance, Class from jedi.evaluate.representation import Function, Instance, Class
from jedi.evaluate.iterable import Array,Generator, GeneratorComprehension from jedi.evaluate.iterable import ArrayMixin, GeneratorComprehension
from Cython.Utils import open_source_file from Cython.Utils import open_source_file
...@@ -52,7 +52,7 @@ def analyse(source_path=None, code=None): ...@@ -52,7 +52,7 @@ def analyse(source_path=None, code=None):
type_name = 'object' type_name = 'object'
else: else:
type_name = name_type.base.obj.__name__ type_name = name_type.base.obj.__name__
elif isinstance(name_type, Array): elif isinstance(name_type, ArrayMixin):
type_name = name_type.type type_name = name_type.type
elif isinstance(name_type, GeneratorComprehension): elif isinstance(name_type, GeneratorComprehension):
type_name = None type_name = None
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment