bpo-39353: Deprecate the binhex module (GH-18025)

Deprecate binhex4 and hexbin4 standards. Deprecate the binhex module
and the following binascii functions:

* b2a_hqx(), a2b_hqx()
* rlecode_hqx(), rledecode_hqx()
* crc_hqx()
diff --git a/Lib/test/test_binascii.py b/Lib/test/test_binascii.py
index 08de5c9..649edbe 100644
--- a/Lib/test/test_binascii.py
+++ b/Lib/test/test_binascii.py
@@ -4,6 +4,7 @@
 import binascii
 import array
 import re
+from test import support
 
 # Note: "*_hex" functions are aliases for "(un)hexlify"
 b2a_functions = ['b2a_base64', 'b2a_hex', 'b2a_hqx', 'b2a_qp', 'b2a_uu',
@@ -36,6 +37,7 @@
             self.assertTrue(hasattr(getattr(binascii, name), '__call__'))
             self.assertRaises(TypeError, getattr(binascii, name))
 
+    @support.ignore_warnings(category=DeprecationWarning)
     def test_returned_value(self):
         # Limit to the minimum of all limits (b2a_uu)
         MAX_ALL = 45
@@ -179,6 +181,7 @@
         with self.assertRaises(TypeError):
             binascii.b2a_uu(b"", True)
 
+    @support.ignore_warnings(category=DeprecationWarning)
     def test_crc_hqx(self):
         crc = binascii.crc_hqx(self.type2test(b"Test the CRC-32 of"), 0)
         crc = binascii.crc_hqx(self.type2test(b" this string."), crc)
@@ -198,6 +201,7 @@
 
         self.assertRaises(TypeError, binascii.crc32)
 
+    @support.ignore_warnings(category=DeprecationWarning)
     def test_hqx(self):
         # Perform binhex4 style RLE-compression
         # Then calculate the hexbin4 binary-to-ASCII translation
@@ -208,6 +212,7 @@
         res = binascii.rledecode_hqx(b)
         self.assertEqual(res, self.rawdata)
 
+    @support.ignore_warnings(category=DeprecationWarning)
     def test_rle(self):
         # test repetition with a repetition longer than the limit of 255
         data = (b'a' * 100 + b'b' + b'c' * 300)
@@ -354,6 +359,7 @@
         self.assertEqual(b2a_qp(type2test(b'a.\n')), b'a.\n')
         self.assertEqual(b2a_qp(type2test(b'.a')[:-1]), b'=2E')
 
+    @support.ignore_warnings(category=DeprecationWarning)
     def test_empty_string(self):
         # A test for SF bug #1022953.  Make sure SystemError is not raised.
         empty = self.type2test(b'')
@@ -378,6 +384,7 @@
         # crc_hqx needs 2 arguments
         self.assertRaises(TypeError, binascii.crc_hqx, "test", 0)
 
+    @support.ignore_warnings(category=DeprecationWarning)
     def test_unicode_a2b(self):
         # Unicode strings are accepted by a2b_* functions.
         MAX_ALL = 45
@@ -416,6 +423,21 @@
         self.assertEqual(binascii.b2a_base64(b, newline=False),
                          b'aGVsbG8=')
 
+    def test_deprecated_warnings(self):
+        with self.assertWarns(DeprecationWarning):
+            self.assertEqual(binascii.b2a_hqx(b'abc'), b'B@*M')
+        with self.assertWarns(DeprecationWarning):
+            self.assertEqual(binascii.a2b_hqx(b'B@*M'), (b'abc', 0))
+
+        with self.assertWarns(DeprecationWarning):
+            self.assertEqual(binascii.rlecode_hqx(b'a' * 10), b'a\x90\n')
+
+        with self.assertWarns(DeprecationWarning):
+            self.assertEqual(binascii.rledecode_hqx(b'a\x90\n'), b'a' * 10)
+
+        with self.assertWarns(DeprecationWarning):
+            self.assertEqual(binascii.crc_hqx(b'abc', 0), 40406)
+
 
 class ArrayBinASCIITest(BinASCIITest):
     def type2test(self, s):
diff --git a/Lib/test/test_binhex.py b/Lib/test/test_binhex.py
index 2f3d53a..86ca37c 100644
--- a/Lib/test/test_binhex.py
+++ b/Lib/test/test_binhex.py
@@ -3,10 +3,12 @@
    Uses the mechanism of the python binhex module
    Based on an original test by Roger E. Masse.
 """
-import binhex
 import unittest
 from test import support
 
+with support.check_warnings(('', DeprecationWarning)):
+    import binhex
+
 
 class BinHexTestCase(unittest.TestCase):