diff options
author | Claudiu Popa <pcmanticore@gmail.com> | 2019-09-26 09:19:40 +0200 |
---|---|---|
committer | Claudiu Popa <pcmanticore@gmail.com> | 2019-09-26 09:19:40 +0200 |
commit | 3e4eac76e9abfa0400fa07b58c61973ac5495bd2 (patch) | |
tree | 79eec3d7ae47e882c2793ad1073c0467ba14c0ac /astroid/tests/unittest_brain.py | |
parent | da1a1d70b8a3668a59de863d32132db6eaffadb6 (diff) | |
download | astroid-git-3e4eac76e9abfa0400fa07b58c61973ac5495bd2.tar.gz |
A transform for the builtin `dataclasses` module was added.
This should address various `dataclasses` issues that were surfaced
even more after the release of pylint 2.4.0.
In the previous versions of `astroid`, annotated assign nodes were
allowed to be retrieved via `getattr()` but that no longer happens
with the latest `astroid` release, as those attribute are not actual
attributes, but rather virtual ones, thus an operation such as `getattr()`
does not make sense for them.
Diffstat (limited to 'astroid/tests/unittest_brain.py')
-rw-r--r-- | astroid/tests/unittest_brain.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/astroid/tests/unittest_brain.py b/astroid/tests/unittest_brain.py index a045b194..9b29a280 100644 --- a/astroid/tests/unittest_brain.py +++ b/astroid/tests/unittest_brain.py @@ -1927,5 +1927,38 @@ def test_crypt_brain(): assert attr in module +@pytest.mark.skipif(sys.version_info < (3, 7), reason="Dataclasses were added in 3.7") +def test_dataclasses(): + code = """ + import dataclasses + from dataclasses import dataclass + + @dataclass + class InventoryItem: + name: str + quantity_on_hand: int = 0 + + @dataclasses.dataclass + class Other: + name: str + """ + + module = astroid.parse(code) + first = module["InventoryItem"] + second = module["Other"] + + name = first.getattr("name") + assert len(name) == 1 + assert isinstance(name[0], astroid.Unknown) + + quantity_on_hand = first.getattr("quantity_on_hand") + assert len(quantity_on_hand) == 1 + assert isinstance(quantity_on_hand[0], astroid.Unknown) + + name = second.getattr("name") + assert len(name) == 1 + assert isinstance(name[0], astroid.Unknown) + + if __name__ == "__main__": unittest.main() |