Make test_augassign pass with -Qnew and convert to unittest.
diff --git a/Lib/test/test_augassign.py b/Lib/test/test_augassign.py
index 3b6c738..e97ef46 100644
--- a/Lib/test/test_augassign.py
+++ b/Lib/test/test_augassign.py
@@ -1,261 +1,327 @@
 # Augmented assignment test.
 
-x = 2
-x += 1
-x *= 2
-x **= 2
-x -= 8
-x /= 2
-x //= 1
-x %= 12
-x &= 2
-x |= 5
-x ^= 1
-
-print x
-
-x = [2]
-x[0] += 1
-x[0] *= 2
-x[0] **= 2
-x[0] -= 8
-x[0] /= 2
-x[0] //= 2
-x[0] %= 12
-x[0] &= 2
-x[0] |= 5
-x[0] ^= 1
-
-print x
-
-x = {0: 2}
-x[0] += 1
-x[0] *= 2
-x[0] **= 2
-x[0] -= 8
-x[0] /= 2
-x[0] //= 1
-x[0] %= 12
-x[0] &= 2
-x[0] |= 5
-x[0] ^= 1
-
-print x[0]
-
-x = [1,2]
-x += [3,4]
-x *= 2
-
-print x
-
-x = [1, 2, 3]
-y = x
-x[1:2] *= 2
-y[1:2] += [1]
-
-print x
-print x is y
-
-class aug_test:
-    def __init__(self, value):
-        self.val = value
-    def __radd__(self, val):
-        return self.val + val
-    def __add__(self, val):
-        return aug_test(self.val + val)
+from test.test_support import run_unittest
+import unittest
 
 
-class aug_test2(aug_test):
-    def __iadd__(self, val):
-        self.val = self.val + val
-        return self
+class AugAssignTest(unittest.TestCase):
+    def testBasic(self):
+        x = 2
+        x += 1
+        x *= 2
+        x **= 2
+        x -= 8
+        x //= 5
+        x %= 3
+        x &= 2
+        x |= 5
+        x ^= 1
+        x /= 2
+        if 1/2 == 0:
+            # classic division
+            self.assertEquals(x, 3)
+        else:
+            # new-style division (with -Qnew)
+            self.assertEquals(x, 3.0)
 
-class aug_test3(aug_test):
-    def __iadd__(self, val):
-        return aug_test3(self.val + val)
+    def testInList(self):
+        x = [2]
+        x[0] += 1
+        x[0] *= 2
+        x[0] **= 2
+        x[0] -= 8
+        x[0] //= 5
+        x[0] %= 3
+        x[0] &= 2
+        x[0] |= 5
+        x[0] ^= 1
+        x[0] /= 2
+        if 1/2 == 0:
+            self.assertEquals(x[0], 3)
+        else:
+            self.assertEquals(x[0], 3.0)
 
-x = aug_test(1)
-y = x
-x += 10
+    def testInDict(self):
+        x = {0: 2}
+        x[0] += 1
+        x[0] *= 2
+        x[0] **= 2
+        x[0] -= 8
+        x[0] //= 5
+        x[0] %= 3
+        x[0] &= 2
+        x[0] |= 5
+        x[0] ^= 1
+        x[0] /= 2
+        if 1/2 == 0:
+            self.assertEquals(x[0], 3)
+        else:
+            self.assertEquals(x[0], 3.0)
 
-print isinstance(x, aug_test)
-print y is not x
-print x.val
+    def testSequences(self):
+        x = [1,2]
+        x += [3,4]
+        x *= 2
 
-x = aug_test2(2)
-y = x
-x += 10
+        self.assertEquals(x, [1, 2, 3, 4, 1, 2, 3, 4])
+        
+        x = [1, 2, 3]
+        y = x
+        x[1:2] *= 2
+        y[1:2] += [1]
 
-print y is x
-print x.val
+        self.assertEquals(x, [1, 2, 1, 2, 3])
+        self.assert_(x is y)
 
-x = aug_test3(3)
-y = x
-x += 10
+    def testCustomMethods1(self):
 
-print isinstance(x, aug_test3)
-print y is not x
-print x.val
+        class aug_test:
+            def __init__(self, value):
+                self.val = value
+            def __radd__(self, val):
+                return self.val + val
+            def __add__(self, val):
+                return aug_test(self.val + val)
+        
+        class aug_test2(aug_test):
+            def __iadd__(self, val):
+                self.val = self.val + val
+                return self
 
-class testall:
+        class aug_test3(aug_test):
+            def __iadd__(self, val):
+                return aug_test3(self.val + val)
+        
+        x = aug_test(1)
+        y = x
+        x += 10
 
