1ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehimport unittest 2ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehimport sys 3ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehfrom test.test_support import check_py3k_warnings, CleanImport, run_unittest 4ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehimport warnings 5ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 6ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehif not sys.py3kwarning: 7ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh raise unittest.SkipTest('%s must be run with the -3 flag' % __name__) 8ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 9ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehtry: 10ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh from test.test_support import __warningregistry__ as _registry 11ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehexcept ImportError: 12ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def check_deprecated_module(module_name): 13ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return False 14ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehelse: 15ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh past_warnings = _registry.keys() 16ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh del _registry 17ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def check_deprecated_module(module_name): 18ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Lookup the past warnings for module already loaded using 19ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh test_support.import_module(..., deprecated=True) 20ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """ 21ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return any(module_name in msg and ' removed' in msg 22ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh and issubclass(cls, DeprecationWarning) 23ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh and (' module' in msg or ' package' in msg) 24ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for (msg, cls, line) in past_warnings) 25ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 26ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehdef reset_module_registry(module): 27ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh try: 28ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh registry = module.__warningregistry__ 29ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh except AttributeError: 30ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh pass 31ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh else: 32ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh registry.clear() 33ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 34ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestPy3KWarnings(unittest.TestCase): 35ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 36ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def assertWarning(self, _, warning, expected_message): 37ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(str(warning.message), expected_message) 38ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 39ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def assertNoWarning(self, _, recorder): 40ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(len(recorder.warnings), 0) 41ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 42ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_backquote(self): 43ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = 'backquote not supported in 3.x; use repr()' 44ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings((expected, SyntaxWarning)): 45ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh exec "`2`" in {} 46ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 47ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_paren_arg_names(self): 48ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = 'parenthesized argument names are invalid in 3.x' 49ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def check(s): 50ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings((expected, SyntaxWarning)): 51ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh exec s in {} 52ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh check("def f((x)): pass") 53ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh check("def f((((x))), (y)): pass") 54ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh check("def f((x), (((y))), m=32): pass") 55ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # Something like def f((a, (b))): pass will raise the tuple 56ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # unpacking warning. 57ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 58ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_forbidden_names(self): 59ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # So we don't screw up our globals 60ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def safe_exec(expr): 61ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def f(**kwargs): pass 62ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh exec expr in {'f' : f} 63ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 64ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh tests = [("True", "assignment to True or False is forbidden in 3.x"), 65ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ("False", "assignment to True or False is forbidden in 3.x"), 66ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh ("nonlocal", "nonlocal is a keyword in 3.x")] 67ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings(('', SyntaxWarning)) as w: 68ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for keyword, expected in tests: 69ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh safe_exec("{0} = False".format(keyword)) 70ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(None, w, expected) 71ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 72ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh try: 73ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh safe_exec("obj.{0} = True".format(keyword)) 74ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh except NameError: 75ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh pass 76ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(None, w, expected) 77ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 78ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh safe_exec("def {0}(): pass".format(keyword)) 79ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(None, w, expected) 80ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 81ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh safe_exec("class {0}: pass".format(keyword)) 82ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(None, w, expected) 83ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 84ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh safe_exec("def f({0}=43): pass".format(keyword)) 85ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(None, w, expected) 86ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 87ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 88ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 89ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_type_inequality_comparisons(self): 90ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = 'type inequality comparisons not supported in 3.x' 91ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings() as w: 92ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(int < str, w, expected) 93ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 94ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(type < object, w, expected) 95ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 96ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_object_inequality_comparisons(self): 97ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = 'comparing unequal types not supported in 3.x' 98ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings() as w: 99ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(str < [], w, expected) 100ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 101ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(object() < (1, 2), w, expected) 102ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 103ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_dict_inequality_comparisons(self): 104ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = 'dict inequality comparisons not supported in 3.x' 105ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings() as w: 106ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning({} < {2:3}, w, expected) 107ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 108ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning({} <= {}, w, expected) 109ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 110ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning({} > {2:3}, w, expected) 111ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 112ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning({2:3} >= {}, w, expected) 113ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 114ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_cell_inequality_comparisons(self): 115ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = 'cell comparisons not supported in 3.x' 116ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def f(x): 117ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def g(): 118ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return x 119ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return g 120ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh cell0, = f(0).func_closure 121ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh cell1, = f(1).func_closure 122ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings() as w: 123ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(cell0 == cell1, w, expected) 124ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 125ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(cell0 < cell1, w, expected) 126ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 127ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_code_inequality_comparisons(self): 128ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = 'code inequality comparisons not supported in 3.x' 129ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def f(x): 130ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh pass 131ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def g(x): 132ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh pass 133ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings() as w: 134ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(f.func_code < g.func_code, w, expected) 135ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 136ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(f.func_code <= g.func_code, w, expected) 137ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 138ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(f.func_code >= g.func_code, w, expected) 139ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 140ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(f.func_code > g.func_code, w, expected) 141ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 142ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_builtin_function_or_method_comparisons(self): 143ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = ('builtin_function_or_method ' 144ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'order comparisons not supported in 3.x') 145ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh func = eval 146ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh meth = {}.get 147ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings() as w: 148ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(func < meth, w, expected) 149ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 150ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(func > meth, w, expected) 151ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 152ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(meth <= func, w, expected) 153ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 154ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(meth >= func, w, expected) 155ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 156ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertNoWarning(meth == func, w) 157ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertNoWarning(meth != func, w) 158ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh lam = lambda x: x 159ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertNoWarning(lam == func, w) 160ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertNoWarning(lam != func, w) 161ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 162ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_frame_attributes(self): 163ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh template = "%s has been removed in 3.x" 164ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh f = sys._getframe(0) 165ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for attr in ("f_exc_traceback", "f_exc_value", "f_exc_type"): 166ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = template % attr 167ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings() as w: 168ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(getattr(f, attr), w, expected) 169ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 170ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(setattr(f, attr, None), w, expected) 171ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 172ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_sort_cmp_arg(self): 173ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = "the cmp argument is not supported in 3.x" 174ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh lst = range(5) 175ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh cmp = lambda x,y: -1 176ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 177ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings() as w: 178ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(lst.sort(cmp=cmp), w, expected) 179ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 180ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(sorted(lst, cmp=cmp), w, expected) 181ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 182ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(lst.sort(cmp), w, expected) 183ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 184ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(sorted(lst, cmp), w, expected) 185ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 186ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_sys_exc_clear(self): 187ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = 'sys.exc_clear() not supported in 3.x; use except clauses' 188ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings() as w: 189ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(sys.exc_clear(), w, expected) 190ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 191ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_methods_members(self): 192ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = '__members__ and __methods__ not supported in 3.x' 193ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class C: 194ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh __methods__ = ['a'] 195ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh __members__ = ['b'] 196ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh c = C() 197ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings() as w: 198ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(dir(c), w, expected) 199ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 200ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_softspace(self): 201ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = 'file.softspace not supported in 3.x' 202ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with file(__file__) as f: 203ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings() as w: 204ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(f.softspace, w, expected) 205ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def set(): 206ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh f.softspace = 0 207ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings() as w: 208ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(set(), w, expected) 209ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 210ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_slice_methods(self): 211ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class Spam(object): 212ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __getslice__(self, i, j): pass 213ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __setslice__(self, i, j, what): pass 214ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __delslice__(self, i, j): pass 215ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class Egg: 216ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __getslice__(self, i, h): pass 217ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __setslice__(self, i, j, what): pass 218ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __delslice__(self, i, j): pass 219ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 220ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = "in 3.x, __{0}slice__ has been removed; use __{0}item__" 221ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 222ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for obj in (Spam(), Egg()): 223ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings() as w: 224ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(obj[1:2], w, expected.format('get')) 225ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 226ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh del obj[3:4] 227ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(None, w, expected.format('del')) 228ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 229ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh obj[4:5] = "eggs" 230ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(None, w, expected.format('set')) 231ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 232ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_tuple_parameter_unpacking(self): 233ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = "tuple parameter unpacking has been removed in 3.x" 234ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings((expected, SyntaxWarning)): 235ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh exec "def f((a, b)): pass" 236ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 237ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_buffer(self): 238ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = 'buffer() not supported in 3.x' 239ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings() as w: 240ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(buffer('a'), w, expected) 241ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 242ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_file_xreadlines(self): 243ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh expected = ("f.xreadlines() not supported in 3.x, " 244ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh "try 'for line in f' instead") 245ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with file(__file__) as f: 246ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings() as w: 247ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(f.xreadlines(), w, expected) 248ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 249ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_hash_inheritance(self): 250ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings() as w: 251ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # With object as the base class 252ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class WarnOnlyCmp(object): 253ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __cmp__(self, other): pass 254ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(len(w.warnings), 0) 255ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 256ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class WarnOnlyEq(object): 257ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __eq__(self, other): pass 258ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(len(w.warnings), 1) 259ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(None, w, 260ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh "Overriding __eq__ blocks inheritance of __hash__ in 3.x") 261ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 262ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class WarnCmpAndEq(object): 263ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __cmp__(self, other): pass 264ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __eq__(self, other): pass 265ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(len(w.warnings), 1) 266ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(None, w, 267ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh "Overriding __eq__ blocks inheritance of __hash__ in 3.x") 268ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 269ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class NoWarningOnlyHash(object): 270ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __hash__(self): pass 271ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(len(w.warnings), 0) 272ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # With an intermediate class in the heirarchy 273ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class DefinesAllThree(object): 274ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __cmp__(self, other): pass 275ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __eq__(self, other): pass 276ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __hash__(self): pass 277ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class WarnOnlyCmp(DefinesAllThree): 278ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __cmp__(self, other): pass 279ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(len(w.warnings), 0) 280ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 281ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class WarnOnlyEq(DefinesAllThree): 282ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __eq__(self, other): pass 283ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(len(w.warnings), 1) 284ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(None, w, 285ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh "Overriding __eq__ blocks inheritance of __hash__ in 3.x") 286ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 287ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class WarnCmpAndEq(DefinesAllThree): 288ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __cmp__(self, other): pass 289ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __eq__(self, other): pass 290ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(len(w.warnings), 1) 291ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(None, w, 292ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh "Overriding __eq__ blocks inheritance of __hash__ in 3.x") 293ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 294ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh class NoWarningOnlyHash(DefinesAllThree): 295ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def __hash__(self): pass 296ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(len(w.warnings), 0) 297ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 298ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_operator(self): 299ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh from operator import isCallable, sequenceIncludes 300ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 301ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh callable_warn = ("operator.isCallable() is not supported in 3.x. " 302ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh "Use hasattr(obj, '__call__').") 303ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh seq_warn = ("operator.sequenceIncludes() is not supported " 304ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh "in 3.x. Use operator.contains().") 305ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings() as w: 306ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(isCallable(self), w, callable_warn) 307ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh w.reset() 308ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertWarning(sequenceIncludes(range(3), 2), w, seq_warn) 309ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 310ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 311ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass TestStdlibRemovals(unittest.TestCase): 312ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 313ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # test.testall not tested as it executes all unit tests as an 314ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # import side-effect. 315ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh all_platforms = ('audiodev', 'imputil', 'mutex', 'user', 'new', 'rexec', 316ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'Bastion', 'compiler', 'dircache', 'mimetools', 317ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'fpformat', 'ihooks', 'mhlib', 'statvfs', 'htmllib', 318ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'sgmllib', 'rfc822', 'sunaudio') 319ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh inclusive_platforms = {'irix' : ('pure', 'AL', 'al', 'CD', 'cd', 'cddb', 320ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'cdplayer', 'CL', 'cl', 'DEVICE', 'GL', 321ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'gl', 'ERRNO', 'FILE', 'FL', 'flp', 'fl', 322ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'fm', 'GET', 'GLWS', 'imgfile', 'IN', 323ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'IOCTL', 'jpeg', 'panel', 'panelparser', 324ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'readcd', 'SV', 'torgb', 'WAIT'), 325ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'darwin' : ('autoGIL', 'Carbon', 'OSATerminology', 326ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'icglue', 'Nav', 327ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # MacOS should (and does) give a Py3kWarning, but one of the 328ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # earlier tests already imports the MacOS extension which causes 329ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # this test to fail. Disabling the test for 'MacOS' avoids this 330ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # spurious test failure. 331ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh #'MacOS', 332ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'aepack', 333ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'aetools', 'aetypes', 'applesingle', 334ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'appletrawmain', 'appletrunner', 335ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'argvemulator', 'bgenlocations', 336ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'EasyDialogs', 'macerrors', 'macostools', 337ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'findertools', 'FrameWork', 'ic', 338ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'gensuitemodule', 'icopen', 'macresource', 339ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'MiniAEFrame', 'pimp', 'PixMapWrapper', 340ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'terminalcommand', 'videoreader', 341ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '_builtinSuites', 'CodeWarrior', 342ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'Explorer', 'Finder', 'Netscape', 343ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'StdSuites', 'SystemEvents', 'Terminal', 344ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'cfmfile', 'bundlebuilder', 'buildtools', 345ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'ColorPicker', 'Audio_mac'), 346ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'sunos5' : ('sunaudiodev', 'SUNAUDIODEV'), 347ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh } 348ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh optional_modules = ('bsddb185', 'Canvas', 'dl', 'linuxaudiodev', 'imageop', 349ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'sv', 'bsddb', 'dbhash') 350ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 351ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def check_removal(self, module_name, optional=False): 352ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh """Make sure the specified module, when imported, raises a 353ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh DeprecationWarning and specifies itself in the message.""" 354ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with CleanImport(module_name), warnings.catch_warnings(): 355ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh warnings.filterwarnings("error", ".+ (module|package) .+ removed", 356ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh DeprecationWarning, __name__) 357ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh warnings.filterwarnings("error", ".+ removed .+ (module|package)", 358ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh DeprecationWarning, __name__) 359ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh try: 360ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh __import__(module_name, level=0) 361ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh except DeprecationWarning as exc: 362ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertIn(module_name, exc.args[0], 363ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh "%s warning didn't contain module name" 364ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh % module_name) 365ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh except ImportError: 366ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if not optional: 367ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.fail("Non-optional module {0} raised an " 368ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh "ImportError.".format(module_name)) 369ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh else: 370ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # For extension modules, check the __warningregistry__. 371ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # They won't rerun their init code even with CleanImport. 372ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh if not check_deprecated_module(module_name): 373ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.fail("DeprecationWarning not raised for {0}" 374ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh .format(module_name)) 375ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 376ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_platform_independent_removals(self): 377ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # Make sure that the modules that are available on all platforms raise 378ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # the proper DeprecationWarning. 379ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for module_name in self.all_platforms: 380ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.check_removal(module_name) 381ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 382ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_platform_specific_removals(self): 383ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # Test the removal of platform-specific modules. 384ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for module_name in self.inclusive_platforms.get(sys.platform, []): 385ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.check_removal(module_name, optional=True) 386ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 387ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_optional_module_removals(self): 388ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # Test the removal of modules that may or may not be built. 389ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for module_name in self.optional_modules: 390ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.check_removal(module_name, optional=True) 391ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 392ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_os_path_walk(self): 393ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh msg = "In 3.x, os.path.walk is removed in favor of os.walk." 394ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def dumbo(where, names, args): pass 395ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for path_mod in ("ntpath", "macpath", "os2emxpath", "posixpath"): 396ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh mod = __import__(path_mod) 397ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh reset_module_registry(mod) 398ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with check_py3k_warnings() as w: 399ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh mod.walk("crashers", dumbo, None) 400ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(str(w.message), msg) 401ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 402ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_reduce_move(self): 403ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh from operator import add 404ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # reduce tests may have already triggered this warning 405ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh reset_module_registry(unittest.case) 406ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with warnings.catch_warnings(): 407ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh warnings.filterwarnings("error", "reduce") 408ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertRaises(DeprecationWarning, reduce, add, range(10)) 409ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 410ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_mutablestring_removal(self): 411ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # UserString.MutableString has been removed in 3.0. 412ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh import UserString 413ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # UserString tests may have already triggered this warning 414ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh reset_module_registry(UserString) 415ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh with warnings.catch_warnings(): 416ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh warnings.filterwarnings("error", ".*MutableString", 417ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh DeprecationWarning) 418ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertRaises(DeprecationWarning, UserString.MutableString) 419ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 420ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 421ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehdef test_main(): 422ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh run_unittest(TestPy3KWarnings, 423ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh TestStdlibRemovals) 424ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 425ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehif __name__ == '__main__': 426ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh test_main() 427