source: OpenRLabs-Git/deploy/rlabs-docker/web2py-rlabs/gluon/tests/test_storage.py

main
Last change on this file was 42bd667, checked in by David Fuertes <dfuertes@…>, 4 years ago

Historial Limpio

  • Property mode set to 100755
File size: 4.3 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4""" Unit tests for storage.py """
5
6import unittest
7
8from gluon.storage import Storage, StorageList, List
9from gluon.http import HTTP
10from gluon._compat import pickle
11
12
13class TestStorage(unittest.TestCase):
14    """ Tests storage.Storage """
15
16    def test_attribute(self):
17        """ Tests Storage attribute handling """
18
19        s = Storage(a=1)
20
21        self.assertEqual(s.a, 1)
22        self.assertEqual(s['a'], 1)
23        self.assertEqual(s.b, None)
24
25        s.b = 2
26        self.assertEqual(s.a, 1)
27        self.assertEqual(s['a'], 1)
28        self.assertEqual(s.b, 2)
29        self.assertEqual(s['b'], 2)
30
31        s['c'] = 3
32        self.assertEqual(s.c, 3)
33        self.assertEqual(s['c'], 3)
34
35        s.d = list()
36        self.assertTrue(s.d is s['d'])
37
38    def test_store_none(self):
39        """ Test Storage store-None handling
40            s.key = None deletes an item
41            s['key'] = None sets the item to None
42        """
43
44        s = Storage(a=1)
45
46        self.assertTrue('a' in s)
47        self.assertFalse('b' in s)
48        s.a = None
49        # self.assertFalse('a' in s) # how about this?
50
51        s.a = 1
52        self.assertTrue('a' in s)
53        s['a'] = None
54        self.assertTrue('a' in s)
55        self.assertTrue(s.a is None)
56
57    def test_item(self):
58        """ Tests Storage item handling """
59
60        s = Storage()
61
62        self.assertEqual(s.d, None)
63        self.assertEqual(s['d'], None)
64        #self.assertRaises(KeyError, lambda x: s[x], 'd')   # old Storage
65        s.a = 1
66        s['a'] = None
67        self.assertEqual(s.a, None)
68        self.assertEqual(s['a'], None)
69        self.assertTrue('a' in s)
70
71    def test_pickling(self):
72        """ Test storage pickling """
73        s = Storage(a=1)
74        sd = pickle.dumps(s, pickle.HIGHEST_PROTOCOL)
75        news = pickle.loads(sd)
76        self.assertEqual(news.a, 1)
77
78    def test_getlist(self):
79        # usually used with request.vars
80        a = Storage()
81        a.x = 'abc'
82        a.y = ['abc', 'def']
83        self.assertEqual(a.getlist('x'), ['abc'])
84        self.assertEqual(a.getlist('y'), ['abc', 'def'])
85        self.assertEqual(a.getlist('z'), [])
86
87    def test_getfirst(self):
88        # usually with request.vars
89        a = Storage()
90        a.x = 'abc'
91        a.y = ['abc', 'def']
92        self.assertEqual(a.getfirst('x'), 'abc')
93        self.assertEqual(a.getfirst('y'), 'abc')
94        self.assertEqual(a.getfirst('z'), None)
95
96    def test_getlast(self):
97        # usually with request.vars
98        a = Storage()
99        a.x = 'abc'
100        a.y = ['abc', 'def']
101        self.assertEqual(a.getlast('x'), 'abc')
102        self.assertEqual(a.getlast('y'), 'def')
103        self.assertEqual(a.getlast('z'), None)
104
105
106class TestStorageList(unittest.TestCase):
107    """ Tests storage.StorageList """
108
109    def test_attribute(self):
110        s = StorageList(a=1)
111
112        self.assertEqual(s.a, 1)
113        self.assertEqual(s['a'], 1)
114        self.assertEqual(s.b, [])
115        s.b.append(1)
116        self.assertEqual(s.b, [1])
117
118
119class TestList(unittest.TestCase):
120
121    """ Tests Storage.List (fast-check for request.args()) """
122
123    def test_listcall(self):
124        a = List((1, 2, 3))
125        self.assertEqual(a(1), 2)
126        self.assertEqual(a(-1), 3)
127        self.assertEqual(a(-5), None)
128        self.assertEqual(a(-5, default='x'), 'x')
129        self.assertEqual(a(-3, cast=str), '1')
130        a.append('1234')
131        self.assertEqual(a(3), '1234')
132        self.assertEqual(a(3, cast=int), 1234)
133        a.append('x')
134        self.assertRaises(HTTP, a, 4, cast=int)
135        b = List()
136        # default is always returned when especified
137        self.assertEqual(b(0, cast=int, default=None), None)
138        self.assertEqual(b(0, cast=int, default=None, otherwise='teste'), None)
139        self.assertEqual(b(0, cast=int, default='a', otherwise='teste'), 'a')
140        # if don't have value and otherwise is especified it will called
141        self.assertEqual(b(0, otherwise=lambda: 'something'), 'something')
142        self.assertEqual(b(0, cast=int, otherwise=lambda: 'something'),
143                         'something')
144        # except if default is especified
145        self.assertEqual(b(0, default=0, otherwise=lambda: 'something'), 0)
146
147    def test_listgetitem(self):
148        '''Mantains list behaviour.'''
149        a = List((1, 2, 3))
150        self.assertEqual(a[0], 1)
151        self.assertEqual(a[::-1], [3, 2, 1])
Note: See TracBrowser for help on using the repository browser.