From 53b5f64b4be8ba51dc5c9168f071c67da19bed40 Mon Sep 17 00:00:00 2001
From: Anthony Sottile <asottile@umich.edu>
Date: Fri, 2 Oct 2020 19:57:16 -0700
Subject: [PATCH] py36+: resolve py36 TODOs

---
 src/_pytest/mark/structures.py | 20 +++++++++-----------
 testing/test_assertion.py      |  5 ++---
 2 files changed, 11 insertions(+), 14 deletions(-)

diff --git a/src/_pytest/mark/structures.py b/src/_pytest/mark/structures.py
index 6be4725d6..14c7c1776 100644
--- a/src/_pytest/mark/structures.py
+++ b/src/_pytest/mark/structures.py
@@ -8,6 +8,7 @@ from typing import Iterable
 from typing import Iterator
 from typing import List
 from typing import Mapping
+from typing import MutableMapping
 from typing import NamedTuple
 from typing import Optional
 from typing import Sequence
@@ -94,8 +95,7 @@ class ParameterSet(
         if isinstance(marks, MarkDecorator):
             marks = (marks,)
         else:
-            # TODO(py36): Change to collections.abc.Collection.
-            assert isinstance(marks, (collections.abc.Sequence, set))
+            assert isinstance(marks, collections.abc.Collection)
 
         if id is not None:
             if not isinstance(id, str):
@@ -475,13 +475,12 @@ class MarkGenerator:
 
     # See TYPE_CHECKING above.
     if TYPE_CHECKING:
-        # TODO(py36): Change to builtin annotation syntax.
-        skip = _SkipMarkDecorator(Mark("skip", (), {}))
-        skipif = _SkipifMarkDecorator(Mark("skipif", (), {}))
-        xfail = _XfailMarkDecorator(Mark("xfail", (), {}))
-        parametrize = _ParametrizeMarkDecorator(Mark("parametrize", (), {}))
-        usefixtures = _UsefixturesMarkDecorator(Mark("usefixtures", (), {}))
-        filterwarnings = _FilterwarningsMarkDecorator(Mark("filterwarnings", (), {}))
+        skip: _SkipMarkDecorator
+        skipif: _SkipifMarkDecorator
+        xfail: _XfailMarkDecorator
+        parametrize: _ParametrizeMarkDecorator
+        usefixtures: _UsefixturesMarkDecorator
+        filterwarnings: _FilterwarningsMarkDecorator
 
     def __getattr__(self, name: str) -> MarkDecorator:
         if name[0] == "_":
@@ -527,9 +526,8 @@ class MarkGenerator:
 MARK_GEN = MarkGenerator()
 
 
-# TODO(py36): inherit from typing.MutableMapping[str, Any].
 @final
-class NodeKeywords(collections.abc.MutableMapping):  # type: ignore[type-arg]
+class NodeKeywords(MutableMapping[str, Any]):
     def __init__(self, node: "Node") -> None:
         self.node = node
         self.parent = node.parent
diff --git a/testing/test_assertion.py b/testing/test_assertion.py
index 258be48b8..d6dc9fc98 100644
--- a/testing/test_assertion.py
+++ b/testing/test_assertion.py
@@ -1,8 +1,8 @@
-import collections.abc
 import sys
 import textwrap
 from typing import Any
 from typing import List
+from typing import MutableSequence
 from typing import Optional
 
 import attr
@@ -637,8 +637,7 @@ class TestAssert_reprcompare:
 
     def test_Sequence(self) -> None:
         # Test comparing with a Sequence subclass.
-        # TODO(py36): Inherit from typing.MutableSequence[int].
-        class TestSequence(collections.abc.MutableSequence):  # type: ignore[type-arg]
+        class TestSequence(MutableSequence[int]):
             def __init__(self, iterable):
                 self.elements = list(iterable)