diff --git a/Lib/test/symlink_support.py b/Lib/test/symlink_support.py
index eab7667..59fa6e6 100644
--- a/Lib/test/symlink_support.py
+++ b/Lib/test/symlink_support.py
@@ -12,7 +12,8 @@
 GetCurrentProcess = ctypes.windll.kernel32.GetCurrentProcess
 GetCurrentProcess.restype = wintypes.HANDLE
 OpenProcessToken = ctypes.windll.advapi32.OpenProcessToken
-OpenProcessToken.argtypes = (wintypes.HANDLE, wintypes.DWORD, ctypes.POINTER(wintypes.HANDLE))
+OpenProcessToken.argtypes = (wintypes.HANDLE, wintypes.DWORD,
+                             ctypes.POINTER(wintypes.HANDLE))
 OpenProcessToken.restype = wintypes.BOOL
 
 class LUID(ctypes.Structure):
@@ -91,7 +92,8 @@
 
     def get_array(self):
         array_type = LUID_AND_ATTRIBUTES*self.count
-        privileges = ctypes.cast(self.privileges, ctypes.POINTER(array_type)).contents
+        privileges = ctypes.cast(self.privileges,
+                                 ctypes.POINTER(array_type)).contents
         return privileges
 
     def __iter__(self):
@@ -133,7 +135,8 @@
 def get_symlink_luid():
     "Get the LUID for the SeCreateSymbolicLinkPrivilege"
     symlink_luid = LUID()
-    res = LookupPrivilegeValue(None, "SeCreateSymbolicLinkPrivilege", symlink_luid)
+    res = LookupPrivilegeValue(None, "SeCreateSymbolicLinkPrivilege",
+                               symlink_luid)
     if not res > 0:
         raise RuntimeError("Couldn't lookup privilege value")
     return symlink_luid
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index 4693164..81d05ab 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -1034,7 +1034,8 @@
 
 
 def skipUnlessWindows6(test):
-    if hasattr(sys, 'getwindowsversion') and sys.getwindowsversion().major >= 6:
+    if (hasattr(sys, 'getwindowsversion')
+        and sys.getwindowsversion().major >= 6):
         return test
     return unittest.skip("Requires Windows Vista or later")(test)
 
diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py
index 51f47db..ba3af1a 100644
--- a/Lib/test/test_platform.py
+++ b/Lib/test/test_platform.py
@@ -15,8 +15,8 @@
         # On Windows, the EXE needs to know where pythonXY.dll is at so we have
         # to add the directory to the path.
         if sys.platform == "win32":
-            os.environ["Path"] = "{};{}".format(os.path.dirname(sys.executable),
-                                                os.environ["Path"])
+            os.environ["Path"] = "{};{}".format(
+                os.path.dirname(sys.executable), os.environ["Path"])
 
         def get(python):
             cmd = [python, '-c',
diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py
index 8314e66..672f355 100644
--- a/Lib/test/test_sysconfig.py
+++ b/Lib/test/test_sysconfig.py
@@ -244,8 +244,8 @@
         # On Windows, the EXE needs to know where pythonXY.dll is at so we have
         # to add the directory to the path.
         if sys.platform == "win32":
-            os.environ["Path"] = "{};{}".format(os.path.dirname(sys.executable),
-                                                os.environ["Path"])
+            os.environ["Path"] = "{};{}".format(
+                os.path.dirname(sys.executable), os.environ["Path"])
 
         # Issue 7880
         def get(python):
diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
index 5c064fc..bc6db27 100644
--- a/Lib/test/test_tarfile.py
+++ b/Lib/test/test_tarfile.py
@@ -291,7 +291,8 @@
         self.assertTrue(self.tar.getmembers()[-1].name == "misc/eof",
                 "could not find all members")
 
-    @unittest.skipUnless(hasattr(os, "link"), "Missing hardlink implementation")
+    @unittest.skipUnless(hasattr(os, "link"),
+                         "Missing hardlink implementation")
     @support.skip_unless_symlink
     def test_extract_hardlink(self):
         # Test hardlink extraction (e.g. bug #857297).
@@ -1423,11 +1424,13 @@
     def test_hardlink_extraction2(self):
         self._test_link_extraction("./ustar/linktest2/lnktype")
 
-    @unittest.skipIf(hasattr(os, "symlink"), "Skip emulation if symlink exists")
+    @unittest.skipIf(hasattr(os, "symlink"),
+                     "Skip emulation if symlink exists")
     def test_symlink_extraction1(self):
         self._test_link_extraction("ustar/symtype")
 
-    @unittest.skipIf(hasattr(os, "symlink"), "Skip emulation if symlink exists")
+    @unittest.skipIf(hasattr(os, "symlink"),
+                     "Skip emulation if symlink exists")
     def test_symlink_extraction2(self):
         self._test_link_extraction("./ustar/linktest2/symtype")
 
