183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport unittest 283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport sys 383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehfrom test.test_support import check_py3k_warnings, CleanImport, run_unittest 483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport warnings 583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehif not sys.py3kwarning: 783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh raise unittest.SkipTest('%s must be run with the -3 flag' % __name__) 883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehtry: 1083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from test.test_support import __warningregistry__ as _registry 1183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehexcept ImportError: 1283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def check_deprecated_module(module_name): 1383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return False 1483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehelse: 1583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh past_warnings = _registry.keys() 1683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh del _registry 1783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def check_deprecated_module(module_name): 1883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """Lookup the past warnings for module already loaded using 1983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh test_support.import_module(..., deprecated=True) 2083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """ 2183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return any(module_name in msg and ' removed' in msg 2283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh and issubclass(cls, DeprecationWarning) 2383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh and (' module' in msg or ' package' in msg) 2483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for (msg, cls, line) in past_warnings) 2583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 2683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef reset_module_registry(module): 2783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh try: 2883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh registry = module.__warningregistry__ 2983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh except AttributeError: 3083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh pass 3183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: 3283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh registry.clear() 3383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 3483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehclass TestPy3KWarnings(unittest.TestCase): 3583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 3683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def assertWarning(self, _, warning, expected_message): 3783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertEqual(str(warning.message), expected_message) 3883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 3983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def assertNoWarning(self, _, recorder): 4083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertEqual(len(recorder.warnings), 0) 4183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 4283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_backquote(self): 4383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh expected = 'backquote not supported in 3.x; use repr()' 4483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings((expected, SyntaxWarning)): 4583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh exec "`2`" in {} 4683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 4783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_paren_arg_names(self): 4883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh expected = 'parenthesized argument names are invalid in 3.x' 4983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def check(s): 5083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings((expected, SyntaxWarning)): 5183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh exec s in {} 5283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh check("def f((x)): pass") 5383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh check("def f((((x))), (y)): pass") 5483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh check("def f((x), (((y))), m=32): pass") 5583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # Something like def f((a, (b))): pass will raise the tuple 5683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # unpacking warning. 5783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 5883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_forbidden_names(self): 5983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # So we don't screw up our globals 6083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def safe_exec(expr): 6183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def f(**kwargs): pass 6283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh exec expr in {'f' : f} 6383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 6483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh tests = [("True", "assignment to True or False is forbidden in 3.x"), 6583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ("False", "assignment to True or False is forbidden in 3.x"), 6683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ("nonlocal", "nonlocal is a keyword in 3.x")] 6783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings(('', SyntaxWarning)) as w: 6883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for keyword, expected in tests: 6983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh safe_exec("{0} = False".format(keyword)) 7083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(None, w, expected) 7183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 7283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh try: 7383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh safe_exec("obj.{0} = True".format(keyword)) 7483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh except NameError: 7583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh pass 7683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(None, w, expected) 7783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 7883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh safe_exec("def {0}(): pass".format(keyword)) 7983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(None, w, expected) 8083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 8183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh safe_exec("class {0}: pass".format(keyword)) 8283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(None, w, expected) 8383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 8483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh safe_exec("def f({0}=43): pass".format(keyword)) 8583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(None, w, expected) 8683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 8783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 8883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 8983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_type_inequality_comparisons(self): 9083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh expected = 'type inequality comparisons not supported in 3.x' 9183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings() as w: 9283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(int < str, w, expected) 9383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 9483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(type < object, w, expected) 9583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 9683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_object_inequality_comparisons(self): 9783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh expected = 'comparing unequal types not supported in 3.x' 9883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings() as w: 9983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(str < [], w, expected) 10083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 10183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(object() < (1, 2), w, expected) 10283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 10383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_dict_inequality_comparisons(self): 10483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh expected = 'dict inequality comparisons not supported in 3.x' 10583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings() as w: 10683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning({} < {2:3}, w, expected) 10783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 10883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning({} <= {}, w, expected) 10983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 11083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning({} > {2:3}, w, expected) 11183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 11283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning({2:3} >= {}, w, expected) 11383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 11483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_cell_inequality_comparisons(self): 11583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh expected = 'cell comparisons not supported in 3.x' 11683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def f(x): 11783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def g(): 11883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return x 11983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return g 12083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh cell0, = f(0).func_closure 12183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh cell1, = f(1).func_closure 12283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings() as w: 12383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(cell0 == cell1, w, expected) 12483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 12583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(cell0 < cell1, w, expected) 12683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 12783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_code_inequality_comparisons(self): 12883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh expected = 'code inequality comparisons not supported in 3.x' 12983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def f(x): 13083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh pass 13183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def g(x): 13283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh pass 13383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings() as w: 13483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(f.func_code < g.func_code, w, expected) 13583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 13683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(f.func_code <= g.func_code, w, expected) 13783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 13883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(f.func_code >= g.func_code, w, expected) 13983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 14083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(f.func_code > g.func_code, w, expected) 14183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 14283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_builtin_function_or_method_comparisons(self): 14383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh expected = ('builtin_function_or_method ' 14483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'order comparisons not supported in 3.x') 14583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh func = eval 14683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh meth = {}.get 14783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings() as w: 14883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(func < meth, w, expected) 14983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 15083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(func > meth, w, expected) 15183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 15283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(meth <= func, w, expected) 15383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 15483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(meth >= func, w, expected) 15583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 15683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertNoWarning(meth == func, w) 15783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertNoWarning(meth != func, w) 15883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh lam = lambda x: x 15983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertNoWarning(lam == func, w) 16083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertNoWarning(lam != func, w) 16183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 16283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_frame_attributes(self): 16383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh template = "%s has been removed in 3.x" 16483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh f = sys._getframe(0) 16583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for attr in ("f_exc_traceback", "f_exc_value", "f_exc_type"): 16683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh expected = template % attr 16783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings() as w: 16883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(getattr(f, attr), w, expected) 16983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 17083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(setattr(f, attr, None), w, expected) 17183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 17283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_sort_cmp_arg(self): 17383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh expected = "the cmp argument is not supported in 3.x" 17483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh lst = range(5) 17583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh cmp = lambda x,y: -1 17683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 17783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings() as w: 17883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(lst.sort(cmp=cmp), w, expected) 17983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 18083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(sorted(lst, cmp=cmp), w, expected) 18183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 18283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(lst.sort(cmp), w, expected) 18383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 18483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(sorted(lst, cmp), w, expected) 18583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 18683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_sys_exc_clear(self): 18783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh expected = 'sys.exc_clear() not supported in 3.x; use except clauses' 18883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings() as w: 18983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(sys.exc_clear(), w, expected) 19083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 19183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_methods_members(self): 19283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh expected = '__members__ and __methods__ not supported in 3.x' 19383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh class C: 19483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh __methods__ = ['a'] 19583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh __members__ = ['b'] 19683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh c = C() 19783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings() as w: 19883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(dir(c), w, expected) 19983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 20083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_softspace(self): 20183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh expected = 'file.softspace not supported in 3.x' 20283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with file(__file__) as f: 20383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings() as w: 20483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(f.softspace, w, expected) 20583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def set(): 20683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh f.softspace = 0 20783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings() as w: 20883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(set(), w, expected) 20983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 21083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_slice_methods(self): 21183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh class Spam(object): 21283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __getslice__(self, i, j): pass 21383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __setslice__(self, i, j, what): pass 21483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __delslice__(self, i, j): pass 21583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh class Egg: 21683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __getslice__(self, i, h): pass 21783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __setslice__(self, i, j, what): pass 21883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __delslice__(self, i, j): pass 21983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 22083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh expected = "in 3.x, __{0}slice__ has been removed; use __{0}item__" 22183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 22283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for obj in (Spam(), Egg()): 22383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings() as w: 22483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(obj[1:2], w, expected.format('get')) 22583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 22683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh del obj[3:4] 22783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(None, w, expected.format('del')) 22883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 22983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh obj[4:5] = "eggs" 23083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(None, w, expected.format('set')) 23183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 23283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_tuple_parameter_unpacking(self): 23383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh expected = "tuple parameter unpacking has been removed in 3.x" 23483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings((expected, SyntaxWarning)): 23583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh exec "def f((a, b)): pass" 23683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 23783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_buffer(self): 23883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh expected = 'buffer() not supported in 3.x' 23983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings() as w: 24083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(buffer('a'), w, expected) 24183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 24283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_file_xreadlines(self): 24383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh expected = ("f.xreadlines() not supported in 3.x, " 24483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "try 'for line in f' instead") 24583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with file(__file__) as f: 24683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings() as w: 24783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(f.xreadlines(), w, expected) 24883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 24983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_hash_inheritance(self): 25083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings() as w: 25183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # With object as the base class 25283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh class WarnOnlyCmp(object): 25383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __cmp__(self, other): pass 25483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertEqual(len(w.warnings), 0) 25583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 25683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh class WarnOnlyEq(object): 25783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __eq__(self, other): pass 25883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertEqual(len(w.warnings), 1) 25983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(None, w, 26083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "Overriding __eq__ blocks inheritance of __hash__ in 3.x") 26183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 26283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh class WarnCmpAndEq(object): 26383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __cmp__(self, other): pass 26483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __eq__(self, other): pass 26583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertEqual(len(w.warnings), 1) 26683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(None, w, 26783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "Overriding __eq__ blocks inheritance of __hash__ in 3.x") 26883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 26983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh class NoWarningOnlyHash(object): 27083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __hash__(self): pass 27183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertEqual(len(w.warnings), 0) 27283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # With an intermediate class in the heirarchy 27383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh class DefinesAllThree(object): 27483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __cmp__(self, other): pass 27583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __eq__(self, other): pass 27683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __hash__(self): pass 27783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh class WarnOnlyCmp(DefinesAllThree): 27883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __cmp__(self, other): pass 27983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertEqual(len(w.warnings), 0) 28083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 28183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh class WarnOnlyEq(DefinesAllThree): 28283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __eq__(self, other): pass 28383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertEqual(len(w.warnings), 1) 28483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(None, w, 28583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "Overriding __eq__ blocks inheritance of __hash__ in 3.x") 28683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 28783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh class WarnCmpAndEq(DefinesAllThree): 28883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __cmp__(self, other): pass 28983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __eq__(self, other): pass 29083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertEqual(len(w.warnings), 1) 29183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(None, w, 29283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "Overriding __eq__ blocks inheritance of __hash__ in 3.x") 29383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 29483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh class NoWarningOnlyHash(DefinesAllThree): 29583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __hash__(self): pass 29683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertEqual(len(w.warnings), 0) 29783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 29883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_operator(self): 29983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from operator import isCallable, sequenceIncludes 30083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 30183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh callable_warn = ("operator.isCallable() is not supported in 3.x. " 30283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "Use hasattr(obj, '__call__').") 30383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh seq_warn = ("operator.sequenceIncludes() is not supported " 30483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "in 3.x. Use operator.contains().") 30583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings() as w: 30683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(isCallable(self), w, callable_warn) 30783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh w.reset() 30883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertWarning(sequenceIncludes(range(3), 2), w, seq_warn) 30983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 31083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 31183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehclass TestStdlibRemovals(unittest.TestCase): 31283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 31383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # test.testall not tested as it executes all unit tests as an 31483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # import side-effect. 31583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh all_platforms = ('audiodev', 'imputil', 'mutex', 'user', 'new', 'rexec', 31683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'Bastion', 'compiler', 'dircache', 'mimetools', 31783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'fpformat', 'ihooks', 'mhlib', 'statvfs', 'htmllib', 31883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'sgmllib', 'rfc822', 'sunaudio') 31983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh inclusive_platforms = {'irix' : ('pure', 'AL', 'al', 'CD', 'cd', 'cddb', 32083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'cdplayer', 'CL', 'cl', 'DEVICE', 'GL', 32183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'gl', 'ERRNO', 'FILE', 'FL', 'flp', 'fl', 32283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'fm', 'GET', 'GLWS', 'imgfile', 'IN', 32383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'IOCTL', 'jpeg', 'panel', 'panelparser', 32483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'readcd', 'SV', 'torgb', 'WAIT'), 32583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'darwin' : ('autoGIL', 'Carbon', 'OSATerminology', 32683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'icglue', 'Nav', 32783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # MacOS should (and does) give a Py3kWarning, but one of the 32883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # earlier tests already imports the MacOS extension which causes 32983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # this test to fail. Disabling the test for 'MacOS' avoids this 33083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # spurious test failure. 33183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #'MacOS', 33283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'aepack', 33383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'aetools', 'aetypes', 'applesingle', 33483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'appletrawmain', 'appletrunner', 33583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'argvemulator', 'bgenlocations', 33683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'EasyDialogs', 'macerrors', 'macostools', 33783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'findertools', 'FrameWork', 'ic', 33883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'gensuitemodule', 'icopen', 'macresource', 33983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'MiniAEFrame', 'pimp', 'PixMapWrapper', 34083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'terminalcommand', 'videoreader', 34183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh '_builtinSuites', 'CodeWarrior', 34283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'Explorer', 'Finder', 'Netscape', 34383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'StdSuites', 'SystemEvents', 'Terminal', 34483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'cfmfile', 'bundlebuilder', 'buildtools', 34583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'ColorPicker', 'Audio_mac'), 34683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'sunos5' : ('sunaudiodev', 'SUNAUDIODEV'), 34783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh } 34883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh optional_modules = ('bsddb185', 'Canvas', 'dl', 'linuxaudiodev', 'imageop', 34983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'sv', 'bsddb', 'dbhash') 35083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 35183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def check_removal(self, module_name, optional=False): 35283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """Make sure the specified module, when imported, raises a 35383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh DeprecationWarning and specifies itself in the message.""" 35483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with CleanImport(module_name), warnings.catch_warnings(): 35583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh warnings.filterwarnings("error", ".+ (module|package) .+ removed", 35683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh DeprecationWarning, __name__) 35783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh warnings.filterwarnings("error", ".+ removed .+ (module|package)", 35883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh DeprecationWarning, __name__) 35983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh try: 36083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh __import__(module_name, level=0) 36183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh except DeprecationWarning as exc: 36283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertIn(module_name, exc.args[0], 36383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "%s warning didn't contain module name" 36483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh % module_name) 36583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh except ImportError: 36683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if not optional: 36783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.fail("Non-optional module {0} raised an " 36883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "ImportError.".format(module_name)) 36983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: 37083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # For extension modules, check the __warningregistry__. 37183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # They won't rerun their init code even with CleanImport. 37283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if not check_deprecated_module(module_name): 37383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.fail("DeprecationWarning not raised for {0}" 37483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh .format(module_name)) 37583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 37683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_platform_independent_removals(self): 37783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # Make sure that the modules that are available on all platforms raise 37883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # the proper DeprecationWarning. 37983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for module_name in self.all_platforms: 38083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.check_removal(module_name) 38183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 38283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_platform_specific_removals(self): 38383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # Test the removal of platform-specific modules. 38483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for module_name in self.inclusive_platforms.get(sys.platform, []): 38583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.check_removal(module_name, optional=True) 38683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 38783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_optional_module_removals(self): 38883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # Test the removal of modules that may or may not be built. 38983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for module_name in self.optional_modules: 39083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.check_removal(module_name, optional=True) 39183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 39283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_os_path_walk(self): 39383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh msg = "In 3.x, os.path.walk is removed in favor of os.walk." 39483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def dumbo(where, names, args): pass 39583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for path_mod in ("ntpath", "macpath", "os2emxpath", "posixpath"): 39683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh mod = __import__(path_mod) 39783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh reset_module_registry(mod) 39883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with check_py3k_warnings() as w: 39983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh mod.walk("crashers", dumbo, None) 40083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertEqual(str(w.message), msg) 40183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 40283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_reduce_move(self): 40383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh from operator import add 40483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # reduce tests may have already triggered this warning 40583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh reset_module_registry(unittest.case) 40683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with warnings.catch_warnings(): 40783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh warnings.filterwarnings("error", "reduce") 40883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertRaises(DeprecationWarning, reduce, add, range(10)) 40983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 41083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def test_mutablestring_removal(self): 41183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # UserString.MutableString has been removed in 3.0. 41283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh import UserString 41383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # UserString tests may have already triggered this warning 41483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh reset_module_registry(UserString) 41583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh with warnings.catch_warnings(): 41683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh warnings.filterwarnings("error", ".*MutableString", 41783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh DeprecationWarning) 41883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.assertRaises(DeprecationWarning, UserString.MutableString) 41983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 42083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 42183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdef test_main(): 42283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh run_unittest(TestPy3KWarnings, 42383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh TestStdlibRemovals) 42483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 42583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehif __name__ == '__main__': 42683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh test_main() 427