root / kamaki / cli / argument / test.py @ c0fbf04c
History | View | Annotate | Download (15.2 kB)
1 | 5286e2c3 | Stavros Sachtouris | # Copyright 2013 GRNET S.A. All rights reserved.
|
---|---|---|---|
2 | 5286e2c3 | Stavros Sachtouris | #
|
3 | 5286e2c3 | Stavros Sachtouris | # Redistribution and use in source and binary forms, with or
|
4 | 5286e2c3 | Stavros Sachtouris | # without modification, are permitted provided that the following
|
5 | 5286e2c3 | Stavros Sachtouris | # conditions are met:
|
6 | 5286e2c3 | Stavros Sachtouris | #
|
7 | 5286e2c3 | Stavros Sachtouris | # 1. Redistributions of source code must retain the above
|
8 | 5286e2c3 | Stavros Sachtouris | # copyright notice, this list of conditions and the following
|
9 | 5286e2c3 | Stavros Sachtouris | # disclaimer.
|
10 | 5286e2c3 | Stavros Sachtouris | #
|
11 | 5286e2c3 | Stavros Sachtouris | # 2. Redistributions in binary form must reproduce the above
|
12 | 5286e2c3 | Stavros Sachtouris | # copyright notice, this list of conditions and the following
|
13 | 5286e2c3 | Stavros Sachtouris | # disclaimer in the documentation and/or other materials
|
14 | 5286e2c3 | Stavros Sachtouris | # provided with the distribution.
|
15 | 5286e2c3 | Stavros Sachtouris | #
|
16 | 5286e2c3 | Stavros Sachtouris | # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 | 5286e2c3 | Stavros Sachtouris | # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 | 5286e2c3 | Stavros Sachtouris | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 | 5286e2c3 | Stavros Sachtouris | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
20 | 5286e2c3 | Stavros Sachtouris | # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 | 5286e2c3 | Stavros Sachtouris | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 | 5286e2c3 | Stavros Sachtouris | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 | 5286e2c3 | Stavros Sachtouris | # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
24 | 5286e2c3 | Stavros Sachtouris | # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 | 5286e2c3 | Stavros Sachtouris | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
26 | 5286e2c3 | Stavros Sachtouris | # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 | 5286e2c3 | Stavros Sachtouris | # POSSIBILITY OF SUCH DAMAGE.
|
28 | 5286e2c3 | Stavros Sachtouris | #
|
29 | 5286e2c3 | Stavros Sachtouris | # The views and conclusions contained in the software and
|
30 | 5286e2c3 | Stavros Sachtouris | # documentation are those of the authors and should not be
|
31 | 5286e2c3 | Stavros Sachtouris | # interpreted as representing official policies, either expressed
|
32 | 5286e2c3 | Stavros Sachtouris | # or implied, of GRNET S.A.
|
33 | 5286e2c3 | Stavros Sachtouris | |
34 | b7ff6e0c | Stavros Sachtouris | from mock import patch, call, MagicMock |
35 | 5286e2c3 | Stavros Sachtouris | from unittest import TestCase |
36 | f17d6cb5 | Stavros Sachtouris | from StringIO import StringIO |
37 | b7ff6e0c | Stavros Sachtouris | from datetime import datetime |
38 | 02987e9c | Stavros Sachtouris | #from itertools import product
|
39 | 5286e2c3 | Stavros Sachtouris | |
40 | 02987e9c | Stavros Sachtouris | from kamaki.cli import argument, errors |
41 | a7aacf12 | Stavros Sachtouris | from kamaki.cli.config import Config |
42 | 5286e2c3 | Stavros Sachtouris | |
43 | 5286e2c3 | Stavros Sachtouris | |
44 | 8d427cb9 | Stavros Sachtouris | def assert_dicts_are_equal(test_case, d1, d2): |
45 | 8d427cb9 | Stavros Sachtouris | for k, v in d1.items(): |
46 | 8d427cb9 | Stavros Sachtouris | test_case.assertTrue(k in d2)
|
47 | 8d427cb9 | Stavros Sachtouris | if isinstance(v, dict): |
48 | 8d427cb9 | Stavros Sachtouris | test_case.assert_dicts_are_equal(v, d2[k]) |
49 | 8d427cb9 | Stavros Sachtouris | else:
|
50 | 8d427cb9 | Stavros Sachtouris | test_case.assertEqual(unicode(v), unicode(d2[k])) |
51 | 8d427cb9 | Stavros Sachtouris | |
52 | 8d427cb9 | Stavros Sachtouris | |
53 | c89d5f34 | Stavros Sachtouris | cnf_path = 'kamaki.cli.config.Config'
|
54 | c89d5f34 | Stavros Sachtouris | |
55 | c89d5f34 | Stavros Sachtouris | |
56 | 5286e2c3 | Stavros Sachtouris | class Argument(TestCase): |
57 | 5286e2c3 | Stavros Sachtouris | |
58 | 5286e2c3 | Stavros Sachtouris | def test___init__(self): |
59 | 5286e2c3 | Stavros Sachtouris | self.assertRaises(ValueError, argument.Argument, 'non-integer') |
60 | 5286e2c3 | Stavros Sachtouris | self.assertRaises(AssertionError, argument.Argument, 1) |
61 | f17d6cb5 | Stavros Sachtouris | self.assertRaises(AssertionError, argument.Argument, 0, 'noname') |
62 | f17d6cb5 | Stavros Sachtouris | self.assertRaises(AssertionError, argument.Argument, 0, '--no name') |
63 | f17d6cb5 | Stavros Sachtouris | self.assertRaises(AssertionError, argument.Argument, 0, ['-n', 'n m']) |
64 | 5286e2c3 | Stavros Sachtouris | for arity, help, parsed_name, default in ( |
65 | 5286e2c3 | Stavros Sachtouris | (0, 'help 0', '--zero', None), |
66 | 5286e2c3 | Stavros Sachtouris | (1, 'help 1', ['--one', '-o'], 'lala'), |
67 | 5286e2c3 | Stavros Sachtouris | (-1, 'help -1', ['--help', '--or', '--more'], 0), |
68 | 5286e2c3 | Stavros Sachtouris | (0, 'help 0 again', ['--again', ], True)): |
69 | 5286e2c3 | Stavros Sachtouris | a = argument.Argument(arity, help, parsed_name, default) |
70 | 5286e2c3 | Stavros Sachtouris | if arity:
|
71 | 5286e2c3 | Stavros Sachtouris | self.assertEqual(arity, a.arity)
|
72 | 5286e2c3 | Stavros Sachtouris | self.assertEqual(help, a.help)
|
73 | 5286e2c3 | Stavros Sachtouris | |
74 | 5286e2c3 | Stavros Sachtouris | exp_name = parsed_name if (
|
75 | 5286e2c3 | Stavros Sachtouris | isinstance(parsed_name, list)) else [parsed_name, ] |
76 | 5286e2c3 | Stavros Sachtouris | self.assertEqual(exp_name, a.parsed_name)
|
77 | 5286e2c3 | Stavros Sachtouris | |
78 | 5286e2c3 | Stavros Sachtouris | exp_default = default or (None if arity else False) |
79 | 5286e2c3 | Stavros Sachtouris | self.assertEqual(exp_default, a.default)
|
80 | 5286e2c3 | Stavros Sachtouris | |
81 | f17d6cb5 | Stavros Sachtouris | def test_value(self): |
82 | f17d6cb5 | Stavros Sachtouris | a = argument.Argument(1, parsed_name='--value') |
83 | f17d6cb5 | Stavros Sachtouris | for value in (None, '', 0, 0.1, -12, [1, 'a', 2.8], (3, 'lala'), 'pi'): |
84 | f17d6cb5 | Stavros Sachtouris | a.value = value |
85 | f17d6cb5 | Stavros Sachtouris | self.assertEqual(value, a.value)
|
86 | f17d6cb5 | Stavros Sachtouris | |
87 | f17d6cb5 | Stavros Sachtouris | def test_update_parser(self): |
88 | f17d6cb5 | Stavros Sachtouris | for i, arity in enumerate((-1, 0, 1)): |
89 | f17d6cb5 | Stavros Sachtouris | arp = argument.ArgumentParser() |
90 | f17d6cb5 | Stavros Sachtouris | pname, aname = '--pname%s' % i, 'a_name_%s' % i |
91 | f17d6cb5 | Stavros Sachtouris | a = argument.Argument(arity, 'args', pname, 42) |
92 | f17d6cb5 | Stavros Sachtouris | a.update_parser(arp, aname) |
93 | f17d6cb5 | Stavros Sachtouris | |
94 | f17d6cb5 | Stavros Sachtouris | f = StringIO() |
95 | f17d6cb5 | Stavros Sachtouris | arp.print_usage(file=f), f.seek(0)
|
96 | f17d6cb5 | Stavros Sachtouris | usage, exp = f.readline(), '[%s%s]\n' % (
|
97 | f17d6cb5 | Stavros Sachtouris | pname, (' %s' % aname.upper()) if arity else '') |
98 | f17d6cb5 | Stavros Sachtouris | self.assertEqual(usage[-len(exp):], exp) |
99 | f17d6cb5 | Stavros Sachtouris | del arp
|
100 | f17d6cb5 | Stavros Sachtouris | |
101 | 5286e2c3 | Stavros Sachtouris | |
102 | a7aacf12 | Stavros Sachtouris | class ConfigArgument(TestCase): |
103 | a7aacf12 | Stavros Sachtouris | |
104 | a7aacf12 | Stavros Sachtouris | def setUp(self): |
105 | a7aacf12 | Stavros Sachtouris | argument._config_arg = argument.ConfigArgument('Recovered Path')
|
106 | a7aacf12 | Stavros Sachtouris | |
107 | a7aacf12 | Stavros Sachtouris | def test_value(self): |
108 | a7aacf12 | Stavros Sachtouris | c = argument._config_arg |
109 | a7aacf12 | Stavros Sachtouris | self.assertEqual(c.value, None) |
110 | a7aacf12 | Stavros Sachtouris | exp = '/some/random/path'
|
111 | a7aacf12 | Stavros Sachtouris | c.value = exp |
112 | a7aacf12 | Stavros Sachtouris | self.assertTrue(isinstance(c.value, Config)) |
113 | a7aacf12 | Stavros Sachtouris | self.assertEqual(c.file_path, exp)
|
114 | a7aacf12 | Stavros Sachtouris | self.assertEqual(c.value.path, exp)
|
115 | a7aacf12 | Stavros Sachtouris | |
116 | a7aacf12 | Stavros Sachtouris | def test_get(self): |
117 | a7aacf12 | Stavros Sachtouris | c = argument._config_arg |
118 | a7aacf12 | Stavros Sachtouris | c.value = None
|
119 | c89d5f34 | Stavros Sachtouris | with patch('%s.get' % cnf_path, return_value='config') as get: |
120 | c89d5f34 | Stavros Sachtouris | self.assertEqual(c.value.get('global', 'config_cli'), 'config') |
121 | c89d5f34 | Stavros Sachtouris | self.assertEqual(get.mock_calls[-1], call('global', 'config_cli')) |
122 | a7aacf12 | Stavros Sachtouris | |
123 | c89d5f34 | Stavros Sachtouris | @patch('%s.keys' % cnf_path, return_value=( |
124 | c89d5f34 | Stavros Sachtouris | 'image_cli', 'config_cli', 'history_cli', 'file')) |
125 | c89d5f34 | Stavros Sachtouris | def test_groups(self, keys): |
126 | a7aacf12 | Stavros Sachtouris | c = argument._config_arg |
127 | a7aacf12 | Stavros Sachtouris | c.value = None
|
128 | c89d5f34 | Stavros Sachtouris | cset = set(c.groups)
|
129 | c89d5f34 | Stavros Sachtouris | self.assertTrue(cset.issuperset(['image', 'config', 'history'])) |
130 | c89d5f34 | Stavros Sachtouris | self.assertEqual(keys.mock_calls[-1], call('global')) |
131 | c89d5f34 | Stavros Sachtouris | self.assertFalse('file' in cset) |
132 | c89d5f34 | Stavros Sachtouris | self.assertEqual(keys.mock_calls[-1], call('global')) |
133 | c89d5f34 | Stavros Sachtouris | |
134 | c89d5f34 | Stavros Sachtouris | @patch('%s.items' % cnf_path, return_value=( |
135 | c89d5f34 | Stavros Sachtouris | ('image_cli', 'image'), ('file', 'pithos'), |
136 | c89d5f34 | Stavros Sachtouris | ('config_cli', 'config'), ('history_cli', 'history'))) |
137 | c89d5f34 | Stavros Sachtouris | def test_cli_specs(self, items): |
138 | a7aacf12 | Stavros Sachtouris | c = argument._config_arg |
139 | a7aacf12 | Stavros Sachtouris | c.value = None
|
140 | c89d5f34 | Stavros Sachtouris | cset = set(c.cli_specs)
|
141 | c89d5f34 | Stavros Sachtouris | self.assertTrue(cset.issuperset([
|
142 | a7aacf12 | Stavros Sachtouris | ('image', 'image'), ('config', 'config'), ('history', 'history')])) |
143 | c89d5f34 | Stavros Sachtouris | self.assertEqual(items.mock_calls[-1], call('global')) |
144 | c89d5f34 | Stavros Sachtouris | self.assertFalse(cset.issuperset([('file', 'pithos'), ])) |
145 | c89d5f34 | Stavros Sachtouris | self.assertEqual(items.mock_calls[-1], call('global')) |
146 | a7aacf12 | Stavros Sachtouris | |
147 | a7aacf12 | Stavros Sachtouris | def test_get_global(self): |
148 | a7aacf12 | Stavros Sachtouris | c = argument._config_arg |
149 | a7aacf12 | Stavros Sachtouris | c.value = None
|
150 | a7aacf12 | Stavros Sachtouris | for k, v in ( |
151 | a7aacf12 | Stavros Sachtouris | ('config_cli', 'config'), |
152 | a7aacf12 | Stavros Sachtouris | ('image_cli', 'image'), |
153 | a7aacf12 | Stavros Sachtouris | ('history_cli', 'history')): |
154 | c89d5f34 | Stavros Sachtouris | with patch('%s.get_global' % cnf_path, return_value=v) as gg: |
155 | c89d5f34 | Stavros Sachtouris | self.assertEqual(c.get_global(k), v)
|
156 | c89d5f34 | Stavros Sachtouris | self.assertEqual(gg.mock_calls[-1], call(k)) |
157 | a7aacf12 | Stavros Sachtouris | |
158 | a7aacf12 | Stavros Sachtouris | def test_get_cloud(self): |
159 | a7aacf12 | Stavros Sachtouris | c = argument._config_arg |
160 | a7aacf12 | Stavros Sachtouris | c.value = None
|
161 | c89d5f34 | Stavros Sachtouris | with patch(
|
162 | c89d5f34 | Stavros Sachtouris | '%s.get_cloud' % cnf_path,
|
163 | c89d5f34 | Stavros Sachtouris | return_value='http://cloud') as get_cloud: |
164 | c89d5f34 | Stavros Sachtouris | self.assertTrue(len(c.get_cloud('mycloud', 'url')) > 0) |
165 | c89d5f34 | Stavros Sachtouris | self.assertEqual(get_cloud.mock_calls[-1], call('mycloud', 'url')) |
166 | c89d5f34 | Stavros Sachtouris | with patch(
|
167 | c89d5f34 | Stavros Sachtouris | '%s.get_cloud' % cnf_path,
|
168 | c89d5f34 | Stavros Sachtouris | side_effect=KeyError('no token')) as get_cloud: |
169 | c89d5f34 | Stavros Sachtouris | self.assertRaises(KeyError, c.get_cloud, 'mycloud', 'token') |
170 | c89d5f34 | Stavros Sachtouris | invalidcloud = 'PLEASE_DO_NOT_EVER_NAME_YOUR_CLOUD_LIKE_THIS111'
|
171 | c89d5f34 | Stavros Sachtouris | self.assertRaises(KeyError, c.get_cloud, invalidcloud, 'url') |
172 | a7aacf12 | Stavros Sachtouris | |
173 | a7aacf12 | Stavros Sachtouris | |
174 | 1bd4f765 | Stavros Sachtouris | class RuntimeConfigArgument(TestCase): |
175 | 1bd4f765 | Stavros Sachtouris | |
176 | 1bd4f765 | Stavros Sachtouris | def setUp(self): |
177 | 1bd4f765 | Stavros Sachtouris | argument._config_arg = argument.ConfigArgument('Recovered Path')
|
178 | 1bd4f765 | Stavros Sachtouris | |
179 | 1bd4f765 | Stavros Sachtouris | @patch('kamaki.cli.argument.Argument.__init__') |
180 | 1bd4f765 | Stavros Sachtouris | def test___init__(self, arg): |
181 | 1bd4f765 | Stavros Sachtouris | config, help, pname, default = 'config', 'help', 'pname', 'default' |
182 | 1bd4f765 | Stavros Sachtouris | rca = argument.RuntimeConfigArgument(config, help, pname, default) |
183 | 1bd4f765 | Stavros Sachtouris | self.assertTrue(isinstance(rca, argument.RuntimeConfigArgument)) |
184 | 1bd4f765 | Stavros Sachtouris | self.assertEqual(rca._config_arg, config)
|
185 | 1bd4f765 | Stavros Sachtouris | self.assertEqual(arg.mock_calls[-1], call(1, help, pname, default)) |
186 | 1bd4f765 | Stavros Sachtouris | |
187 | 34c480f2 | Stavros Sachtouris | @patch('%s.override' % cnf_path) |
188 | 34c480f2 | Stavros Sachtouris | def test_value(self, override): |
189 | 34c480f2 | Stavros Sachtouris | config, help, pname, default = argument._config_arg, 'help', '-n', 'df' |
190 | 34c480f2 | Stavros Sachtouris | config.value = None
|
191 | 34c480f2 | Stavros Sachtouris | rca = argument.RuntimeConfigArgument(config, help, pname, default) |
192 | 34c480f2 | Stavros Sachtouris | self.assertEqual(rca.value, default)
|
193 | 34c480f2 | Stavros Sachtouris | |
194 | 34c480f2 | Stavros Sachtouris | for options in ('grp', 'grp.opt', 'k v', '=nokey', 2.8, None, 42, ''): |
195 | 34c480f2 | Stavros Sachtouris | self.assertRaises(TypeError, rca.value, options) |
196 | 34c480f2 | Stavros Sachtouris | |
197 | 34c480f2 | Stavros Sachtouris | for options in ('key=val', 'grp.key=val', 'dotted.opt.key=val'): |
198 | 34c480f2 | Stavros Sachtouris | rca.value = options |
199 | 34c480f2 | Stavros Sachtouris | option, sep, val = options.partition('=')
|
200 | 34c480f2 | Stavros Sachtouris | grp, sep, key = option.partition('.')
|
201 | 34c480f2 | Stavros Sachtouris | grp, key = (grp, key) if key else ('global', grp) |
202 | 34c480f2 | Stavros Sachtouris | self.assertEqual(override.mock_calls[-1], call(grp, key, val)) |
203 | 1bd4f765 | Stavros Sachtouris | |
204 | 3a5b1ceb | Stavros Sachtouris | |
205 | 3a5b1ceb | Stavros Sachtouris | class FlagArgument(TestCase): |
206 | 3a5b1ceb | Stavros Sachtouris | |
207 | 3a5b1ceb | Stavros Sachtouris | @patch('kamaki.cli.argument.Argument.__init__') |
208 | 3a5b1ceb | Stavros Sachtouris | def test___init__(self, arg): |
209 | 3a5b1ceb | Stavros Sachtouris | help, pname, default = 'help', 'pname', 'default' |
210 | 3a5b1ceb | Stavros Sachtouris | fa = argument.FlagArgument(help, pname, default) |
211 | 3a5b1ceb | Stavros Sachtouris | self.assertTrue(isinstance(fa, argument.FlagArgument)) |
212 | 3a5b1ceb | Stavros Sachtouris | arg.assert_called_once(0, help, pname, default)
|
213 | 3a5b1ceb | Stavros Sachtouris | |
214 | 3a5b1ceb | Stavros Sachtouris | |
215 | 3a5b1ceb | Stavros Sachtouris | class ValueArgument(TestCase): |
216 | 3a5b1ceb | Stavros Sachtouris | |
217 | 3a5b1ceb | Stavros Sachtouris | @patch('kamaki.cli.argument.Argument.__init__') |
218 | 3a5b1ceb | Stavros Sachtouris | def test___init__(self, arg): |
219 | 3a5b1ceb | Stavros Sachtouris | help, pname, default = 'help', 'pname', 'default' |
220 | 3a5b1ceb | Stavros Sachtouris | fa = argument.ValueArgument(help, pname, default) |
221 | 3a5b1ceb | Stavros Sachtouris | self.assertTrue(isinstance(fa, argument.ValueArgument)) |
222 | 3a5b1ceb | Stavros Sachtouris | arg.assert_called_once(1, help, pname, default)
|
223 | 3a5b1ceb | Stavros Sachtouris | |
224 | 3a5b1ceb | Stavros Sachtouris | |
225 | 02987e9c | Stavros Sachtouris | class IntArgument(TestCase): |
226 | 02987e9c | Stavros Sachtouris | |
227 | 02987e9c | Stavros Sachtouris | def test_value(self): |
228 | 02987e9c | Stavros Sachtouris | ia = argument.IntArgument(parsed_name='--ia')
|
229 | 02987e9c | Stavros Sachtouris | self.assertEqual(ia.value, None) |
230 | 02987e9c | Stavros Sachtouris | for v in (1, 0, -1, 923455555555555555555555555555555): |
231 | 02987e9c | Stavros Sachtouris | ia.value = v |
232 | 02987e9c | Stavros Sachtouris | self.assertEqual(ia.value, v)
|
233 | 02987e9c | Stavros Sachtouris | for v in ('1', '-1', 2.8): |
234 | 02987e9c | Stavros Sachtouris | ia.value = v |
235 | 02987e9c | Stavros Sachtouris | self.assertEqual(ia.value, int(v)) |
236 | 02987e9c | Stavros Sachtouris | for v, err in ( |
237 | 02987e9c | Stavros Sachtouris | ('invalid', errors.CLIError),
|
238 | 02987e9c | Stavros Sachtouris | (None, TypeError), (False, TypeError), ([1, 2, 3], TypeError)): |
239 | 02987e9c | Stavros Sachtouris | try:
|
240 | 02987e9c | Stavros Sachtouris | ia.value = v |
241 | 02987e9c | Stavros Sachtouris | except Exception as e: |
242 | 02987e9c | Stavros Sachtouris | self.assertTrue(isinstance(e, err)) |
243 | 02987e9c | Stavros Sachtouris | |
244 | 02987e9c | Stavros Sachtouris | |
245 | b7ff6e0c | Stavros Sachtouris | class DateArgument(TestCase): |
246 | b7ff6e0c | Stavros Sachtouris | |
247 | b7ff6e0c | Stavros Sachtouris | def test_timestamp(self): |
248 | b7ff6e0c | Stavros Sachtouris | da = argument.DateArgument(parsed_name='--date')
|
249 | b7ff6e0c | Stavros Sachtouris | self.assertEqual(da.timestamp, None) |
250 | b7ff6e0c | Stavros Sachtouris | date, format, exp = '24-10-1917', '%d-%m-%Y', -1646964000.0 |
251 | b7ff6e0c | Stavros Sachtouris | da._value = argument.dtm.strptime(date, format) |
252 | b7ff6e0c | Stavros Sachtouris | self.assertEqual(da.timestamp, exp)
|
253 | b7ff6e0c | Stavros Sachtouris | |
254 | b7ff6e0c | Stavros Sachtouris | def test_formated(self): |
255 | b7ff6e0c | Stavros Sachtouris | da = argument.DateArgument(parsed_name='--date')
|
256 | b7ff6e0c | Stavros Sachtouris | self.assertEqual(da.formated, None) |
257 | b7ff6e0c | Stavros Sachtouris | date, format, exp = ( |
258 | b7ff6e0c | Stavros Sachtouris | '24-10-1917', '%d-%m-%Y', 'Wed Oct 24 00:00:00 1917') |
259 | b7ff6e0c | Stavros Sachtouris | da._value = argument.dtm.strptime(date, format) |
260 | b7ff6e0c | Stavros Sachtouris | self.assertEqual(da.formated, exp)
|
261 | b7ff6e0c | Stavros Sachtouris | |
262 | b7ff6e0c | Stavros Sachtouris | @patch('kamaki.cli.argument.DateArgument.timestamp') |
263 | b7ff6e0c | Stavros Sachtouris | @patch('kamaki.cli.argument.DateArgument.format_date') |
264 | b7ff6e0c | Stavros Sachtouris | def test_value(self, format_date, timestamp): |
265 | b7ff6e0c | Stavros Sachtouris | da = argument.DateArgument(parsed_name='--date')
|
266 | b7ff6e0c | Stavros Sachtouris | self.assertTrue(isinstance(da.value, MagicMock)) |
267 | b7ff6e0c | Stavros Sachtouris | da.value = 'Something'
|
268 | b7ff6e0c | Stavros Sachtouris | format_date.assert_called_once(call('Something'))
|
269 | b7ff6e0c | Stavros Sachtouris | |
270 | b7ff6e0c | Stavros Sachtouris | def test_format_date(self): |
271 | b7ff6e0c | Stavros Sachtouris | da = argument.DateArgument(parsed_name='--date')
|
272 | b7ff6e0c | Stavros Sachtouris | for datestr, exp in ( |
273 | b7ff6e0c | Stavros Sachtouris | ('Wed Oct 24 01:02:03 1917', datetime(1917, 10, 24, 1, 2, 3)), |
274 | b7ff6e0c | Stavros Sachtouris | ('24-10-1917', datetime(1917, 10, 24)), |
275 | b7ff6e0c | Stavros Sachtouris | ('01:02:03 24-10-1917', datetime(1917, 10, 24, 1, 2, 3))): |
276 | b7ff6e0c | Stavros Sachtouris | self.assertEqual(da.format_date(datestr), exp)
|
277 | b7ff6e0c | Stavros Sachtouris | for datestr, err in ( |
278 | b7ff6e0c | Stavros Sachtouris | ('32-40-20134', errors.CLIError),
|
279 | b7ff6e0c | Stavros Sachtouris | ('Wednesday, 24 Oct 2017', errors.CLIError),
|
280 | b7ff6e0c | Stavros Sachtouris | (None, TypeError), (0.8, TypeError)): |
281 | b7ff6e0c | Stavros Sachtouris | self.assertRaises(err, da.format_date, datestr)
|
282 | b7ff6e0c | Stavros Sachtouris | |
283 | b7ff6e0c | Stavros Sachtouris | |
284 | 8d427cb9 | Stavros Sachtouris | class VersionArgument(TestCase): |
285 | 8d427cb9 | Stavros Sachtouris | |
286 | 8d427cb9 | Stavros Sachtouris | def test_value(self): |
287 | 8d427cb9 | Stavros Sachtouris | va = argument.VersionArgument(parsed_name='--version')
|
288 | 8d427cb9 | Stavros Sachtouris | self.assertTrue(va, argument.VersionArgument)
|
289 | 8d427cb9 | Stavros Sachtouris | va.value = 'some value'
|
290 | 8d427cb9 | Stavros Sachtouris | self.assertEqual(va.value, 'some value') |
291 | 8d427cb9 | Stavros Sachtouris | |
292 | 8d427cb9 | Stavros Sachtouris | |
293 | 8d427cb9 | Stavros Sachtouris | class KeyValueArgument(TestCase): |
294 | 8d427cb9 | Stavros Sachtouris | |
295 | 8d427cb9 | Stavros Sachtouris | @patch('kamaki.cli.argument.Argument.__init__') |
296 | 8d427cb9 | Stavros Sachtouris | def test___init__(self, init): |
297 | 8d427cb9 | Stavros Sachtouris | help, pname, default = 'help', 'pname', 'default' |
298 | 8d427cb9 | Stavros Sachtouris | kva = argument.KeyValueArgument(help, pname, default) |
299 | 8d427cb9 | Stavros Sachtouris | self.assertTrue(isinstance(kva, argument.KeyValueArgument)) |
300 | 8d427cb9 | Stavros Sachtouris | self.assertEqual(init.mock_calls[-1], call(-1, help, pname, default)) |
301 | 8d427cb9 | Stavros Sachtouris | |
302 | 8d427cb9 | Stavros Sachtouris | def test_value(self): |
303 | 8d427cb9 | Stavros Sachtouris | kva = argument.KeyValueArgument(parsed_name='--keyval')
|
304 | 8d427cb9 | Stavros Sachtouris | self.assertEqual(kva.value, None) |
305 | 8d427cb9 | Stavros Sachtouris | for kvpairs in ( |
306 | 8d427cb9 | Stavros Sachtouris | 'strval', 'key=val', 2.8, 42, None, |
307 | 8d427cb9 | Stavros Sachtouris | ('key', 'val'), ('key val'), ['=val', 'key=val'], |
308 | 8d427cb9 | Stavros Sachtouris | ['key1=val1', 'key2 val2'], ('key1 = val1', )): |
309 | 8d427cb9 | Stavros Sachtouris | self.assertRaises(errors.CLIError, kva.value, kvpairs)
|
310 | 8d427cb9 | Stavros Sachtouris | for kvpairs, exp in ( |
311 | 8d427cb9 | Stavros Sachtouris | (('key=val', ), {'key': 'val'}), |
312 | 8d427cb9 | Stavros Sachtouris | (['key1=val1', 'key2=val2'], {'key1': 'val1', 'key2': 'val2'}), |
313 | 8d427cb9 | Stavros Sachtouris | ( |
314 | 8d427cb9 | Stavros Sachtouris | ('k1=v1 v2', 'k3=', 'k 4=v4'), |
315 | 8d427cb9 | Stavros Sachtouris | {'k1': 'v1 v2', 'k3': '', 'k 4': 'v4'}), |
316 | 8d427cb9 | Stavros Sachtouris | (('k=v1', 'k=v2', 'k=v3'), {'k': 'v3'}) |
317 | 8d427cb9 | Stavros Sachtouris | ): |
318 | 8d427cb9 | Stavros Sachtouris | kva.value = kvpairs |
319 | 8d427cb9 | Stavros Sachtouris | assert_dicts_are_equal(self, kva.value, exp)
|
320 | 8d427cb9 | Stavros Sachtouris | |
321 | 8d427cb9 | Stavros Sachtouris | |
322 | c0fbf04c | Stavros Sachtouris | class ProgressBarArgument(TestCase): |
323 | c0fbf04c | Stavros Sachtouris | |
324 | c0fbf04c | Stavros Sachtouris | class PseudoBar(object): |
325 | c0fbf04c | Stavros Sachtouris | message = ''
|
326 | c0fbf04c | Stavros Sachtouris | suffix = ''
|
327 | c0fbf04c | Stavros Sachtouris | |
328 | c0fbf04c | Stavros Sachtouris | def start(): |
329 | c0fbf04c | Stavros Sachtouris | pass
|
330 | c0fbf04c | Stavros Sachtouris | |
331 | c0fbf04c | Stavros Sachtouris | @patch('kamaki.cli.argument.FlagArgument.__init__') |
332 | c0fbf04c | Stavros Sachtouris | def test___init__(self, init): |
333 | c0fbf04c | Stavros Sachtouris | help, pname, default = 'help', '--progress', 'default' |
334 | c0fbf04c | Stavros Sachtouris | pba = argument.ProgressBarArgument(help, pname, default) |
335 | c0fbf04c | Stavros Sachtouris | self.assertTrue(isinstance(pba, argument.ProgressBarArgument)) |
336 | c0fbf04c | Stavros Sachtouris | self.assertEqual(pba.suffix, '%(percent)d%%') |
337 | c0fbf04c | Stavros Sachtouris | init.assert_called_once(help, pname, default) |
338 | c0fbf04c | Stavros Sachtouris | |
339 | c0fbf04c | Stavros Sachtouris | def test_clone(self): |
340 | c0fbf04c | Stavros Sachtouris | pba = argument.ProgressBarArgument(parsed_name='--progress')
|
341 | c0fbf04c | Stavros Sachtouris | pba.value = None
|
342 | c0fbf04c | Stavros Sachtouris | pba_clone = pba.clone() |
343 | c0fbf04c | Stavros Sachtouris | self.assertTrue(isinstance(pba, argument.ProgressBarArgument)) |
344 | c0fbf04c | Stavros Sachtouris | self.assertTrue(isinstance(pba_clone, argument.ProgressBarArgument)) |
345 | c0fbf04c | Stavros Sachtouris | self.assertNotEqual(pba, pba_clone)
|
346 | c0fbf04c | Stavros Sachtouris | self.assertEqual(pba.parsed_name, pba_clone.parsed_name)
|
347 | c0fbf04c | Stavros Sachtouris | |
348 | c0fbf04c | Stavros Sachtouris | def test_get_generator(self): |
349 | c0fbf04c | Stavros Sachtouris | pba = argument.ProgressBarArgument(parsed_name='--progress')
|
350 | c0fbf04c | Stavros Sachtouris | pba.value = None
|
351 | c0fbf04c | Stavros Sachtouris | msg, msg_len = 'message', 40 |
352 | c0fbf04c | Stavros Sachtouris | with patch('kamaki.cli.argument.KamakiProgressBar.start') as start: |
353 | c0fbf04c | Stavros Sachtouris | pba.get_generator(msg, msg_len) |
354 | c0fbf04c | Stavros Sachtouris | self.assertTrue(isinstance(pba.bar, argument.KamakiProgressBar)) |
355 | c0fbf04c | Stavros Sachtouris | self.assertNotEqual(pba.bar.message, msg)
|
356 | c0fbf04c | Stavros Sachtouris | self.assertEqual(
|
357 | c0fbf04c | Stavros Sachtouris | pba.bar.message, '%s%s' % (msg, ' ' * (msg_len - len(msg)))) |
358 | c0fbf04c | Stavros Sachtouris | self.assertEqual(pba.bar.suffix, '%(percent)d%% - %(eta)ds') |
359 | c0fbf04c | Stavros Sachtouris | start.assert_called_once() |
360 | c0fbf04c | Stavros Sachtouris | |
361 | c0fbf04c | Stavros Sachtouris | def test_finish(self): |
362 | c0fbf04c | Stavros Sachtouris | pba = argument.ProgressBarArgument(parsed_name='--progress')
|
363 | c0fbf04c | Stavros Sachtouris | pba.value = None
|
364 | c0fbf04c | Stavros Sachtouris | self.assertEqual(pba.finish(), None) |
365 | c0fbf04c | Stavros Sachtouris | pba.bar = argument.KamakiProgressBar() |
366 | c0fbf04c | Stavros Sachtouris | with patch('kamaki.cli.argument.KamakiProgressBar.finish') as finish: |
367 | c0fbf04c | Stavros Sachtouris | pba.finish() |
368 | c0fbf04c | Stavros Sachtouris | finish.assert_called_once() |
369 | c0fbf04c | Stavros Sachtouris | |
370 | c0fbf04c | Stavros Sachtouris | |
371 | 5286e2c3 | Stavros Sachtouris | if __name__ == '__main__': |
372 | 5286e2c3 | Stavros Sachtouris | from sys import argv |
373 | 5286e2c3 | Stavros Sachtouris | from kamaki.cli.test import runTestCase |
374 | 5286e2c3 | Stavros Sachtouris | runTestCase(Argument, 'Argument', argv[1:]) |
375 | a7aacf12 | Stavros Sachtouris | runTestCase(ConfigArgument, 'ConfigArgument', argv[1:]) |
376 | 1bd4f765 | Stavros Sachtouris | runTestCase(RuntimeConfigArgument, 'RuntimeConfigArgument', argv[1:]) |
377 | 3a5b1ceb | Stavros Sachtouris | runTestCase(FlagArgument, 'FlagArgument', argv[1:]) |
378 | 3a5b1ceb | Stavros Sachtouris | runTestCase(FlagArgument, 'ValueArgument', argv[1:]) |
379 | 02987e9c | Stavros Sachtouris | runTestCase(IntArgument, 'IntArgument', argv[1:]) |
380 | b7ff6e0c | Stavros Sachtouris | runTestCase(DateArgument, 'DateArgument', argv[1:]) |
381 | 8d427cb9 | Stavros Sachtouris | runTestCase(VersionArgument, 'VersionArgument', argv[1:]) |
382 | 8d427cb9 | Stavros Sachtouris | runTestCase(KeyValueArgument, 'KeyValueArgument', argv[1:]) |
383 | c0fbf04c | Stavros Sachtouris | runTestCase(ProgressBarArgument, 'ProgressBarArgument', argv[1:]) |