Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(83)

Side by Side Diff: third_party/google-endpoints/apitools/base/protorpclite/util_test.py

Issue 2666783008: Add google-endpoints to third_party/. (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 #
3 # Copyright 2010 Google Inc.
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
8 #
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16 #
17
18 """Tests for apitools.base.protorpclite.util."""
19 import datetime
20 import sys
21 import types
22 import unittest
23
24 import six
25
26 from apitools.base.protorpclite import test_util
27 from apitools.base.protorpclite import util
28
29
30 class ModuleInterfaceTest(test_util.ModuleInterfaceTest,
31 test_util.TestCase):
32
33 MODULE = util
34
35
36 class UtilTest(test_util.TestCase):
37
38 def testDecoratedFunction_LengthZero(self):
39 @util.positional(0)
40 def fn(kwonly=1):
41 return [kwonly]
42 self.assertEquals([1], fn())
43 self.assertEquals([2], fn(kwonly=2))
44 self.assertRaisesWithRegexpMatch(TypeError,
45 r'fn\(\) takes at most 0 positional '
46 r'arguments \(1 given\)',
47 fn, 1)
48
49 def testDecoratedFunction_LengthOne(self):
50 @util.positional(1)
51 def fn(pos, kwonly=1):
52 return [pos, kwonly]
53 self.assertEquals([1, 1], fn(1))
54 self.assertEquals([2, 2], fn(2, kwonly=2))
55 self.assertRaisesWithRegexpMatch(TypeError,
56 r'fn\(\) takes at most 1 positional '
57 r'argument \(2 given\)',
58 fn, 2, 3)
59
60 def testDecoratedFunction_LengthTwoWithDefault(self):
61 @util.positional(2)
62 def fn(pos1, pos2=1, kwonly=1):
63 return [pos1, pos2, kwonly]
64 self.assertEquals([1, 1, 1], fn(1))
65 self.assertEquals([2, 2, 1], fn(2, 2))
66 self.assertEquals([2, 3, 4], fn(2, 3, kwonly=4))
67 self.assertRaisesWithRegexpMatch(TypeError,
68 r'fn\(\) takes at most 2 positional '
69 r'arguments \(3 given\)',
70 fn, 2, 3, 4)
71
72 def testDecoratedMethod(self):
73 class MyClass(object):
74
75 @util.positional(2)
76 def meth(self, pos1, kwonly=1):
77 return [pos1, kwonly]
78 self.assertEquals([1, 1], MyClass().meth(1))
79 self.assertEquals([2, 2], MyClass().meth(2, kwonly=2))
80 self.assertRaisesWithRegexpMatch(
81 TypeError,
82 r'meth\(\) takes at most 2 positional arguments \(3 given\)',
83 MyClass().meth, 2, 3)
84
85 def testDefaultDecoration(self):
86 @util.positional
87 def fn(a, b, c=None):
88 return a, b, c
89 self.assertEquals((1, 2, 3), fn(1, 2, c=3))
90 self.assertEquals((3, 4, None), fn(3, b=4))
91 self.assertRaisesWithRegexpMatch(TypeError,
92 r'fn\(\) takes at most 2 positional '
93 r'arguments \(3 given\)',
94 fn, 2, 3, 4)
95
96 def testDefaultDecorationNoKwdsFails(self):
97 def fn(a):
98 return a
99 self.assertRaisesRegexp(
100 ValueError,
101 ('Functions with no keyword arguments must specify '
102 'max_positional_args'),
103 util.positional, fn)
104
105 def testDecoratedFunctionDocstring(self):
106 @util.positional(0)
107 def fn(kwonly=1):
108 """fn docstring."""
109 return [kwonly]
110 self.assertEquals('fn docstring.', fn.__doc__)
111
112
113 class GetPackageForModuleTest(test_util.TestCase):
114
115 def setUp(self):
116 self.original_modules = dict(sys.modules)
117
118 def tearDown(self):
119 sys.modules.clear()
120 sys.modules.update(self.original_modules)
121
122 def CreateModule(self, name, file_name=None):
123 if file_name is None:
124 file_name = '%s.py' % name
125 module = types.ModuleType(name)
126 sys.modules[name] = module
127 return module
128
129 def assertPackageEquals(self, expected, actual):
130 self.assertEquals(expected, actual)
131 if actual is not None:
132 self.assertTrue(isinstance(actual, six.text_type))
133
134 def testByString(self):
135 module = self.CreateModule('service_module')
136 module.package = 'my_package'
137 self.assertPackageEquals('my_package',
138 util.get_package_for_module('service_module'))
139
140 def testModuleNameNotInSys(self):
141 self.assertPackageEquals(None,
142 util.get_package_for_module('service_module'))
143
144 def testHasPackage(self):
145 module = self.CreateModule('service_module')
146 module.package = 'my_package'
147 self.assertPackageEquals(
148 'my_package', util.get_package_for_module(module))
149
150 def testHasModuleName(self):
151 module = self.CreateModule('service_module')
152 self.assertPackageEquals('service_module',
153 util.get_package_for_module(module))
154
155 def testIsMain(self):
156 module = self.CreateModule('__main__')
157 module.__file__ = '/bing/blam/bloom/blarm/my_file.py'
158 self.assertPackageEquals(
159 'my_file', util.get_package_for_module(module))
160
161 def testIsMainCompiled(self):
162 module = self.CreateModule('__main__')
163 module.__file__ = '/bing/blam/bloom/blarm/my_file.pyc'
164 self.assertPackageEquals(
165 'my_file', util.get_package_for_module(module))
166
167 def testNoExtension(self):
168 module = self.CreateModule('__main__')
169 module.__file__ = '/bing/blam/bloom/blarm/my_file'
170 self.assertPackageEquals(
171 'my_file', util.get_package_for_module(module))
172
173 def testNoPackageAtAll(self):
174 module = self.CreateModule('__main__')
175 self.assertPackageEquals(
176 '__main__', util.get_package_for_module(module))
177
178
179 class DateTimeTests(test_util.TestCase):
180
181 def testDecodeDateTime(self):
182 """Test that a RFC 3339 datetime string is decoded properly."""
183 for datetime_string, datetime_vals in (
184 ('2012-09-30T15:31:50.262', (2012, 9, 30, 15, 31, 50, 262000)),
185 ('2012-09-30T15:31:50', (2012, 9, 30, 15, 31, 50, 0))):
186 decoded = util.decode_datetime(datetime_string)
187 expected = datetime.datetime(*datetime_vals)
188 self.assertEquals(expected, decoded)
189
190 def testDateTimeTimeZones(self):
191 """Test that a datetime string with a timezone is decoded correctly."""
192 tests = (
193 ('2012-09-30T15:31:50.262-06:00',
194 (2012, 9, 30, 15, 31, 50, 262000, util.TimeZoneOffset(-360))),
195 ('2012-09-30T15:31:50.262+01:30',
196 (2012, 9, 30, 15, 31, 50, 262000, util.TimeZoneOffset(90))),
197 ('2012-09-30T15:31:50+00:05',
198 (2012, 9, 30, 15, 31, 50, 0, util.TimeZoneOffset(5))),
199 ('2012-09-30T15:31:50+00:00',
200 (2012, 9, 30, 15, 31, 50, 0, util.TimeZoneOffset(0))),
201 ('2012-09-30t15:31:50-00:00',
202 (2012, 9, 30, 15, 31, 50, 0, util.TimeZoneOffset(0))),
203 ('2012-09-30t15:31:50z',
204 (2012, 9, 30, 15, 31, 50, 0, util.TimeZoneOffset(0))),
205 ('2012-09-30T15:31:50-23:00',
206 (2012, 9, 30, 15, 31, 50, 0, util.TimeZoneOffset(-1380))))
207 for datetime_string, datetime_vals in tests:
208 decoded = util.decode_datetime(datetime_string)
209 expected = datetime.datetime(*datetime_vals)
210 self.assertEquals(expected, decoded)
211
212 def testDecodeDateTimeInvalid(self):
213 """Test that decoding malformed datetime strings raises execptions."""
214 for datetime_string in ('invalid',
215 '2012-09-30T15:31:50.',
216 '-08:00 2012-09-30T15:31:50.262',
217 '2012-09-30T15:31',
218 '2012-09-30T15:31Z',
219 '2012-09-30T15:31:50ZZ',
220 '2012-09-30T15:31:50.262 blah blah -08:00',
221 '1000-99-99T25:99:99.999-99:99'):
222 self.assertRaises(
223 ValueError, util.decode_datetime, datetime_string)
224
225 def testTimeZoneOffsetDelta(self):
226 """Test that delta works with TimeZoneOffset."""
227 time_zone = util.TimeZoneOffset(datetime.timedelta(minutes=3))
228 epoch = time_zone.utcoffset(datetime.datetime.utcfromtimestamp(0))
229 self.assertEqual(180, util.total_seconds(epoch))
230
231
232 def main():
233 unittest.main()
234
235
236 if __name__ == '__main__':
237 main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698