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