blob: a7103283998b13a14d424b9dcdcd9745caf6e766 [file] [log] [blame]
# Copyright 2016 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests for the fake module."""
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
import inspect
import six
import unittest
from services import cachemanager_svc
from services import config_svc
from services import features_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,
fake.FeaturesService: features_svc.FeaturesService,
}
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.items():
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 six.PY2:
assert inspect.ismethod(real_attr)
else:
assert inspect.isfunction(real_attr)
real_spec = inspect.getfullargspec(real_attr)
fake_spec = inspect.getfullargspec(getattr(fake_cls, name))
# check same number of args and kwargs
real_kw_len = len(real_spec[3]) if real_spec[3] else 0
fake_kw_len = len(fake_spec[3]) if fake_spec[3] else 0
self.assertEqual(
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.assertEqual(
real_kw_len, fake_kw_len,
'Unequal number of kwargs on %s.%s' % (fake_cls.__name__, name))
if real_kw_len:
self.assertEqual(
real_spec[0][-real_kw_len:], fake_spec[0][-fake_kw_len:],
'Mismatched kwargs on %s.%s' % (fake_cls.__name__, name))
self.assertEqual(
real_spec[3], fake_spec[3],
'Mismatched kwarg defaults on %s.%s' % (fake_cls.__name__, name))