From 3bbf4d24275eb62ff8268bd2b7bd29926276ceaa Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Tue, 23 Feb 2021 01:48:29 +0100 Subject: [PATCH] Add test cases for duplicate bases error --- tests/unittest_scoped_nodes.py | 56 ++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/tests/unittest_scoped_nodes.py b/tests/unittest_scoped_nodes.py index 104cdae1a7..7ef68a3e77 100644 --- a/tests/unittest_scoped_nodes.py +++ b/tests/unittest_scoped_nodes.py @@ -1436,6 +1436,62 @@ class C(scope.A, scope.B): ) self.assertEqualMro(cls, ["C", "A", "B", "object"]) + @test_utils.require_version("3.7", "3.9") + def test_mro_with_duplicate_generic_alias(self): + """Catch false positive. Assert no error is thrown.""" + cls = builder.extract_node( + """ + import abc + from typing import Sized, Iterable + class AbstractRoute(abc.ABC): + pass + class AbstractResource(Sized, Iterable["AbstractRoute"]): + pass + class IndexView(AbstractResource): + def __init__(self): + self.var = 1 + """ + ) + self.assertEqualMro( + cls, + [ + "IndexView", + "AbstractResource", + "_GenericAlias", + "_Final", + "_GenericAlias", + "object", + ], + ) + + @test_utils.require_version("3.9") + def test_mro_with_duplicate_generic_alias_2(self): + cls = builder.extract_node( + """ + import abc + from typing import Sized, Iterable + class AbstractRoute(abc.ABC): + pass + class AbstractResource(Sized, Iterable["AbstractRoute"]): + pass + class IndexView(AbstractResource): + def __init__(self): + self.var = 1 + """ + ) + self.assertEqualMro( + cls, + [ + "IndexView", + "AbstractResource", + "_SpecialGenericAlias", + "_BaseGenericAlias", + "_Final", + "_SpecialGenericAlias", + "object", + ], + ) + def test_generator_from_infer_call_result_parent(self): func = builder.extract_node( """