diff --git a/Lib/test/badsyntax_future3.py b/Lib/test/badsyntax_future3.py
index 166628c..f1c8417 100644
--- a/Lib/test/badsyntax_future3.py
+++ b/Lib/test/badsyntax_future3.py
@@ -7,4 +7,4 @@
         return x + y
     return g
 
-print f(2)(4)
+result = f(2)(4)
diff --git a/Lib/test/badsyntax_future4.py b/Lib/test/badsyntax_future4.py
index 805263b..b5f4c98 100644
--- a/Lib/test/badsyntax_future4.py
+++ b/Lib/test/badsyntax_future4.py
@@ -7,4 +7,4 @@
         return x + y
     return g
 
-print f(2)(4)
+result = f(2)(4)
diff --git a/Lib/test/badsyntax_future5.py b/Lib/test/badsyntax_future5.py
index 1186208..8a7e5fc 100644
--- a/Lib/test/badsyntax_future5.py
+++ b/Lib/test/badsyntax_future5.py
@@ -9,4 +9,4 @@
         return x + y
     return g
 
-print f(2)(4)
+result = f(2)(4)
diff --git a/Lib/test/badsyntax_future6.py b/Lib/test/badsyntax_future6.py
index 35c1455..5a8b55a 100644
--- a/Lib/test/badsyntax_future6.py
+++ b/Lib/test/badsyntax_future6.py
@@ -7,4 +7,4 @@
         return x + y
     return g
 
-print f(2)(4)
+result = f(2)(4)
diff --git a/Lib/test/badsyntax_future7.py b/Lib/test/badsyntax_future7.py
index 370372d..131db2c 100644
--- a/Lib/test/badsyntax_future7.py
+++ b/Lib/test/badsyntax_future7.py
@@ -8,4 +8,4 @@
         return x + y
     return g
 
-print f(2)(4)
+result = f(2)(4)
diff --git a/Lib/test/badsyntax_future8.py b/Lib/test/badsyntax_future8.py
new file mode 100644
index 0000000..c167b09
--- /dev/null
+++ b/Lib/test/badsyntax_future8.py
@@ -0,0 +1,10 @@
+"""This is a test"""
+
+from __future__ import *
+
+def f(x):
+    def g(y):
+        return x + y
+    return g
+
+print f(2)(4)
diff --git a/Lib/test/badsyntax_future9.py b/Lib/test/badsyntax_future9.py
new file mode 100644
index 0000000..cdce32a
--- /dev/null
+++ b/Lib/test/badsyntax_future9.py
@@ -0,0 +1,10 @@
+"""This is a test"""
+
+from __future__ import nested_scopes, braces
+
+def f(x):
+    def g(y):
+        return x + y
+    return g
+
+print f(2)(4)
diff --git a/Lib/test/output/test_future b/Lib/test/output/test_future
deleted file mode 100644
index 4631489..0000000
--- a/Lib/test/output/test_future
+++ /dev/null
@@ -1,8 +0,0 @@
-test_future
-6
-6
-SyntaxError badsyntax_future3 3
-SyntaxError badsyntax_future4 3
-SyntaxError badsyntax_future5 4
-SyntaxError badsyntax_future6 3
-SyntaxError badsyntax_future7 3
diff --git a/Lib/test/test_future.py b/Lib/test/test_future.py
index 12813d4..f5462e2 100644
--- a/Lib/test/test_future.py
+++ b/Lib/test/test_future.py
@@ -1,47 +1,89 @@
 # Test various flavors of legal and illegal future statements
 
-from test.test_support import unload
+import unittest
+from test import test_support
 import re
 
 rx = re.compile('\((\S+).py, line (\d+)')
 
-def check_error_location(msg):
-    mo = rx.search(msg)
-    print "SyntaxError %s %s" % mo.group(1, 2)
+def get_error_location(msg):
+    mo = rx.search(str(msg))
+    return mo.group(1, 2)
 
