File tree Expand file tree Collapse file tree 2 files changed +26
-5
lines changed Expand file tree Collapse file tree 2 files changed +26
-5
lines changed Original file line number Diff line number Diff line change @@ -579,14 +579,17 @@ def __delitem__(self, key: str) -> None:
579
579
raise ValueError ("cannot delete key in keywords dict" )
580
580
581
581
def __iter__ (self ) -> Iterator [str ]:
582
+ # Doesn't need to be fast.
582
583
yield from self ._markers
583
584
if self .parent is not None :
584
- yield from self .parent .keywords
585
+ for keyword in self .parent .keywords :
586
+ # self._marks and self.parent.keywords can have duplicates.
587
+ if keyword not in self ._markers :
588
+ yield keyword
585
589
586
590
def __len__ (self ) -> int :
587
- return len (self ._markers ) + (
588
- len (self .parent .keywords ) if self .parent is not None else 0
589
- )
591
+ # Doesn't need to be fast.
592
+ return sum (1 for keyword in self )
590
593
591
594
def __repr__ (self ) -> str :
592
595
return f"<NodeKeywords for node { self .node } >"
Original file line number Diff line number Diff line change @@ -793,7 +793,7 @@ def runtest(self):
793
793
res .stdout .fnmatch_lines (["*1 passed*" ])
794
794
795
795
796
- class TestNodekeywords :
796
+ class TestNodeKeywords :
797
797
def test_no_under (self , pytester : Pytester ) -> None :
798
798
modcol = pytester .getmodulecol (
799
799
"""
@@ -859,6 +859,24 @@ def test_failing_5():
859
859
reprec = pytester .inline_run ("-k " + expression )
860
860
reprec .assertoutcome (passed = num_matching_tests , failed = 0 )
861
861
862
+ def test_duplicates_handled_correctly (self , pytester : Pytester ) -> None :
863
+ item = pytester .getitem (
864
+ """
865
+ import pytest
866
+ pytestmark = pytest.mark.kw
867
+ class TestClass:
868
+ pytestmark = pytest.mark.kw
869
+ def test_method(self): pass
870
+ test_method.kw = 'method'
871
+ """ ,
872
+ "test_method" ,
873
+ )
874
+ assert item .parent is not None and item .parent .parent is not None
875
+ item .parent .parent .keywords ["kw" ] = "class"
876
+
877
+ assert item .keywords ["kw" ] == "method"
878
+ assert len (item .keywords ) == len (set (item .keywords ))
879
+
862
880
863
881
COLLECTION_ERROR_PY_FILES = dict (
864
882
test_01_failure = """
You can’t perform that action at this time.
0 commit comments