1# mode: run
2# ticket: 470
3
4
5def func(**kwargs):
6    """
7    >>> func(**{'a' : 7})
8    True
9    >>> func(**SubDict())
10    True
11    >>> func(**NonDict())
12    True
13    """
14    return type(kwargs) is dict and kwargs['a'] == 7
15
16
17class NonDict(object):
18   def __getitem__(self, k):
19       assert k == 'a'
20       return 7
21   def keys(self):
22       return ['a']
23
24def call_non_dict_test():
25    """
26    >>> call_non_dict_test()
27    True
28    """
29    return func(**NonDict())
30
31def call_non_dict_test_kw():
32    """
33    >>> call_non_dict_test_kw()
34    True
35    """
36    return func(b=5, **NonDict())
37
38
39class SubDict(dict):
40    def __init__(self):
41        self['a'] = 7
42
43def call_sub_dict_test():
44    """
45    >>> call_sub_dict_test()
46    True
47    """
48    return func(**SubDict())
49
50def call_sub_dict_test_kw():
51    """
52    >>> call_sub_dict_test_kw()
53    True
54    """
55    return func(b=5, **SubDict())
56