-# The first two tests should work
+class FutureTest(unittest.TestCase):
 
-unload('test_future1')
-from test import test_future1
+    def test_future1(self):
+        test_support.unload('test_future1')
+        from test import test_future1
+        self.assertEqual(test_future1.result, 6)
 
-unload('test_future2')
-from test import test_future2
+    def test_future2(self):
+        test_support.unload('test_future2')
+        from test import test_future2
+        self.assertEqual(test_future2.result, 6)
 
-unload('test_future3')
-from test import test_future3
+    def test_future3(self):
+        test_support.unload('test_future3')
+        from test import test_future3
 
-# The remaining tests should fail
-try:
-    from test import badsyntax_future3
-except SyntaxError, msg:
-    check_error_location(str(msg))
+    def test_badfuture3(self):
+        try:
+            from test import badsyntax_future3
+        except SyntaxError, msg:
+            self.assertEqual(get_error_location(msg), ("badsyntax_future3", '3'))
+        else:
+            self.fail("expected exception didn't occur")
 
-try:
-    from test import badsyntax_future4
-except SyntaxError, msg:
-    check_error_location(str(msg))
+    def test_badfuture4(self):
+        try:
+            from test import badsyntax_future4
+        except SyntaxError, msg:
+            self.assertEqual(get_error_location(msg), ("badsyntax_future4", '3'))
+        else:
+            self.fail("expected exception didn't occur")
 
-try:
-    from test import badsyntax_future5
-except SyntaxError, msg:
-    check_error_location(str(msg))
+    def test_badfuture5(self):
+        try:
+            from test import badsyntax_future5
+        except SyntaxError, msg:
+            self.assertEqual(get_error_location(msg), ("badsyntax_future5", '4'))
+        else:
+            self.fail("expected exception didn't occur")
 
-try:
-    from test import badsyntax_future6
-except SyntaxError, msg:
-    check_error_location(str(msg))
+    def test_badfuture6(self):
+        try:
+            from test import badsyntax_future6
+        except SyntaxError, msg:
+            self.assertEqual(get_error_location(msg), ("badsyntax_future6", '3'))
+        else:
+            self.fail("expected exception didn't occur")
 
-try:
-    from test import badsyntax_future7
-except SyntaxError, msg:
-    check_error_location(str(msg))
+    def test_badfuture7(self):
+        try:
+            from test import badsyntax_future7
+        except SyntaxError, msg:
+            self.assertEqual(get_error_location(msg), ("badsyntax_future7", '3'))
+        else:
+            self.fail("expected exception didn't occur")
+
+    def test_badfuture8(self):
+        try:
+            from test import badsyntax_future8
+        except SyntaxError, msg:
+            self.assertEqual(get_error_location(msg), ("badsyntax_future8", '3'))
+        else:
+            self.fail("expected exception didn't occur")
+
+    def test_badfuture9(self):
+        try:
+            from test import badsyntax_future9
+        except SyntaxError, msg:
+            self.assertEqual(get_error_location(msg), ("badsyntax_future9", '3'))
+        else:
+            self.fail("expected exception didn't occur")
+
+def test_main():
+    test_support.run_unittest(FutureTest)
+
+if __name__ == "__main__":
+    test_main()
diff --git a/Lib/test/test_future1.py b/Lib/test/test_future1.py
index b0d2a5c..297c2e0 100644
--- a/Lib/test/test_future1.py
+++ b/Lib/test/test_future1.py
@@ -8,4 +8,4 @@
         return x + y
     return g
 
-print f(2)(4)
+result = f(2)(4)
diff --git a/Lib/test/test_future2.py b/Lib/test/test_future2.py
index e3df0a6..79eb731 100644
--- a/Lib/test/test_future2.py
+++ b/Lib/test/test_future2.py
@@ -7,4 +7,4 @@
         return x + y
     return g
 
-print f(2)(4)
+result = f(2)(4)
