summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEzio Melotti <ezio.melotti@gmail.com>2013-11-23 19:14:42 (GMT)
committerEzio Melotti <ezio.melotti@gmail.com>2013-11-23 19:14:42 (GMT)
commit6bdd98622e88bed3ede325b0ffc2bb8d63cde52f (patch)
tree6ade26a10db633cd32dd09e7d3a94f0fd51004f5
parent7571941db6591c7521311274f0ea3c83657eb911 (diff)
downloadcpython-6bdd98622e88bed3ede325b0ffc2bb8d63cde52f.zip
cpython-6bdd98622e88bed3ede325b0ffc2bb8d63cde52f.tar.gz
cpython-6bdd98622e88bed3ede325b0ffc2bb8d63cde52f.tar.bz2
#10712: 2to3 has a new "asserts" fixer that replaces deprecated names of unittest methods.
-rw-r--r--Doc/library/2to3.rst33
-rw-r--r--Lib/lib2to3/fixes/fix_asserts.py34
-rw-r--r--Lib/lib2to3/tests/test_fixers.py50
-rw-r--r--Misc/NEWS3
4 files changed, 120 insertions, 0 deletions
diff --git a/Doc/library/2to3.rst b/Doc/library/2to3.rst
index fda214c..1092e6b 100644
--- a/Doc/library/2to3.rst
+++ b/Doc/library/2to3.rst
@@ -142,6 +142,39 @@ and off individually. They are described here in more detail.
Removes usage of :func:`apply`. For example ``apply(function, *args,
**kwargs)`` is converted to ``function(*args, **kwargs)``.
+.. 2to3fixer:: asserts
+
+ Replaces deprecated :mod:`unittest` method names with the correct ones.
+
+ ================================ ==========================================
+ From To
+ ================================ ==========================================
+ ``failUnlessEqual(a, b)`` :meth:`assertEqual(a, b)
+ <unittest.TestCase.assertEqual>`
+ ``assertEquals(a, b)`` :meth:`assertEqual(a, b)
+ <unittest.TestCase.assertEqual>`
+ ``failIfEqual(a, b)`` :meth:`assertNotEqual(a, b)
+ <unittest.TestCase.assertNotEqual>`
+ ``assertNotEquals(a, b)`` :meth:`assertNotEqual(a, b)
+ <unittest.TestCase.assertNotEqual>`
+ ``failUnless(a)`` :meth:`assertTrue(a)
+ <unittest.TestCase.assertTrue>`
+ ``assert_(a)`` :meth:`assertTrue(a)
+ <unittest.TestCase.assertTrue>`
+ ``failIf(a)`` :meth:`assertFalse(a)
+ <unittest.TestCase.assertFalse>`
+ ``failUnlessRaises(exc, cal)`` :meth:`assertRaises(exc, cal)
+ <unittest.TestCase.assertRaises>`
+ ``failUnlessAlmostEqual(a, b)`` :meth:`assertAlmostEqual(a, b)
+ <unittest.TestCase.assertAlmostEqual>`
+ ``assertAlmostEquals(a, b)`` :meth:`assertAlmostEqual(a, b)
+ <unittest.TestCase.assertAlmostEqual>`
+ ``failIfAlmostEqual(a, b)`` :meth:`assertNotAlmostEqual(a, b)
+ <unittest.TestCase.assertNotAlmostEqual>`
+ ``assertNotAlmostEquals(a, b)`` :meth:`assertNotAlmostEqual(a, b)
+ <unittest.TestCase.assertNotAlmostEqual>`
+ ================================ ==========================================
+
.. 2to3fixer:: basestring
Converts :class:`basestring` to :class:`str`.
diff --git a/Lib/lib2to3/fixes/fix_asserts.py b/Lib/lib2to3/fixes/fix_asserts.py
new file mode 100644
index 0000000..5bcec88
--- /dev/null
+++ b/Lib/lib2to3/fixes/fix_asserts.py
@@ -0,0 +1,34 @@
+"""Fixer that replaces deprecated unittest method names."""
+
+# Author: Ezio Melotti
+
+from ..fixer_base import BaseFix
+from ..fixer_util import Name
+
+NAMES = dict(
+ assert_="assertTrue",
+ assertEquals="assertEqual",
+ assertNotEquals="assertNotEqual",
+ assertAlmostEquals="assertAlmostEqual",
+ assertNotAlmostEquals="assertNotAlmostEqual",
+ assertRegexpMatches="assertRegex",
+ assertRaisesRegexp="assertRaisesRegex",
+ failUnlessEqual="assertEqual",
+ failIfEqual="assertNotEqual",
+ failUnlessAlmostEqual="assertAlmostEqual",
+ failIfAlmostEqual="assertNotAlmostEqual",
+ failUnless="assertTrue",
+ failUnlessRaises="assertRaises",
+ failIf="assertFalse",
+)
+
+
+class FixAsserts(BaseFix):
+
+ PATTERN = """
+ power< any+ trailer< '.' meth=(%s)> any* >
+ """ % '|'.join(map(repr, NAMES))
+
+ def transform(self, node, results):
+ name = results["meth"][0]
+ name.replace(Name(NAMES[str(name)], prefix=name.prefix))
diff --git a/Lib/lib2to3/tests/test_fixers.py b/Lib/lib2to3/tests/test_fixers.py
index bac6872..06b0033 100644
--- a/Lib/lib2to3/tests/test_fixers.py
+++ b/Lib/lib2to3/tests/test_fixers.py
@@ -4635,3 +4635,53 @@ class Test_exitfunc(FixerTestCase):
def test_unchanged(self):
s = """f(sys.exitfunc)"""
self.unchanged(s)
+
+
+class Test_asserts(FixerTestCase):
+
+ fixer = "asserts"
+
+ def test_deprecated_names(self):
+ tests = [
+ ('self.assert_(True)', 'self.assertTrue(True)'),
+ ('self.assertEquals(2, 2)', 'self.assertEqual(2, 2)'),
+ ('self.assertNotEquals(2, 3)', 'self.assertNotEqual(2, 3)'),
+ ('self.assertAlmostEquals(2, 3)', 'self.assertAlmostEqual(2, 3)'),
+ ('self.assertNotAlmostEquals(2, 8)', 'self.assertNotAlmostEqual(2, 8)'),
+ ('self.failUnlessEqual(2, 2)', 'self.assertEqual(2, 2)'),
+ ('self.failIfEqual(2, 3)', 'self.assertNotEqual(2, 3)'),
+ ('self.failUnlessAlmostEqual(2, 3)', 'self.assertAlmostEqual(2, 3)'),
+ ('self.failIfAlmostEqual(2, 8)', 'self.assertNotAlmostEqual(2, 8)'),
+ ('self.failUnless(True)', 'self.assertTrue(True)'),
+ ('self.failUnlessRaises(foo)', 'self.assertRaises(foo)'),
+ ('self.failIf(False)', 'self.assertFalse(False)'),
+ ]
+ for b, a in tests:
+ self.check(b, a)
+
+ def test_variants(self):
+ b = 'eq = self.assertEquals'
+ a = 'eq = self.assertEqual'
+ self.check(b, a)
+ b = 'self.assertEquals(2, 3, msg="fail")'
+ a = 'self.assertEqual(2, 3, msg="fail")'
+ self.check(b, a)
+ b = 'self.assertEquals(2, 3, msg="fail") # foo'
+ a = 'self.assertEqual(2, 3, msg="fail") # foo'
+ self.check(b, a)
+ b = 'self.assertEquals (2, 3)'
+ a = 'self.assertEqual (2, 3)'
+ self.check(b, a)
+ b = ' self.assertEquals (2, 3)'
+ a = ' self.assertEqual (2, 3)'
+ self.check(b, a)
+ b = 'with self.failUnlessRaises(Explosion): explode()'
+ a = 'with self.assertRaises(Explosion): explode()'
+ self.check(b, a)
+ b = 'with self.failUnlessRaises(Explosion) as cm: explode()'
+ a = 'with self.assertRaises(Explosion) as cm: explode()'
+ self.check(b, a)
+
+ def test_unchanged(self):
+ self.unchanged('self.assertEqualsOnSaturday')
+ self.unchanged('self.assertEqualsOnSaturday(3, 5)')
diff --git a/Misc/NEWS b/Misc/NEWS
index 06bb771..9cfecb5 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -575,6 +575,9 @@ Library
- Issue #18716: Deprecate the formatter module.
+- Issue #10712: 2to3 has a new "asserts" fixer that replaces deprecated names
+ of unittest methods (e.g. failUnlessEqual -> assertEqual).
+
- Issue #18037: 2to3 now escapes '\u' and '\U' in native strings.
- Issue #17839: base64.decodebytes and base64.encodebytes now accept any