| Index: appengine/monorail/testing/test/fake_test.py
|
| diff --git a/appengine/monorail/testing/test/fake_test.py b/appengine/monorail/testing/test/fake_test.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a58a44d6337fde15d5c928cb1384ddb12b741a74
|
| --- /dev/null
|
| +++ b/appengine/monorail/testing/test/fake_test.py
|
| @@ -0,0 +1,67 @@
|
| +# Copyright 2016 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is govered by a BSD-style
|
| +# license that can be found in the LICENSE file or at
|
| +# https://developers.google.com/open-source/licenses/bsd
|
| +
|
| +"""Tests for the fake module."""
|
| +
|
| +import inspect
|
| +import unittest
|
| +
|
| +from services import cachemanager_svc
|
| +from services import config_svc
|
| +from services import issue_svc
|
| +from services import project_svc
|
| +from services import star_svc
|
| +from services import user_svc
|
| +from services import usergroup_svc
|
| +from testing import fake
|
| +
|
| +fake_class_map = {
|
| + fake.AbstractStarService: star_svc.AbstractStarService,
|
| + fake.CacheManager: cachemanager_svc.CacheManager,
|
| + fake.ProjectService: project_svc.ProjectService,
|
| + fake.ConfigService: config_svc.ConfigService,
|
| + fake.IssueService: issue_svc.IssueService,
|
| + fake.UserGroupService: usergroup_svc.UserGroupService,
|
| + fake.UserService: user_svc.UserService,
|
| + }
|
| +
|
| +
|
| +class FakeMetaTest(unittest.TestCase):
|
| +
|
| + def testFunctionsHaveSameSignatures(self):
|
| + """Verify that the fake class methods match the real ones."""
|
| + for fake_cls, real_cls in fake_class_map.iteritems():
|
| + fake_attrs = set(dir(fake_cls))
|
| + real_attrs = set(dir(real_cls))
|
| + both_attrs = fake_attrs.intersection(real_attrs)
|
| + to_test = [x for x in both_attrs if '__' not in x]
|
| + for name in to_test:
|
| + real_attr = getattr(real_cls, name)
|
| + if inspect.ismethod(real_attr):
|
| + real_spec = inspect.getargspec(real_attr)
|
| + fake_spec = inspect.getargspec(getattr(fake_cls, name))
|
| + # check same number of args and kwargs
|
| + real_kw_len = real_spec[3] and len(real_spec[3]) or 0
|
| + fake_kw_len = fake_spec[3] and len(fake_spec[3]) or 0
|
| +
|
| + self.assertEquals(
|
| + len(real_spec[0]) - real_kw_len,
|
| + len(fake_spec[0]) - fake_kw_len,
|
| + 'Unequal number of args on %s.%s' % (fake_cls.__name__, name))
|
| + self.assertEquals(
|
| + real_kw_len, fake_kw_len,
|
| + 'Unequal number of kwargs on %s.%s' % (fake_cls.__name__, name))
|
| + if real_kw_len:
|
| + self.assertEquals(
|
| + real_spec[0][-real_kw_len:],
|
| + fake_spec[0][-fake_kw_len:],
|
| + 'Mismatched kwargs on %s.%s' % (fake_cls.__name__, name))
|
| + self.assertEquals(
|
| + real_spec[3], fake_spec[3],
|
| + 'Mismatched kwarg defaults on %s.%s' % (fake_cls.__name__, name))
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + unittest.main()
|
|
|