diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
index f64964d..ad6f320 100644
--- a/Lib/test/test_tarfile.py
+++ b/Lib/test/test_tarfile.py
@@ -217,6 +217,84 @@
     pass
 
 
+class ListTest(ReadTest, unittest.TestCase):
+
+    # Override setUp to use default encoding (UTF-8)
+    def setUp(self):
+        self.tar = tarfile.open(self.tarname, mode=self.mode)
+
+    def test_list(self):
+        tio = io.TextIOWrapper(io.BytesIO(), 'ascii', newline='\n')
+        with support.swap_attr(sys, 'stdout', tio):
+            self.tar.list(verbose=False)
+        out = tio.detach().getvalue()
+        self.assertIn(b'ustar/conttype', out)
+        self.assertIn(b'ustar/regtype', out)
+        self.assertIn(b'ustar/lnktype', out)
+        self.assertIn(b'ustar' + (b'/12345' * 40) + b'67/longname', out)
+        self.assertIn(b'./ustar/linktest2/symtype', out)
+        self.assertIn(b'./ustar/linktest2/lnktype', out)
+        # Make sure it puts trailing slash for directory
+        self.assertIn(b'ustar/dirtype/', out)
+        self.assertIn(b'ustar/dirtype-with-size/', out)
+        # Make sure it is able to print unencodable characters
+        self.assertIn(br'ustar/umlauts-'
+                      br'\udcc4\udcd6\udcdc\udce4\udcf6\udcfc\udcdf', out)
+        self.assertIn(br'misc/regtype-hpux-signed-chksum-'
+                      br'\udcc4\udcd6\udcdc\udce4\udcf6\udcfc\udcdf', out)
+        self.assertIn(br'misc/regtype-old-v7-signed-chksum-'
+                      br'\udcc4\udcd6\udcdc\udce4\udcf6\udcfc\udcdf', out)
+        self.assertIn(br'pax/bad-pax-\udce4\udcf6\udcfc', out)
+        self.assertIn(br'pax/hdrcharset-\udce4\udcf6\udcfc', out)
+        # Make sure it prints files separated by one newline without any
+        # 'ls -l'-like accessories if verbose flag is not being used
+        # ...
+        # ustar/conttype
+        # ustar/regtype
+        # ...
+        self.assertRegex(out, br'ustar/conttype ?\r?\n'
+                              br'ustar/regtype ?\r?\n')
+        # Make sure it does not print the source of link without verbose flag
+        self.assertNotIn(b'link to', out)
+        self.assertNotIn(b'->', out)
+
+    def test_list_verbose(self):
+        tio = io.TextIOWrapper(io.BytesIO(), 'ascii', newline='\n')
+        with support.swap_attr(sys, 'stdout', tio):
+            self.tar.list(verbose=True)
+        out = tio.detach().getvalue()
+        # Make sure it prints files separated by one newline with 'ls -l'-like
+        # accessories if verbose flag is being used
+        # ...
+        # ?rw-r--r-- tarfile/tarfile     7011 2003-01-06 07:19:43 ustar/conttype
+        # ?rw-r--r-- tarfile/tarfile     7011 2003-01-06 07:19:43 ustar/regtype
+        # ...
+        self.assertRegex(out, (br'-rw-r--r-- tarfile/tarfile\s+7011 '
+                               br'\d{4}-\d\d-\d\d\s+\d\d:\d\d:\d\d '
+                               br'ustar/\w+type ?\r?\n') * 2)
+        # Make sure it prints the source of link with verbose flag
+        self.assertIn(b'ustar/symtype -> regtype', out)
+        self.assertIn(b'./ustar/linktest2/symtype -> ../linktest1/regtype', out)
+        self.assertIn(b'./ustar/linktest2/lnktype link to '
+                      b'./ustar/linktest1/regtype', out)
+        self.assertIn(b'gnu' + (b'/123' * 125) + b'/longlink link to gnu' +
+                      (b'/123' * 125) + b'/longname', out)
+        self.assertIn(b'pax' + (b'/123' * 125) + b'/longlink link to pax' +
+                      (b'/123' * 125) + b'/longname', out)
+
+
+class GzipListTest(GzipTest, ListTest):
+    pass
+
+
+class Bz2ListTest(Bz2Test, ListTest):
+    pass
+
+
+class LzmaListTest(LzmaTest, ListTest):
+    pass
+
+
 class CommonReadTest(ReadTest):
 
     def test_empty_tarfile(self):