-    def __add__(self, val):
-        print "__add__ called"
-    def __radd__(self, val):
-        print "__radd__ called"
-    def __iadd__(self, val):
-        print "__iadd__ called"
-        return self
+        self.assert_(isinstance(x, aug_test))
+        self.assert_(y is not x)
+        self.assertEquals(x.val, 11)
 
-    def __sub__(self, val):
-        print "__sub__ called"
-    def __rsub__(self, val):
-        print "__rsub__ called"
-    def __isub__(self, val):
-        print "__isub__ called"
-        return self
+        x = aug_test2(2)
+        y = x
+        x += 10
+        
+        self.assert_(y is x)
+        self.assertEquals(x.val, 12)
 
-    def __mul__(self, val):
-        print "__mul__ called"
-    def __rmul__(self, val):
-        print "__rmul__ called"
-    def __imul__(self, val):
-        print "__imul__ called"
-        return self
+        x = aug_test3(3)
+        y = x
+        x += 10
 
-    def __div__(self, val):
-        print "__div__ called"
-    def __rdiv__(self, val):
-        print "__rdiv__ called"
-    def __idiv__(self, val):
-        print "__idiv__ called"
-        return self
+        self.assert_(isinstance(x, aug_test3))
+        self.assert_(y is not x)
+        self.assertEquals(x.val, 13)
 
-    def __floordiv__(self, val):
-        print "__floordiv__ called"
-        return self
-    def __ifloordiv__(self, val):
-        print "__ifloordiv__ called"
-        return self
-    def __rfloordiv__(self, val):
-        print "__rfloordiv__ called"
-        return self
 
-    def __truediv__(self, val):
-        print "__truediv__ called"
-        return self
-    def __itruediv__(self, val):
-        print "__itruediv__ called"
-        return self
+    def testCustomMethods2(test_self):
+        output = []
 
-    def __mod__(self, val):
-        print "__mod__ called"
-    def __rmod__(self, val):
-        print "__rmod__ called"
-    def __imod__(self, val):
-        print "__imod__ called"
-        return self
+        class testall:
+            def __add__(self, val):
+                output.append("__add__ called")
+            def __radd__(self, val):
+                output.append("__radd__ called")
+            def __iadd__(self, val):
+                output.append("__iadd__ called")
+                return self
 
-    def __pow__(self, val):
-        print "__pow__ called"
-    def __rpow__(self, val):
-        print "__rpow__ called"
-    def __ipow__(self, val):
-        print "__ipow__ called"
-        return self
+            def __sub__(self, val):
+                output.append("__sub__ called")
+            def __rsub__(self, val):
+                output.append("__rsub__ called")
+            def __isub__(self, val):
+                output.append("__isub__ called")
+                return self
 
-    def __or__(self, val):
-        print "__or__ called"
-    def __ror__(self, val):
-        print "__ror__ called"
-    def __ior__(self, val):
-        print "__ior__ called"
-        return self
+            def __mul__(self, val):
+                output.append("__mul__ called")
+            def __rmul__(self, val):
+                output.append("__rmul__ called")
+            def __imul__(self, val):
+                output.append("__imul__ called")
+                return self
 
-    def __and__(self, val):
-        print "__and__ called"
-    def __rand__(self, val):
-        print "__rand__ called"
-    def __iand__(self, val):
-        print "__iand__ called"
-        return self
+            def __div__(self, val):
+                output.append("__div__ called")
+            def __rdiv__(self, val):
+                output.append("__rdiv__ called")
+            def __idiv__(self, val):
+                output.append("__idiv__ called")
+                return self
 
-    def __xor__(self, val):
-        print "__xor__ called"
-    def __rxor__(self, val):
-        print "__rxor__ called"
-    def __ixor__(self, val):
-        print "__ixor__ called"
-        return self
+            def __floordiv__(self, val):
+                output.append("__floordiv__ called")
+                return self
+            def __ifloordiv__(self, val):
+                output.append("__ifloordiv__ called")
+                return self
+            def __rfloordiv__(self, val):
+                output.append("__rfloordiv__ called")
+                return self
 
-    def __rshift__(self, val):
-        print "__rshift__ called"
-    def __rrshift__(self, val):
-        print "__rrshift__ called"
-    def __irshift__(self, val):
-        print "__irshift__ called"
-        return self
+            def __truediv__(self, val):
+                output.append("__truediv__ called")
+                return self
+            def __itruediv__(self, val):
+                output.append("__itruediv__ called")
+                return self
 
