Finally fixed all black box tests in python 2.

This commit is contained in:
Dave Halter
2016-12-03 13:37:51 +01:00
parent 2edbe44d64
commit f355c04cae
4 changed files with 28 additions and 4 deletions

View File

@@ -540,6 +540,21 @@ class Evaluator(object):
return element return element
def create_context(self, base_context, node): def create_context(self, base_context, node):
def parent_scope(node):
while True:
node = node.parent
if node.is_scope():
return node
elif node.type in ('argument', 'testlist_comp'):
if node.children[1].type == 'comp_for':
return node.children[1]
elif node.type == 'dictorsetmaker':
for n in node.children[1:4]:
# In dictionaries it can be pretty much anything.
if node.children[1].type == 'comp_for':
return node
def from_scope_node(scope_node, child_is_funcdef=None): def from_scope_node(scope_node, child_is_funcdef=None):
if scope_node == base_node: if scope_node == base_node:
return base_context return base_context
@@ -573,5 +588,5 @@ class Evaluator(object):
if node.is_scope(): if node.is_scope():
scope_node = node scope_node = node
else: else:
scope_node = node.get_parent_scope() scope_node = parent_scope(node)
return from_scope_node(scope_node) return from_scope_node(scope_node)

View File

@@ -77,7 +77,7 @@ def _load_faked_module(module):
def _search_scope(scope, obj_name): def _search_scope(scope, obj_name):
for s in scope.subscopes: for s in scope.subscopes:
if str(s.name) == obj_name: if s.name.value == obj_name:
return s return s
@@ -191,6 +191,14 @@ def _get_faked(module, obj, name=None):
def get_faked(evaluator, module, obj, name=None, parent_context=None): def get_faked(evaluator, module, obj, name=None, parent_context=None):
if parent_context and parent_context.classdef is not None:
# Try to search in already clearly defined stuff.
found = _search_scope(parent_context.classdef, name)
if found is not None:
return found
else:
raise FakeDoesNotExist
faked, fake_module = _get_faked(module and module.obj, obj, name) faked, fake_module = _get_faked(module and module.obj, obj, name)
if module is not None: if module is not None:
module.used_names = fake_module.used_names module.used_names = fake_module.used_names

View File

@@ -1,8 +1,9 @@
def proxy(object, callback=None): def proxy(object, callback=None):
return object return object
class weakref(): class ref():
def __init__(self, object, callback=None): def __init__(self, object, callback=None):
self.__object = object self.__object = object
def __call__(self): def __call__(self):
return self.__object return self.__object

View File

@@ -123,7 +123,7 @@ A(3).test2()
# ----------------- # -----------------
# list comprehensions # comprehensions
# ----------------- # -----------------
def from_comprehension(foo): def from_comprehension(foo):