diff --git a/Lib/test/test_rlcompleter.py b/Lib/test/test_rlcompleter.py
new file mode 100644
index 0000000..1c5fcc6
--- /dev/null
+++ b/Lib/test/test_rlcompleter.py
@@ -0,0 +1,73 @@
+from test import test_support as support
+import unittest
+import __builtin__ as builtins
+import rlcompleter
+
+class CompleteMe(object):
+    """ Trivial class used in testing rlcompleter.Completer. """
+    spam = 1
+
+
+class TestRlcompleter(unittest.TestCase):
+    def setUp(self):
+        self.stdcompleter = rlcompleter.Completer()
+        self.completer = rlcompleter.Completer(dict(spam=int,
+                                                    egg=str,
+                                                    CompleteMe=CompleteMe))
+
+        # forces stdcompleter to bind builtins namespace
+        self.stdcompleter.complete('', 0)
+
+    def test_namespace(self):
+        class A(dict):
+            pass
+        class B(list):
+            pass
+
+        self.assertTrue(self.stdcompleter.use_main_ns)
+        self.assertFalse(self.completer.use_main_ns)
+        self.assertFalse(rlcompleter.Completer(A()).use_main_ns)
+        self.assertRaises(TypeError, rlcompleter.Completer, B((1,)))
+
+    def test_global_matches(self):
+        # test with builtins namespace
+        self.assertEqual(self.stdcompleter.global_matches('di'),
+                         [x+'(' for x in dir(builtins) if x.startswith('di')])
+        self.assertEqual(self.stdcompleter.global_matches('st'),
+                         [x+'(' for x in dir(builtins) if x.startswith('st')])
+        self.assertEqual(self.stdcompleter.global_matches('akaksajadhak'), [])
+
+        # test with a customized namespace
+        self.assertEqual(self.completer.global_matches('CompleteM'),
+                         ['CompleteMe('])
+        self.assertEqual(self.completer.global_matches('eg'),
+                         ['egg('])
+        # XXX: see issue5256
+        self.assertEqual(self.completer.global_matches('CompleteM'),
+                         ['CompleteMe('])
+
+    def test_attr_matches(self):
+        # test with builtins namespace
+        self.assertEqual(self.stdcompleter.attr_matches('str.s'),
+                         ['str.{}('.format(x) for x in dir(str)
+                          if x.startswith('s')])
+        self.assertEqual(self.stdcompleter.attr_matches('tuple.foospamegg'), [])
+
+        # test with a customized namespace
+        self.assertEqual(self.completer.attr_matches('CompleteMe.sp'),
+                         ['CompleteMe.spam'])
+        self.assertEqual(self.completer.attr_matches('Completeme.egg'), [])
+
+        CompleteMe.me = CompleteMe
+        self.assertEqual(self.completer.attr_matches('CompleteMe.me.me.sp'),
+                         ['CompleteMe.me.me.spam'])
+        self.assertEqual(self.completer.attr_matches('egg.s'),
+                         ['egg.{}('.format(x) for x in dir(str)
+                          if x.startswith('s')])
+
+def test_main():
+    support.run_unittest(TestRlcompleter)
+
+
+if __name__ == '__main__':
+    test_main()
diff --git a/Lib/test/test_sundry.py b/Lib/test/test_sundry.py
index 3aade6d..6e2b797 100644
--- a/Lib/test/test_sundry.py
+++ b/Lib/test/test_sundry.py
@@ -65,7 +65,6 @@
             import pstats
             import py_compile
             import rexec
-            import rlcompleter
             import sched
             import sndhdr
             import statvfs
diff --git a/Misc/ACKS b/Misc/ACKS
index e3aa41c..888afc8 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -575,6 +575,7 @@
 Piet van Oostrum
 Jason Orendorff
 Douglas Orr
+Michele Orrù
 Denis S. Otkidach
 Michael Otteneder
 R. M. Oudkerk
diff --git a/Misc/NEWS b/Misc/NEWS
index dd5252c..3876b4a 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -185,6 +185,9 @@
 Tests
 -----
 
+- Issue #9496: Provide a test suite for the rlcompleter module.  Patch by
+  Michele Orrù.
+
 - Issue #8605: Skip test_gdb if Python is compiled with optimizations.
 
 Documentation