-    def __lshift__(self, val):
-        print "__lshift__ called"
-    def __rlshift__(self, val):
-        print "__rlshift__ called"
-    def __ilshift__(self, val):
-        print "__ilshift__ called"
-        return self
+            def __mod__(self, val):
+                output.append("__mod__ called")
+            def __rmod__(self, val):
+                output.append("__rmod__ called")
+            def __imod__(self, val):
+                output.append("__imod__ called")
+                return self
 
-x = testall()
-x + 1
-1 + x
-x += 1
+            def __pow__(self, val):
+                output.append("__pow__ called")
+            def __rpow__(self, val):
+                output.append("__rpow__ called")
+            def __ipow__(self, val):
+                output.append("__ipow__ called")
+                return self
 
-x - 1
-1 - x
-x -= 1
+            def __or__(self, val):
+                output.append("__or__ called")
+            def __ror__(self, val):
+                output.append("__ror__ called")
+            def __ior__(self, val):
+                output.append("__ior__ called")
+                return self
 
-x * 1
-1 * x
-x *= 1
+            def __and__(self, val):
+                output.append("__and__ called")
+            def __rand__(self, val):
+                output.append("__rand__ called")
+            def __iand__(self, val):
+                output.append("__iand__ called")
+                return self
 
-if 1/2 == 0:
-    x / 1
-    1 / x
-    x /= 1
-else:
-    # True division is in effect, so "/" doesn't map to __div__ etc;
-    # but the canned expected-output file requires that those get called.
-    x.__div__(1)
-    x.__rdiv__(1)
-    x.__idiv__(1)
+            def __xor__(self, val):
+                output.append("__xor__ called")
+            def __rxor__(self, val):
+                output.append("__rxor__ called")
+            def __ixor__(self, val):
+                output.append("__ixor__ called")
+                return self
 
-x // 1
-1 // x
-x //= 1
+            def __rshift__(self, val):
+                output.append("__rshift__ called")
+            def __rrshift__(self, val):
+                output.append("__rrshift__ called")
+            def __irshift__(self, val):
+                output.append("__irshift__ called")
+                return self
 
-x % 1
-1 % x
-x %= 1
+            def __lshift__(self, val):
+                output.append("__lshift__ called")
+            def __rlshift__(self, val):
+                output.append("__rlshift__ called")
+            def __ilshift__(self, val):
+                output.append("__ilshift__ called")
+                return self
 
-x ** 1
-1 ** x
-x **= 1
+        x = testall()
+        x + 1
+        1 + x
+        x += 1
 
-x | 1
-1 | x
-x |= 1
+        x - 1
+        1 - x
+        x -= 1
 
-x & 1
-1 & x
-x &= 1
+        x * 1
+        1 * x
+        x *= 1
 
-x ^ 1
-1 ^ x
-x ^= 1
+        if 1/2 == 0:
+            x / 1
+            1 / x
+            x /= 1
+        else:
+            # True division is in effect, so "/" doesn't map to __div__ etc;
+            # but the canned expected-output file requires that those get called.
+            x.__div__(1)
+            x.__rdiv__(1)
+            x.__idiv__(1)
 
-x >> 1
-1 >> x
-x >>= 1
+        x // 1
+        1 // x
+        x //= 1
 
-x << 1
-1 << x
-x <<= 1
+        x % 1
+        1 % x
+        x %= 1
+
+        x ** 1
+        1 ** x
+        x **= 1
+
+        x | 1
+        1 | x
+        x |= 1
+
+        x & 1
+        1 & x
+        x &= 1
+
+        x ^ 1
+        1 ^ x
+        x ^= 1
+
+        x >> 1
+        1 >> x
+        x >>= 1
+
+        x << 1
+        1 << x
+        x <<= 1
+
+        test_self.assertEquals(output, '''\
+__add__ called
+__radd__ called
+__iadd__ called
+__sub__ called
+__rsub__ called
+__isub__ called
+__mul__ called
+__rmul__ called
+__imul__ called
+__div__ called
+__rdiv__ called
+__idiv__ called
+__floordiv__ called
+__rfloordiv__ called
+__ifloordiv__ called
+__mod__ called
+__rmod__ called
+__imod__ called
+__pow__ called
+__rpow__ called
+__ipow__ called
+__or__ called
+__ror__ called
+__ior__ called
+__and__ called
+__rand__ called
+__iand__ called
+__xor__ called
+__rxor__ called
+__ixor__ called
+__rshift__ called
+__rrshift__ called
+__irshift__ called
+__lshift__ called
+__rlshift__ called
+__ilshift__ called
+'''.splitlines())
+                          
+def test_main():
+    run_unittest(AugAssignTest)
+
+if __name__ == '__main__':
+    test_main()