Skip to content

Commit b76cb17

Browse files
committed
Update tests
1 parent d431063 commit b76cb17

File tree

1 file changed

+73
-18
lines changed

1 file changed

+73
-18
lines changed

tests/unittest_brain.py

Lines changed: 73 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@
9797
import astroid.test_utils as test_utils
9898

9999

100+
def assertEqualMro(klass, expected_mro):
101+
"""Check mro names."""
102+
assert [member.name for member in klass.mro()] == expected_mro
103+
104+
100105
class HashlibTest(unittest.TestCase):
101106
def _assert_hashlib_class(self, class_obj):
102107
self.assertIn("update", class_obj)
@@ -1210,35 +1215,85 @@ def test_typing_alias_type(self):
12101215
Test that the type aliased thanks to typing._alias function are
12111216
correctly inferred.
12121217
"""
1218+
1219+
def check_metaclass(node: nodes.ClassDef):
1220+
meta = node.metaclass()
1221+
assert (
1222+
isinstance(meta, nodes.ClassDef)
1223+
and meta.name == "ABCMeta_typing"
1224+
and "ABCMeta" == meta.basenames[0]
1225+
and meta.locals.get("__getitem__") is not None
1226+
)
1227+
abc_meta = next(meta.bases[0].infer())
1228+
assert (
1229+
isinstance(abc_meta, nodes.ClassDef)
1230+
and abc_meta.name == "ABCMeta"
1231+
and abc_meta.locals.get("__getitem__") is None
1232+
)
1233+
12131234
node = builder.extract_node(
12141235
"""
12151236
from typing import TypeVar, MutableSet
12161237
12171238
T = TypeVar("T")
12181239
MutableSet[T]
12191240
1220-
class V(MutableSet[T]):
1241+
class Derived(MutableSet[T]):
12211242
pass
12221243
"""
12231244
)
12241245
inferred = next(node.infer())
1225-
mro_entries = list(inferred.mro())
1226-
self.assertIsInstance(mro_entries[0], astroid.ClassDef)
1227-
self.assertEqual(mro_entries[0].name, "V")
1228-
self.assertIsInstance(mro_entries[1], astroid.ClassDef)
1229-
self.assertEqual(mro_entries[1].name, "MutableSet")
1230-
self.assertIsInstance(mro_entries[2], astroid.ClassDef)
1231-
self.assertEqual(mro_entries[2].name, "Set")
1232-
self.assertIsInstance(mro_entries[3], astroid.ClassDef)
1233-
self.assertEqual(mro_entries[3].name, "Collection")
1234-
self.assertIsInstance(mro_entries[4], astroid.ClassDef)
1235-
self.assertEqual(mro_entries[4].name, "Sized")
1236-
self.assertIsInstance(mro_entries[5], astroid.ClassDef)
1237-
self.assertEqual(mro_entries[5].name, "Iterable")
1238-
self.assertIsInstance(mro_entries[6], astroid.ClassDef)
1239-
self.assertEqual(mro_entries[6].name, "Container")
1240-
self.assertIsInstance(mro_entries[7], astroid.ClassDef)
1241-
self.assertEqual(mro_entries[7].name, "object")
1246+
check_metaclass(inferred)
1247+
assertEqualMro(
1248+
inferred,
1249+
[
1250+
"Derived",
1251+
"MutableSet",
1252+
"Set",
1253+
"Collection",
1254+
"Sized",
1255+
"Iterable",
1256+
"Container",
1257+
"object",
1258+
],
1259+
)
1260+
1261+
node = builder.extract_node(
1262+
"""
1263+
import typing
1264+
class Derived(typing.OrderedDict[int, str]):
1265+
pass
1266+
"""
1267+
)
1268+
inferred = next(node.infer())
1269+
check_metaclass(inferred)
1270+
assertEqualMro(
1271+
inferred,
1272+
[
1273+
"Derived",
1274+
"OrderedDict",
1275+
"dict",
1276+
"object",
1277+
],
1278+
)
1279+
1280+
node = builder.extract_node(
1281+
"""
1282+
import typing
1283+
class Derived(typing.Pattern[str]):
1284+
pass
1285+
"""
1286+
)
1287+
inferred = next(node.infer())
1288+
check_metaclass(inferred)
1289+
assertEqualMro(
1290+
inferred,
1291+
[
1292+
"Derived",
1293+
"Pattern",
1294+
"object",
1295+
],
1296+
)
12421297

12431298

12441299
class ReBrainTest(unittest.TestCase):

0 commit comments

Comments
 (0)