/
test_defaults.py
131 lines (92 loc) · 4.12 KB
/
test_defaults.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
from settings_collector import SettingsCollector, SC_Setting, sc_defaults
from tests.utils import TestsBase, patch_env
class my_settings(SettingsCollector):
foo = SC_Setting("food")
bar = SC_Setting("bard")
class TestBasicFunctionality(TestsBase):
def tearDown(self):
my_settings.clear_cache()
def test_defaults(self):
@sc_defaults(my_settings)
def f(x, foo):
return f"{x}:{foo}"
self.assertEqual(f(17), "17:food")
self.assertEqual(f(17, "afoot"), "17:afoot")
self.assertEqual(f(17, foo="afoot"), "17:afoot")
self.assertEqual(f(x=17, foo="afoot"), "17:afoot")
self.assertEqual(f(17), "17:food")
self.assertEqual(f(x=17), "17:food")
self.assertEqual(f(17, foo="afoot"), "17:afoot")
def test_defaults_with_func_defaults(self):
@sc_defaults(my_settings)
def f(x, y=17, foo="toe-foo"):
return f"{x}:{y}:{foo}"
self.assertEqual(f(13, 19), "13:19:toe-foo")
self.assertEqual(f(13, 19, "afoot"), "13:19:afoot")
self.assertEqual(f(13, 19, foo="afoot"), "13:19:afoot")
self.assertEqual(f(13, y=19, foo="afoot"), "13:19:afoot")
self.assertEqual(f(13), "13:17:toe-foo")
self.assertEqual(f(x=13), "13:17:toe-foo")
self.assertEqual(f(13, foo="afoot"), "13:17:afoot")
def test_defaults_on_method(self):
class Foo:
@sc_defaults(my_settings)
def f(self, x, foo):
return f"{x}:{foo}"
self.assertEqual(Foo().f(17), "17:food")
self.assertEqual(Foo().f(17, "afoot"), "17:afoot")
self.assertEqual(Foo().f(17, foo="afoot"), "17:afoot")
self.assertEqual(Foo().f(x=17, foo="afoot"), "17:afoot")
self.assertEqual(Foo().f(17), "17:food")
self.assertEqual(Foo().f(x=17), "17:food")
self.assertEqual(Foo().f(17, foo="afoot"), "17:afoot")
def test_defaults_on_classmethod(self):
class Foo:
@classmethod
@sc_defaults(my_settings)
def f(cls, x, foo):
return f"{x}:{foo}"
self.assertEqual(Foo.f(17), "17:food")
self.assertEqual(Foo.f(17, "afoot"), "17:afoot")
self.assertEqual(Foo.f(17, foo="afoot"), "17:afoot")
self.assertEqual(Foo.f(x=17, foo="afoot"), "17:afoot")
self.assertEqual(Foo.f(17), "17:food")
self.assertEqual(Foo.f(x=17), "17:food")
self.assertEqual(Foo.f(17, foo="afoot"), "17:afoot")
def test_defaults_on_staticmethod(self):
class Foo:
@staticmethod
@sc_defaults(my_settings)
def f(x, foo):
return f"{x}:{foo}"
self.assertEqual(Foo.f(17), "17:food")
self.assertEqual(Foo.f(17, "afoot"), "17:afoot")
self.assertEqual(Foo.f(17, foo="afoot"), "17:afoot")
self.assertEqual(Foo.f(x=17, foo="afoot"), "17:afoot")
self.assertEqual(Foo.f(17), "17:food")
self.assertEqual(Foo.f(x=17), "17:food")
self.assertEqual(Foo.f(17, foo="afoot"), "17:afoot")
def test_defaults_on_init(self):
class Foo:
@sc_defaults(my_settings)
def __init__(self, x, foo):
self.x = x
self.foo = foo
def f(self):
return f"{self.x}:{self.foo}"
self.assertEqual(Foo(17).f(), "17:food")
self.assertEqual(Foo(17, "afoot").f(), "17:afoot")
self.assertEqual(Foo(17, foo="afoot").f(), "17:afoot")
self.assertEqual(Foo(x=17, foo="afoot").f(), "17:afoot")
self.assertEqual(Foo(17).f(), "17:food")
self.assertEqual(Foo(x=17).f(), "17:food")
self.assertEqual(Foo(17, foo="afoot").f(), "17:afoot")
def test_defaults_with_scope(self):
@sc_defaults(my_settings, scope_arg="scope")
def f(x, foo, scope=""):
return f"{x}:{foo}"
with patch_env(foo="fool", scoped__foo="toe-foo"):
self.assertEqual(f(17), "17:fool")
self.assertEqual(f(17, "afoot"), "17:afoot")
self.assertEqual(f(17, scope="scoped"), "17:toe-foo")
self.assertEqual(f(17, "afoot", "scoped"), "17:afoot")