diff --git a/Lib/test/test_cfgparser.py b/Lib/test/test_cfgparser.py
index f7d9a26..a29da93 100644
--- a/Lib/test/test_cfgparser.py
+++ b/Lib/test/test_cfgparser.py
@@ -1235,6 +1235,59 @@
                     del section[default]
         return cf_copy
 
+
+class FakeFile:
+    def __init__(self):
+        file_path = support.findfile("cfgparser.1")
+        with open(file_path) as f:
+            self.lines = f.readlines()
+            self.lines.reverse()
+
+    def readline(self):
+        if len(self.lines):
+            return self.lines.pop()
+        return ''
+
+
+def readline_generator(f):
+    """As advised in Doc/library/configparser.rst."""
+    line = f.readline()
+    while line != '':
+        yield line
+        line = f.readline()
+
+
+class ReadFileTestCase(unittest.TestCase):
+    def test_file(self):
+        file_path = support.findfile("cfgparser.1")
+        parser = configparser.ConfigParser()
+        with open(file_path) as f:
+            parser.read_file(f)
+        self.assertTrue("Foo Bar" in parser)
+        self.assertTrue("foo" in parser["Foo Bar"])
+        self.assertEqual(parser["Foo Bar"]["foo"], "newbar")
+
+    def test_iterable(self):
+        lines = textwrap.dedent("""
+        [Foo Bar]
+        foo=newbar""").strip().split('\n')
+        parser = configparser.ConfigParser()
+        parser.read_file(lines)
+        self.assertTrue("Foo Bar" in parser)
+        self.assertTrue("foo" in parser["Foo Bar"])
+        self.assertEqual(parser["Foo Bar"]["foo"], "newbar")
+
+    def test_readline_generator(self):
+        """Issue #11670."""
+        parser = configparser.ConfigParser()
+        with self.assertRaises(TypeError):
+            parser.read_file(FakeFile())
+        parser.read_file(readline_generator(FakeFile()))
+        self.assertTrue("Foo Bar" in parser)
+        self.assertTrue("foo" in parser["Foo Bar"])
+        self.assertEqual(parser["Foo Bar"]["foo"], "newbar")
+
+
 class CoverageOneHundredTestCase(unittest.TestCase):
     """Covers edge cases in the codebase."""
 
@@ -1338,5 +1391,6 @@
         CompatibleTestCase,
         CopyTestCase,
         ConfigParserTestCaseNonStandardDefaultSection,
+        ReadFileTestCase,
         CoverageOneHundredTestCase,
         )
