Issue #22777: Test pickling with all protocols.
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index 6f91842..9d62779 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -3300,7 +3300,7 @@
             pass
 
         for p in pickle, cPickle:
-            for bin in 0, 1:
+            for bin in range(p.HIGHEST_PROTOCOL + 1):
                 for cls in C, C1, C2:
                     s = p.dumps(cls, bin)
                     cls2 = p.loads(s)
@@ -3358,30 +3358,31 @@
                 __slots__ = ['a']
             class D(C):
                 pass
-            try:
-                pickle.dumps(C())
-            except TypeError:
-                pass
-            else:
-                self.fail("should fail: pickle C instance - %s" % base)
-            try:
-                cPickle.dumps(C())
-            except TypeError:
-                pass
-            else:
-                self.fail("should fail: cPickle C instance - %s" % base)
-            try:
-                pickle.dumps(C())
-            except TypeError:
-                pass
-            else:
-                self.fail("should fail: pickle D instance - %s" % base)
-            try:
-                cPickle.dumps(D())
-            except TypeError:
-                pass
-            else:
-                self.fail("should fail: cPickle D instance - %s" % base)
+            for proto in range(2):
+                try:
+                    pickle.dumps(C(), proto)
+                except TypeError:
+                    pass
+                else:
+                    self.fail("should fail: pickle C instance - %s" % base)
+                try:
+                    cPickle.dumps(C(), proto)
+                except TypeError:
+                    pass
+                else:
+                    self.fail("should fail: cPickle C instance - %s" % base)
+                try:
+                    pickle.dumps(C(), proto)
+                except TypeError:
+                    pass
+                else:
+                    self.fail("should fail: pickle D instance - %s" % base)
+                try:
+                    cPickle.dumps(D(), proto)
+                except TypeError:
+                    pass
+                else:
+                    self.fail("should fail: cPickle D instance - %s" % base)
             # Give C a nice generic __getstate__ and __setstate__
             class C(base):
                 __slots__ = ['a']
@@ -3404,34 +3405,38 @@
                 pass
             # Now it should work
             x = C()
-            y = pickle.loads(pickle.dumps(x))
-            self.assertNotHasAttr(y, 'a')
-            y = cPickle.loads(cPickle.dumps(x))
-            self.assertNotHasAttr(y, 'a')
+            for proto in range(pickle.HIGHEST_PROTOCOL + 1):
+                y = pickle.loads(pickle.dumps(x, proto))
+                self.assertNotHasAttr(y, 'a')
+                y = cPickle.loads(cPickle.dumps(x, proto))
+                self.assertNotHasAttr(y, 'a')
             x.a = 42
-            y = pickle.loads(pickle.dumps(x))
-            self.assertEqual(y.a, 42)
-            y = cPickle.loads(cPickle.dumps(x))
-            self.assertEqual(y.a, 42)
+            for proto in range(pickle.HIGHEST_PROTOCOL + 1):
+                y = pickle.loads(pickle.dumps(x, proto))
+                self.assertEqual(y.a, 42)
+                y = cPickle.loads(cPickle.dumps(x, proto))
+                self.assertEqual(y.a, 42)
             x = D()
             x.a = 42
             x.b = 100
-            y = pickle.loads(pickle.dumps(x))
-            self.assertEqual(y.a + y.b, 142)
-            y = cPickle.loads(cPickle.dumps(x))
-            self.assertEqual(y.a + y.b, 142)
+            for proto in range(pickle.HIGHEST_PROTOCOL + 1):
+                y = pickle.loads(pickle.dumps(x, proto))
+                self.assertEqual(y.a + y.b, 142)
+                y = cPickle.loads(cPickle.dumps(x, proto))
+                self.assertEqual(y.a + y.b, 142)
             # A subclass that adds a slot should also work
             class E(C):
                 __slots__ = ['b']
             x = E()
             x.a = 42
             x.b = "foo"
-            y = pickle.loads(pickle.dumps(x))
-            self.assertEqual(y.a, x.a)
-            self.assertEqual(y.b, x.b)
-            y = cPickle.loads(cPickle.dumps(x))
-            self.assertEqual(y.a, x.a)
-            self.assertEqual(y.b, x.b)
+            for proto in range(pickle.HIGHEST_PROTOCOL + 1):
+                y = pickle.loads(pickle.dumps(x, proto))
+                self.assertEqual(y.a, x.a)
+                self.assertEqual(y.b, x.b)
+                y = cPickle.loads(cPickle.dumps(x, proto))
+                self.assertEqual(y.a, x.a)
+                self.assertEqual(y.b, x.b)
 
     def test_binary_operator_override(self):
         # Testing overrides of binary operations...