Merge "Add tests for decorated argspec preservation"

This commit is contained in:
Jenkins 2016-05-19 04:55:19 +00:00 committed by Gerrit Code Review
commit cefe617906
1 changed files with 52 additions and 5 deletions

View File

@ -12,6 +12,7 @@
# License for the specific language governing permissions and limitations
# under the License.
import inspect
import warnings
import debtcollector
@ -28,6 +29,10 @@ def blip_blop(blip=1, blop=1):
return (blip, blop)
def blip_blop_unwrapped(blip=1, blop=1):
return (blip, blop)
@renames.renamed_kwarg('blip', 'blop', category=PendingDeprecationWarning)
def blip_blop_2(blip=1, blop=1):
return (blip, blop)
@ -43,6 +48,10 @@ def blip_blop_blip(type='cat'):
return "The %s meowed quietly" % type
def blip_blop_blip_unwrapped(type='cat'):
return "The %s meowed quietly" % type
class WoofWoof(object):
@property
def bark(self):
@ -67,14 +76,14 @@ class WoofWoof(object):
class KittyKat(object):
@moves.moved_method('supermeow')
def meow(self):
return self.supermeow()
def meow(self, volume=11):
return self.supermeow(volume)
@moves.moved_method('supermeow', category=PendingDeprecationWarning)
def maow(self):
return self.supermeow()
def maow(self, volume=11):
return self.supermeow(volume)
def supermeow(self):
def supermeow(self, volume=11):
return 'supermeow'
@ -99,6 +108,10 @@ def crimson_lightning(fake_input=None):
return fake_input
def crimson_lightning_unwrapped(fake_input=None):
return fake_input
@removals.remove(category=PendingDeprecationWarning)
def crimson_lightning_to_remove(fake_input=None):
return fake_input
@ -343,6 +356,11 @@ class MovedMethodTest(test_base.TestCase):
self.assertEqual('supermeow', c.supermeow())
self.assertEqual(0, len(capture))
def test_keeps_argspec(self):
# FIXME(blk): This should be assertEqual!
self.assertNotEqual(inspect.getargspec(KittyKat.supermeow),
inspect.getargspec(KittyKat.meow))
class RenamedKwargTest(test_base.TestCase):
def test_basics(self):
@ -397,6 +415,13 @@ class RenamedKwargTest(test_base.TestCase):
self.assertEqual(2, blip_blop_3(blop=2))
self.assertEqual(0, len(capture))
def test_argspec(self):
# The decorated function keeps its argspec.
# FIXME(bknudson): This isn't working right, should be assertEqual!
self.assertNotEqual(inspect.getargspec(blip_blop_unwrapped),
inspect.getargspec(blip_blop))
class UpdatedArgsTest(test_base.TestCase):
def test_basic(self):
@ -415,6 +440,11 @@ class UpdatedArgsTest(test_base.TestCase):
blip_blop_blip(type='kitten'))
self.assertEqual(0, len(capture))
def test_argspec_preserved(self):
# FIXME(bknudson): This should be assertEqual!
self.assertNotEqual(inspect.getargspec(blip_blop_blip_unwrapped),
inspect.getargspec(blip_blop_blip))
class RemovalTests(test_base.TestCase):
def test_function_args(self):
@ -423,6 +453,12 @@ class RemovalTests(test_base.TestCase):
def test_function_noargs(self):
self.assertTrue(red_comet())
def test_function_keeps_argspec(self):
# The decorated function keeps its argspec.
self.assertEqual(
inspect.getargspec(crimson_lightning_unwrapped),
inspect.getargspec(crimson_lightning))
def test_deprecated_kwarg(self):
@removals.removed_kwarg('b')
@ -441,6 +477,17 @@ class RemovalTests(test_base.TestCase):
self.assertEqual(2, f())
self.assertEqual(0, len(capture))
def test_removed_kwarg_keeps_argspec(self):
@removals.removed_kwarg('b')
def f(b=2):
return b
def f_unwrapped(b=2):
return b
self.assertEqual(inspect.getargspec(f_unwrapped),
inspect.getargspec(f))
def test_pending_deprecated_kwarg(self):
@removals.removed_kwarg('b', category=PendingDeprecationWarning)