diff --git a/testing_support/super_mox.py b/testing_support/super_mox.py index efe03f30dd..f7e08d8b29 100644 --- a/testing_support/super_mox.py +++ b/testing_support/super_mox.py @@ -16,6 +16,7 @@ import sys sys.path.append(os.path.dirname(os.path.dirname(__file__))) import mox from third_party.six.moves import StringIO +from testing_support.test_case_utils import TestCaseUtils class IsOneOf(mox.Comparator): @@ -29,57 +30,6 @@ class IsOneOf(mox.Comparator): return '' % str(self._keys) -class TestCaseUtils(object): - """Base class with some additional functionalities. People will usually want - to use SuperMoxTestBase instead.""" - # Backup the separator in case it gets mocked - _OS_SEP = os.sep - _RANDOM_CHOICE = random.choice - _RANDOM_RANDINT = random.randint - _STRING_LETTERS = string.ascii_letters - - ## Some utilities for generating arbitrary arguments. - def String(self, max_length): - return ''.join([self._RANDOM_CHOICE(self._STRING_LETTERS) - for _ in range(self._RANDOM_RANDINT(1, max_length))]) - - def Strings(self, max_arg_count, max_arg_length): - return [self.String(max_arg_length) for _ in range(max_arg_count)] - - def Args(self, max_arg_count=8, max_arg_length=16): - return self.Strings(max_arg_count, - self._RANDOM_RANDINT(1, max_arg_length)) - - def _DirElts(self, max_elt_count=4, max_elt_length=8): - return self._OS_SEP.join(self.Strings(max_elt_count, max_elt_length)) - - def Dir(self, max_elt_count=4, max_elt_length=8): - return (self._RANDOM_CHOICE((self._OS_SEP, '')) + - self._DirElts(max_elt_count, max_elt_length)) - - def RootDir(self, max_elt_count=4, max_elt_length=8): - return self._OS_SEP + self._DirElts(max_elt_count, max_elt_length) - - def compareMembers(self, obj, members): - """If you add a member, be sure to add the relevant test!""" - # Skip over members starting with '_' since they are usually not meant to - # be for public use. - actual_members = [x for x in sorted(dir(obj)) - if not x.startswith('_')] - expected_members = sorted(members) - if actual_members != expected_members: - diff = ([i for i in actual_members if i not in expected_members] + - [i for i in expected_members if i not in actual_members]) - print(diff, file=sys.stderr) - # pylint: disable=no-member - self.assertEqual(actual_members, expected_members) - - def setUp(self): - self.root_dir = self.Dir() - self.args = self.Args() - self.relpath = self.String(200) - - class StdoutCheck(object): def setUp(self): # Override the mock with a StringIO, it's much less painful to test. diff --git a/testing_support/test_case_utils.py b/testing_support/test_case_utils.py new file mode 100644 index 0000000000..0cac133179 --- /dev/null +++ b/testing_support/test_case_utils.py @@ -0,0 +1,62 @@ +# Copyright (c) 2019 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Simplify unit tests based on pymox.""" + +from __future__ import print_function + +import os +import random +import string + + +class TestCaseUtils(object): + """Base class with some additional functionalities. People will usually want + to use SuperMoxTestBase instead.""" + # Backup the separator in case it gets mocked + _OS_SEP = os.sep + _RANDOM_CHOICE = random.choice + _RANDOM_RANDINT = random.randint + _STRING_LETTERS = string.ascii_letters + + ## Some utilities for generating arbitrary arguments. + def String(self, max_length): + return ''.join([self._RANDOM_CHOICE(self._STRING_LETTERS) + for _ in range(self._RANDOM_RANDINT(1, max_length))]) + + def Strings(self, max_arg_count, max_arg_length): + return [self.String(max_arg_length) for _ in range(max_arg_count)] + + def Args(self, max_arg_count=8, max_arg_length=16): + return self.Strings(max_arg_count, + self._RANDOM_RANDINT(1, max_arg_length)) + + def _DirElts(self, max_elt_count=4, max_elt_length=8): + return self._OS_SEP.join(self.Strings(max_elt_count, max_elt_length)) + + def Dir(self, max_elt_count=4, max_elt_length=8): + return (self._RANDOM_CHOICE((self._OS_SEP, '')) + + self._DirElts(max_elt_count, max_elt_length)) + + def RootDir(self, max_elt_count=4, max_elt_length=8): + return self._OS_SEP + self._DirElts(max_elt_count, max_elt_length) + + def compareMembers(self, obj, members): + """If you add a member, be sure to add the relevant test!""" + # Skip over members starting with '_' since they are usually not meant to + # be for public use. + actual_members = [x for x in sorted(dir(obj)) + if not x.startswith('_')] + expected_members = sorted(members) + if actual_members != expected_members: + diff = ([i for i in actual_members if i not in expected_members] + + [i for i in expected_members if i not in actual_members]) + print(diff, file=sys.stderr) + # pylint: disable=no-member + self.assertEqual(actual_members, expected_members) + + def setUp(self): + self.root_dir = self.Dir() + self.args = self.Args() + self.relpath = self.String(200) diff --git a/tests/gclient_scm_test.py b/tests/gclient_scm_test.py index a9aad58b2a..1faff8b0b8 100755 --- a/tests/gclient_scm_test.py +++ b/tests/gclient_scm_test.py @@ -28,7 +28,7 @@ sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from third_party import mock from testing_support import fake_repos -from testing_support.super_mox import TestCaseUtils +from testing_support import test_case_utils import gclient_scm import git_cache @@ -73,7 +73,7 @@ class BasicTests(unittest.TestCase): self.assertEqual(mockCapture.mock_calls, expected_calls) -class BaseGitWrapperTestCase(unittest.TestCase, TestCaseUtils): +class BaseGitWrapperTestCase(unittest.TestCase, test_case_utils.TestCaseUtils): """This class doesn't use pymox.""" class OptionsObject(object): def __init__(self, verbose=False, revision=None): @@ -199,7 +199,7 @@ from :3 def setUp(self): unittest.TestCase.setUp(self) - TestCaseUtils.setUp(self) + test_case_utils.TestCaseUtils.setUp(self) self.url = 'git://foo' # The .git suffix allows gclient_scm to recognize the dir as a git repo # when cloning it locally