Statistics
| Branch: | Tag: | Revision:

root / kamaki / cli / utils / test.py @ b3cb58c2

History | View | Annotate | Download (4.5 kB)

1 b3cb58c2 Stavros Sachtouris
# Copyright 2013 GRNET S.A. All rights reserved.
2 b3cb58c2 Stavros Sachtouris
#
3 b3cb58c2 Stavros Sachtouris
# Redistribution and use in source and binary forms, with or
4 b3cb58c2 Stavros Sachtouris
# without modification, are permitted provided that the following
5 b3cb58c2 Stavros Sachtouris
# conditions are met:
6 b3cb58c2 Stavros Sachtouris
#
7 b3cb58c2 Stavros Sachtouris
#   1. Redistributions of source code must retain the above
8 b3cb58c2 Stavros Sachtouris
#      copyright notice, this list of conditions and the following
9 b3cb58c2 Stavros Sachtouris
#      disclaimer.
10 b3cb58c2 Stavros Sachtouris
#
11 b3cb58c2 Stavros Sachtouris
#   2. Redistributions in binary form must reproduce the above
12 b3cb58c2 Stavros Sachtouris
#      copyright notice, this list of conditions and the following
13 b3cb58c2 Stavros Sachtouris
#      disclaimer in the documentation and/or other materials
14 b3cb58c2 Stavros Sachtouris
#      provided with the distribution.
15 b3cb58c2 Stavros Sachtouris
#
16 b3cb58c2 Stavros Sachtouris
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 b3cb58c2 Stavros Sachtouris
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 b3cb58c2 Stavros Sachtouris
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 b3cb58c2 Stavros Sachtouris
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 b3cb58c2 Stavros Sachtouris
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 b3cb58c2 Stavros Sachtouris
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 b3cb58c2 Stavros Sachtouris
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 b3cb58c2 Stavros Sachtouris
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 b3cb58c2 Stavros Sachtouris
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 b3cb58c2 Stavros Sachtouris
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 b3cb58c2 Stavros Sachtouris
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 b3cb58c2 Stavros Sachtouris
# POSSIBILITY OF SUCH DAMAGE.
28 b3cb58c2 Stavros Sachtouris
#
29 b3cb58c2 Stavros Sachtouris
# The views and conclusions contained in the software and
30 b3cb58c2 Stavros Sachtouris
# documentation are those of the authors and should not be
31 b3cb58c2 Stavros Sachtouris
# interpreted as representing official policies, either expressed
32 b3cb58c2 Stavros Sachtouris
# or implied, of GRNET S.A.
33 b3cb58c2 Stavros Sachtouris
34 b3cb58c2 Stavros Sachtouris
from unittest import TestCase
35 b3cb58c2 Stavros Sachtouris
#from tempfile import NamedTemporaryFile
36 b3cb58c2 Stavros Sachtouris
#from mock import patch, call
37 b3cb58c2 Stavros Sachtouris
from itertools import product
38 b3cb58c2 Stavros Sachtouris
39 b3cb58c2 Stavros Sachtouris
40 b3cb58c2 Stavros Sachtouris
class UtilsMethods(TestCase):
41 b3cb58c2 Stavros Sachtouris
42 b3cb58c2 Stavros Sachtouris
    def assert_dicts_are_equal(self, d1, d2):
43 b3cb58c2 Stavros Sachtouris
        for k, v in d1.items():
44 b3cb58c2 Stavros Sachtouris
            self.assertTrue(k in d2)
45 b3cb58c2 Stavros Sachtouris
            if isinstance(v, dict):
46 b3cb58c2 Stavros Sachtouris
                self.assert_dicts_are_equal(v, d2[k])
47 b3cb58c2 Stavros Sachtouris
            else:
48 b3cb58c2 Stavros Sachtouris
                self.assertEqual(unicode(v), unicode(d2[k]))
49 b3cb58c2 Stavros Sachtouris
50 b3cb58c2 Stavros Sachtouris
    def test_guess_mime_type(self):
51 b3cb58c2 Stavros Sachtouris
        from kamaki.cli.utils import guess_mime_type
52 b3cb58c2 Stavros Sachtouris
        from mimetypes import guess_type
53 b3cb58c2 Stavros Sachtouris
        for args in product(
54 b3cb58c2 Stavros Sachtouris
                ('file.txt', 'file.png', 'file.zip', 'file.gz', None, 'X'),
55 b3cb58c2 Stavros Sachtouris
                ('a type', None),
56 b3cb58c2 Stavros Sachtouris
                ('an/encoding', None)):
57 b3cb58c2 Stavros Sachtouris
            filename, ctype, cencoding = args
58 b3cb58c2 Stavros Sachtouris
            if filename:
59 b3cb58c2 Stavros Sachtouris
                exp_type, exp_enc = guess_type(filename)
60 b3cb58c2 Stavros Sachtouris
                self.assertEqual(
61 b3cb58c2 Stavros Sachtouris
                    guess_mime_type(*args),
62 b3cb58c2 Stavros Sachtouris
                    (exp_type or ctype, exp_enc or cencoding))
