diff --git a/Lib/test/test_MimeWriter.py b/Lib/test/test_MimeWriter.py
index b7d37b2..feca163 100644
--- a/Lib/test/test_MimeWriter.py
+++ b/Lib/test/test_MimeWriter.py
@@ -192,7 +192,7 @@
 '''
 
 class MimewriterTest(unittest.TestCase):
-    
+
     def test(self):
         buf = StringIO.StringIO()
 
diff --git a/Lib/test/test___future__.py b/Lib/test/test___future__.py
index b639d09..50a2c74 100644
--- a/Lib/test/test___future__.py
+++ b/Lib/test/test___future__.py
@@ -50,7 +50,7 @@
                 check(mandatory, "mandatory")
                 a(optional < mandatory,
                        "optional not less than mandatory, and mandatory not None")
-        
+
             a(hasattr(value, "compiler_flag"),
                    "feature is missing a .compiler_flag attr")
             a(isinstance(getattr(value, "compiler_flag"), int),
diff --git a/Lib/test/test_bufio.py b/Lib/test/test_bufio.py
index a3196ca..14a926a 100644
--- a/Lib/test/test_bufio.py
+++ b/Lib/test/test_bufio.py
@@ -36,7 +36,7 @@
                 os.unlink(test_support.TESTFN)
             except:
                 pass
-    
+
     def drive_one(self, pattern):
         for length in lengths:
             # Repeat string 'pattern' as often as needed to reach total length
diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py
index 21cd1b9..5b35a64 100644
--- a/Lib/test/test_codecs.py
+++ b/Lib/test/test_codecs.py
@@ -911,7 +911,7 @@
         self.assertEquals(f.readlines(), [u'\ud55c\n', u'\uae00'])
 
 class EncodedFileTest(unittest.TestCase):
-    
+
     def test_basic(self):
         f = StringIO.StringIO('\xed\x95\x9c\n\xea\xb8\x80')
         ef = codecs.EncodedFile(f, 'utf-16-le', 'utf-8')
@@ -1172,7 +1172,7 @@
                         decoder = codecs.getincrementaldecoder(encoding)("ignore")
                         decodedresult = u"".join(decoder.decode(c) for c in encodedresult)
                         self.assertEqual(decodedresult, s, "%r != %r (encoding=%r)" % (decodedresult, s, encoding))
-    
+
                         encodedresult = "".join(cencoder.encode(c) for c in s)
                         cdecoder = _testcapi.codec_incrementaldecoder(encoding, "ignore")
                         decodedresult = u"".join(cdecoder.decode(c) for c in encodedresult)
diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py
index 26c9392..69e1980 100644
--- a/Lib/test/test_grammar.py
+++ b/Lib/test/test_grammar.py
@@ -123,10 +123,10 @@
 
     # single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE
     # XXX can't test in a script -- this rule is only used when interactive
-    
+
     # file_input: (NEWLINE | stmt)* ENDMARKER
     # Being tested as this very moment this very module
-    
+
     # expr_input: testlist NEWLINE
     # XXX Hard to test -- used only in calls to input()
 
@@ -329,7 +329,7 @@
         # which is not available in unittest.
         save_stdout = sys.stdout
         sys.stdout = StringIO.StringIO()
-        
+
         print 1, 2, 3
         print 1, 2, 3,
         print
@@ -563,7 +563,7 @@
         elif 0: pass
         elif 0: pass
         else: pass
-    
+
     def testWhile(self):
         # 'while' test ':' suite ['else' ':' suite]
         while 0: pass
@@ -696,7 +696,7 @@
     def testSelectors(self):
         ### trailer: '(' [testlist] ')' | '[' subscript ']' | '.' NAME
         ### subscript: expr | [expr] ':' [expr]
-        
+
         import sys, time
         c = sys.path[0]
         x = time.time()
diff --git a/Lib/test/test_mailbox.py b/Lib/test/test_mailbox.py
index 40cf192..ab164d0 100644
--- a/Lib/test/test_mailbox.py
+++ b/Lib/test/test_mailbox.py
@@ -754,15 +754,15 @@
         key1 = self._box.add(msg)
         self._box.flush()
         self._box.close()
-        
+
         self._box = self._factory(self._path)
         self._box.lock()
         key2 = self._box.add(msg)
         self._box.flush()
         self.assert_(self._box._locked)
         self._box.close()
-        
-        
+
+
 
 class TestMbox(_TestMboxMMDF):
 
diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py
index 1458c82..a45fc34 100644
--- a/Lib/test/test_math.py
+++ b/Lib/test/test_math.py
@@ -152,7 +152,7 @@
 
         testmodf('modf(1.5)', math.modf(1.5), (0.5, 1.0))
         testmodf('modf(-1.5)', math.modf(-1.5), (-0.5, -1.0))
-    
+
     def testPow(self):
         self.assertRaises(TypeError, math.pow)
         self.ftest('pow(0,1)', math.pow(0,1), 0)
diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py
index 7253ff8..0b53823 100644
--- a/Lib/test/test_mmap.py
+++ b/Lib/test/test_mmap.py
@@ -218,7 +218,7 @@
         # Ensuring copy-on-write maps cannot be resized
         self.assertRaises(TypeError, m.resize, 2*mapsize)
         del m, f
-    
+
         # Ensuring invalid access parameter raises exception
         f = open(TESTFN, "r+b")
         self.assertRaises(ValueError, mmap.mmap, f.fileno(), mapsize, access=4)
diff --git a/Lib/test/test_poll.py b/Lib/test/test_poll.py
index 944b991..60cd3f4 100644
--- a/Lib/test/test_poll.py
+++ b/Lib/test/test_poll.py
@@ -21,7 +21,7 @@
     def test_poll1(self):
         # Basic functional test of poll object
         # Create a bunch of pipe and test that poll works with them.
-        
+
         p = select.poll()
 
         NUM_PIPES = 12
diff --git a/Lib/test/test_scope.py b/Lib/test/test_scope.py
index c703a06..a53b30f 100644
--- a/Lib/test/test_scope.py
+++ b/Lib/test/test_scope.py
@@ -8,7 +8,7 @@
 class ScopeTests(unittest.TestCase):
 
     def testSimpleNesting(self):
-        
+
         def make_adder(x):
             def adder(y):
                 return x + y
diff --git a/Lib/test/test_structmembers.py b/Lib/test/test_structmembers.py
index 3a08dc4..93dd2ac 100644
--- a/Lib/test/test_structmembers.py
+++ b/Lib/test/test_structmembers.py
@@ -43,11 +43,11 @@
     def has_warned(self):
         self.assertEqual(test.test_warnings.msg.category,
                          exceptions.RuntimeWarning.__name__)
-        
+
     def test_byte_max(self):
         ts.T_BYTE=CHAR_MAX+1
         self.has_warned()
-        
+
     def test_byte_min(self):
         ts.T_BYTE=CHAR_MIN-1
         self.has_warned()
@@ -68,7 +68,7 @@
         ts.T_USHORT=USHRT_MAX+1
         self.has_warned()
 
-        
+
 
 def test_main(verbose=None):
     test_support.run_unittest(
