Add tests for decorated argspec preservation
Tests are added that show that several of the decorators, when used on functions, lose the argspec. This causes the documentation to be generated incorrectly since the args aren't shown for decorated functions. The tests show that some of the decorators work as expected. Change-Id: Id024f5110082a88c30e71e991764320b3aed07aa
This commit is contained in:
parent
3165b44e51
commit
1f5816ad02
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user