summaryrefslogtreecommitdiff
path: root/tests/unittest_inference.py
diff options
context:
space:
mode:
authorClaudiu Popa <pcmanticore@gmail.com>2020-03-10 10:33:35 +0100
committerClaudiu Popa <pcmanticore@gmail.com>2020-03-10 10:33:35 +0100
commit77e205dc64ead82e38bb901e08117ef6f6162c5c (patch)
tree8fbd409badeee2ed517ba368ee521a790c0f28fd /tests/unittest_inference.py
parent00bcf7b817ed459ee617b8af8843aca18d72fe04 (diff)
downloadastroid-git-77e205dc64ead82e38bb901e08117ef6f6162c5c.tar.gz
Add a new EvaluatedObject container
This container is used to store values that have already been evaluated. For instance, 79d5a3a783cf0b5a729e4e467508e955a0cca55f added support for inferring `tuple()` call arguments, but as a result, the `elts` of a `Tuple` can be objects not *references*. As a result, `Tuple.elts` can contain class objects rather than references (names) to class object. The `EvaluatedObject` helps with that, as we still have to call `.infer()` (albeit a no-op) to grab the inferred value of an element.
Diffstat (limited to 'tests/unittest_inference.py')
-rw-r--r--tests/unittest_inference.py23
1 files changed, 19 insertions, 4 deletions
diff --git a/tests/unittest_inference.py b/tests/unittest_inference.py
index dd833e29..dfae1b8f 100644
--- a/tests/unittest_inference.py
+++ b/tests/unittest_inference.py
@@ -5171,10 +5171,25 @@ def test_builtin_inference_list_of_exceptions():
inferred = next(node.infer())
assert isinstance(inferred, nodes.Tuple)
assert len(inferred.elts) == 2
- assert isinstance(inferred.elts[0], nodes.ClassDef)
- assert inferred.elts[0].name == "ValueError"
- assert isinstance(inferred.elts[1], nodes.ClassDef)
- assert inferred.elts[1].name == "TypeError"
+ assert isinstance(inferred.elts[0], nodes.EvaluatedObject)
+ assert isinstance(inferred.elts[0].value, nodes.ClassDef)
+ assert inferred.elts[0].value.name == "ValueError"
+ assert isinstance(inferred.elts[1], nodes.EvaluatedObject)
+ assert isinstance(inferred.elts[1].value, nodes.ClassDef)
+ assert inferred.elts[1].value.name == "TypeError"
+
+ # Test that inference of evaluated objects returns what is expected
+ first_elem = next(inferred.elts[0].infer())
+ assert isinstance(first_elem, nodes.ClassDef)
+ assert first_elem.name == "ValueError"
+
+ second_elem = next(inferred.elts[1].infer())
+ assert isinstance(second_elem, nodes.ClassDef)
+ assert second_elem.name == "TypeError"
+
+ # Test that as_string() also works
+ as_string = inferred.as_string()
+ assert as_string.strip() == "(ValueError, TypeError)"
@test_utils.require_version(minver="3.6")