63 b3cb58c2 Stavros Sachtouris
            else:
64 b3cb58c2 Stavros Sachtouris
                self.assertRaises(AssertionError, guess_mime_type, *args)
65 b3cb58c2 Stavros Sachtouris
66 b3cb58c2 Stavros Sachtouris
    def test_pretty_keys(self):
67 b3cb58c2 Stavros Sachtouris
        from kamaki.cli.utils import pretty_keys
68 b3cb58c2 Stavros Sachtouris
        for args, exp in (
69 b3cb58c2 Stavros Sachtouris
                (
70 b3cb58c2 Stavros Sachtouris
                    ({'k1': 'v1', 'k1_k2': 'v2'}, ),
71 b3cb58c2 Stavros Sachtouris
                    {'k1': 'v1', 'k1 k2': 'v2'}),
72 b3cb58c2 Stavros Sachtouris
                (
73 b3cb58c2 Stavros Sachtouris
                    ({'k1': 'v1', 'k1_k2': 'v2'}, '1'),
74 b3cb58c2 Stavros Sachtouris
                    {'k': 'v1', 'k _k2': 'v2'}),
75 b3cb58c2 Stavros Sachtouris
                (
76 b3cb58c2 Stavros Sachtouris
                    ({'k1_k2': 'v1', 'k1': {'k2': 'v2', 'k2_k3': 'v3'}}, ),
77 b3cb58c2 Stavros Sachtouris
                    {'k1 k2': 'v1', 'k1': {'k2': 'v2', 'k2_k3': 'v3'}}),
78 b3cb58c2 Stavros Sachtouris
                (
79 b3cb58c2 Stavros Sachtouris
                    (
80 b3cb58c2 Stavros Sachtouris
                        {'k1_k2': 'v1', 'k1': {'k2': 'v2', 'k2_k3': 'v3'}},
81 b3cb58c2 Stavros Sachtouris
                        '_',
82 b3cb58c2 Stavros Sachtouris
                        True),
83 b3cb58c2 Stavros Sachtouris
                    {'k1 k2': 'v1', 'k1': {'k2': 'v2', 'k2 k3': 'v3'}}),
84 b3cb58c2 Stavros Sachtouris
                (
85 b3cb58c2 Stavros Sachtouris
                    (
86 b3cb58c2 Stavros Sachtouris
                        {
87 b3cb58c2 Stavros Sachtouris
                            'k1_k2': {'k_1': 'v_1', 'k_2': {'k_3': 'v_3'}},
88 b3cb58c2 Stavros Sachtouris
                            'k1': {'k2': 'v2', 'k2_k3': 'v3'}},
89 b3cb58c2 Stavros Sachtouris
                        '_',
90 b3cb58c2 Stavros Sachtouris
                        True),
91 b3cb58c2 Stavros Sachtouris
                    {
92 b3cb58c2 Stavros Sachtouris
                        'k1 k2': {'k 1': 'v_1', 'k 2': {'k 3': 'v_3'}},
93 b3cb58c2 Stavros Sachtouris
                        'k1': {'k2': 'v2', 'k2 k3': 'v3'}}),
94 b3cb58c2 Stavros Sachtouris
                (
95 b3cb58c2 Stavros Sachtouris
                    (
96 b3cb58c2 Stavros Sachtouris
                        {
97 b3cb58c2 Stavros Sachtouris
                            'k1_k2': {'k_1': 'v_1', 'k_2': {'k_3': 'v_3'}},
98 b3cb58c2 Stavros Sachtouris
                            'k1': {'k2': 'v2', 'k2_k3': 'v3'}},
99 b3cb58c2 Stavros Sachtouris
                        '1',
100 b3cb58c2 Stavros Sachtouris
                        True),
101 b3cb58c2 Stavros Sachtouris
                    {
102 b3cb58c2 Stavros Sachtouris
                        'k _k2': {'k_': 'v_1', 'k_2': {'k_3': 'v_3'}},
103 b3cb58c2 Stavros Sachtouris
                        'k': {'k2': 'v2', 'k2_k3': 'v3'}})
104 b3cb58c2 Stavros Sachtouris
            ):
105 b3cb58c2 Stavros Sachtouris
            initial = dict(args[0])
106 b3cb58c2 Stavros Sachtouris
            self.assert_dicts_are_equal(pretty_keys(*args), exp)
107 b3cb58c2 Stavros Sachtouris
            self.assert_dicts_are_equal(initial, args[0])
108 b3cb58c2 Stavros Sachtouris
109 b3cb58c2 Stavros Sachtouris
110 b3cb58c2 Stavros Sachtouris
if __name__ == '__main__':
111 b3cb58c2 Stavros Sachtouris
    from sys import argv
112 b3cb58c2 Stavros Sachtouris
    from kamaki.cli.test import runTestCase
113 b3cb58c2 Stavros Sachtouris
    runTestCase(UtilsMethods, 'UtilsMethods', argv[1:])