summaryrefslogtreecommitdiff
path: root/astroid/tests/unittest_brain.py
diff options
context:
space:
mode:
authorClaudiu Popa <pcmanticore@gmail.com>2019-09-26 09:19:40 +0200
committerClaudiu Popa <pcmanticore@gmail.com>2019-09-26 09:19:40 +0200
commit3e4eac76e9abfa0400fa07b58c61973ac5495bd2 (patch)
tree79eec3d7ae47e882c2793ad1073c0467ba14c0ac /astroid/tests/unittest_brain.py
parentda1a1d70b8a3668a59de863d32132db6eaffadb6 (diff)
downloadastroid-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.py33
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()