diff options
author | Claudiu Popa <pcmanticore@gmail.com> | 2020-03-10 10:33:35 +0100 |
---|---|---|
committer | Claudiu Popa <pcmanticore@gmail.com> | 2020-03-10 10:33:35 +0100 |
commit | 77e205dc64ead82e38bb901e08117ef6f6162c5c (patch) | |
tree | 8fbd409badeee2ed517ba368ee521a790c0f28fd /tests/unittest_inference.py | |
parent | 00bcf7b817ed459ee617b8af8843aca18d72fe04 (diff) | |
download | astroid-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.py | 23 |
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") |