debian-koji/tests/test_lib/test_argspec.py
2020-10-06 15:00:23 +02:00

108 lines
3.7 KiB
Python

from __future__ import absolute_import
import unittest
import koji.util
class TestApplyArgspec(unittest.TestCase):
def test_apply_argspec(self):
# Start simple: def func(n)
argspec = (['n'], None, None, None)
badargs = [
# [args, kwargs]
[(), None],
[(1, 2), None],
[(1,), {'n': 1}],
[(1,), {'m': 1}],
[(), {'m': 1}],
]
for args, kwargs in badargs:
with self.assertRaises(koji.ParameterError):
koji.util.apply_argspec(argspec, args, kwargs)
ret = koji.util.apply_argspec(argspec, (1,), None)
self.assertEqual(ret, {'n': 1})
ret = koji.util.apply_argspec(argspec, (), {'n': 1})
self.assertEqual(ret, {'n': 1})
# Using *args; def func(a, b, *args)
argspec = (['a', 'b'], 'args', None, None)
badargs = [
[(), None],
[(1,), None],
[(1,2), {'a': 5}],
[(1,2), {'x': 5}],
[(1,), {'b': 2, 'c': 3}],
]
for args, kwargs in badargs:
with self.assertRaises(koji.ParameterError):
koji.util.apply_argspec(argspec, args, kwargs)
ret = koji.util.apply_argspec(argspec, (1,2), None)
self.assertEqual(ret, {'a':1, 'b':2, 'args': ()})
ret = koji.util.apply_argspec(argspec, (1,2,3), None)
self.assertEqual(ret, {'a':1, 'b':2, 'args': (3,)})
ret = koji.util.apply_argspec(argspec, (1,), {'b':2})
self.assertEqual(ret, {'a':1, 'b':2, 'args': ()})
# Using **kwargs: def func(a, b, **kwargs)
argspec = (['a', 'b'], None, 'kwargs', None)
badargs = [
[(), None],
[(), {}],
[(1, 2), {'a': 2}],
[(1, 2), {'b': 2}],
[(1,), {'a': 1, 'b': 2}],
]
for args, kwargs in badargs:
with self.assertRaises(koji.ParameterError):
koji.util.apply_argspec(argspec, (), None)
ret = koji.util.apply_argspec(argspec, (), {'a':1, 'b':2})
self.assertEqual(ret, {'a':1, 'b':2, 'kwargs':{}})
ret = koji.util.apply_argspec(argspec, (), {'a':1, 'b':2, 'c':3})
self.assertEqual(ret, {'a':1, 'b':2, 'kwargs':{'c':3}})
ret = koji.util.apply_argspec(argspec, (1,2), {'c':3})
self.assertEqual(ret, {'a':1, 'b':2, 'kwargs':{'c':3}})
ret = koji.util.apply_argspec(argspec, (1,), {'b': 2, 'c':3})
self.assertEqual(ret, {'a':1, 'b':2, 'kwargs':{'c':3}})
# With defaults: def func(a=1, b=2)
argspec = (['a', 'b'], None, None, [1,2])
badargs = [
[(1,2,3), None],
[(1,2), {'a': 5}],
[(1,2), {'b': 5}],
[(1,2), {'x': 5}],
[(), {'x': 5}],
[(1,), {'b': 2, 'c': 3}],
]
for args, kwargs in badargs:
with self.assertRaises(koji.ParameterError):
koji.util.apply_argspec(argspec, args, kwargs)
ret = koji.util.apply_argspec(argspec, (), {})
self.assertEqual(ret, {'a':1, 'b':2})
# Partial defaults: def func(a, b=2)
argspec = (['a', 'b'], None, None, [2])
badargs = [
[(1,2,3), None],
[(1,2), {'a': 5}],
[(1,2), {'b': 5}],
[(1,2), {'x': 5}],
[(), {'x': 5}],
[(1,), {'b': 2, 'c': 3}],
]
for args, kwargs in badargs:
with self.assertRaises(koji.ParameterError):
koji.util.apply_argspec(argspec, args, kwargs)
ret = koji.util.apply_argspec(argspec, (1,), {})
self.assertEqual(ret, {'a':1, 'b':2})