10ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson#!/usr/bin/env python 20ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# 30ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Copyright 2009 Google Inc. All Rights Reserved. 40ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# 50ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# Redistribution and use in source and binary forms, with or without 60ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# modification, are permitted provided that the following conditions are 70ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# met: 80ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# 90ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# * Redistributions of source code must retain the above copyright 100ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# notice, this list of conditions and the following disclaimer. 110ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# * Redistributions in binary form must reproduce the above 120ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# copyright notice, this list of conditions and the following disclaimer 130ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# in the documentation and/or other materials provided with the 140ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# distribution. 150ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# * Neither the name of Google Inc. nor the names of its 160ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# contributors may be used to endorse or promote products derived from 170ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# this software without specific prior written permission. 180ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# 190ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 200ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 210ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 220ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 230ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 240ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 250ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 260ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 270ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 280ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 290ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 300ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 310ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson"""Tests for run_tests_util.py test runner script.""" 320ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 330ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson__author__ = 'vladl@google.com (Vlad Losev)' 340ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 350ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonimport os 360ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonimport re 370ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonimport sets 380ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonimport unittest 390ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 400ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonimport run_tests_util 410ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 420ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 430ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff DavidsonGTEST_DBG_DIR = 'scons/build/dbg/gtest/scons' 440ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff DavidsonGTEST_OPT_DIR = 'scons/build/opt/gtest/scons' 450ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff DavidsonGTEST_OTHER_DIR = 'scons/build/other/gtest/scons' 460ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 470ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 480ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsondef AddExeExtension(path): 490ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Appends .exe to the path on Windows or Cygwin.""" 500ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 510ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if run_tests_util.IS_WINDOWS or run_tests_util.IS_CYGWIN: 520ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson return path + '.exe' 530ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson else: 540ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson return path 550ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 560ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 570ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonclass FakePath(object): 580ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """A fake os.path module for testing.""" 590ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 600ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def __init__(self, current_dir=os.getcwd(), known_paths=None): 610ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.current_dir = current_dir 620ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.tree = {} 630ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.path_separator = os.sep 640ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 650ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # known_paths contains either absolute or relative paths. Relative paths 660ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # are absolutized with self.current_dir. 670ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if known_paths: 680ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self._AddPaths(known_paths) 690ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 700ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def _AddPath(self, path): 710ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ends_with_slash = path.endswith('/') 720ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson path = self.abspath(path) 730ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if ends_with_slash: 740ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson path += self.path_separator 750ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson name_list = path.split(self.path_separator) 760ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson tree = self.tree 770ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson for name in name_list[:-1]: 780ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if not name: 790ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson continue 800ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if name in tree: 810ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson tree = tree[name] 820ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson else: 830ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson tree[name] = {} 840ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson tree = tree[name] 850ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 860ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson name = name_list[-1] 870ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if name: 880ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if name in tree: 890ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson assert tree[name] == 1 900ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson else: 910ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson tree[name] = 1 920ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 930ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def _AddPaths(self, paths): 940ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson for path in paths: 950ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self._AddPath(path) 960ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 970ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def PathElement(self, path): 980ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Returns an internal representation of directory tree entry for path.""" 990ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson tree = self.tree 1000ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson name_list = self.abspath(path).split(self.path_separator) 1010ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson for name in name_list: 1020ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if not name: 1030ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson continue 1040ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson tree = tree.get(name, None) 1050ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if tree is None: 1060ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson break 1070ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1080ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson return tree 1090ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1100ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # Silences pylint warning about using standard names. 1110ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # pylint: disable-msg=C6409 1120ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def normpath(self, path): 1130ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson return os.path.normpath(path) 1140ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1150ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def abspath(self, path): 1160ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson return self.normpath(os.path.join(self.current_dir, path)) 1170ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1180ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def isfile(self, path): 1190ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson return self.PathElement(self.abspath(path)) == 1 1200ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1210ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def isdir(self, path): 1220ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson return type(self.PathElement(self.abspath(path))) == type(dict()) 1230ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1240ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def basename(self, path): 1250ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson return os.path.basename(path) 1260ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1270ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def dirname(self, path): 1280ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson return os.path.dirname(path) 1290ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1300ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def join(self, *kargs): 1310ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson return os.path.join(*kargs) 1320ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1330ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1340ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonclass FakeOs(object): 1350ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """A fake os module for testing.""" 1360ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson P_WAIT = os.P_WAIT 1370ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1380ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def __init__(self, fake_path_module): 1390ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.path = fake_path_module 1400ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1410ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # Some methods/attributes are delegated to the real os module. 1420ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.environ = os.environ 1430ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1440ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # pylint: disable-msg=C6409 1450ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def listdir(self, path): 1460ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson assert self.path.isdir(path) 1470ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson return self.path.PathElement(path).iterkeys() 1480ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1490ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def spawnv(self, wait, executable, *kargs): 1500ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson assert wait == FakeOs.P_WAIT 1510ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson return self.spawn_impl(executable, kargs) 1520ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1530ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1540ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonclass GetTestsToRunTest(unittest.TestCase): 1550ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Exercises TestRunner.GetTestsToRun.""" 1560ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1570ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def NormalizeGetTestsToRunResults(self, results): 1580ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Normalizes path data returned from GetTestsToRun for comparison.""" 1590ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1600ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def NormalizePythonTestPair(pair): 1610ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Normalizes path data in the (directory, python_script) pair.""" 1620ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1630ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson return (os.path.normpath(pair[0]), os.path.normpath(pair[1])) 1640ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1650ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def NormalizeBinaryTestPair(pair): 1660ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Normalizes path data in the (directory, binary_executable) pair.""" 1670ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1680ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson directory, executable = map(os.path.normpath, pair) 1690ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1700ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # On Windows and Cygwin, the test file names have the .exe extension, but 1710ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # they can be invoked either by name or by name+extension. Our test must 1720ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # accommodate both situations. 1730ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if run_tests_util.IS_WINDOWS or run_tests_util.IS_CYGWIN: 1740ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson executable = re.sub(r'\.exe$', '', executable) 1750ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson return (directory, executable) 1760ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1770ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson python_tests = sets.Set(map(NormalizePythonTestPair, results[0])) 1780ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson binary_tests = sets.Set(map(NormalizeBinaryTestPair, results[1])) 1790ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson return (python_tests, binary_tests) 1800ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1810ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def AssertResultsEqual(self, results, expected): 1820ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Asserts results returned by GetTestsToRun equal to expected results.""" 1830ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1840ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual(self.NormalizeGetTestsToRunResults(results), 1850ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.NormalizeGetTestsToRunResults(expected), 1860ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 'Incorrect set of tests returned:\n%s\nexpected:\n%s' % 1870ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson (results, expected)) 1880ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1890ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def setUp(self): 1900ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.fake_os = FakeOs(FakePath( 1910ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson current_dir=os.path.abspath(os.path.dirname(run_tests_util.__file__)), 1920ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson known_paths=[AddExeExtension(GTEST_DBG_DIR + '/gtest_unittest'), 1930ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson AddExeExtension(GTEST_OPT_DIR + '/gtest_unittest'), 1940ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 'test/gtest_color_test.py'])) 1950ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.fake_configurations = ['dbg', 'opt'] 1960ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner = run_tests_util.TestRunner(script_dir='.', 1970ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson injected_os=self.fake_os, 1980ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson injected_subprocess=None) 1990ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 2000ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def testBinaryTestsOnly(self): 2010ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Exercises GetTestsToRun with parameters designating binary tests only.""" 2020ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 2030ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # A default build. 2040ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 2050ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 2060ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ['gtest_unittest'], 2070ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson '', 2080ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson False, 2090ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 2100ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([], 2110ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')])) 2120ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 2130ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # An explicitly specified directory. 2140ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 2150ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 2160ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [GTEST_DBG_DIR, 'gtest_unittest'], 2170ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson '', 2180ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson False, 2190ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 2200ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([], 2210ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')])) 2220ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 2230ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # A particular configuration. 2240ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 2250ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 2260ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ['gtest_unittest'], 2270ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 'other', 2280ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson False, 2290ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 2300ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([], 2310ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [(GTEST_OTHER_DIR, GTEST_OTHER_DIR + '/gtest_unittest')])) 2320ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 2330ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # All available configurations 2340ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 2350ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 2360ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ['gtest_unittest'], 2370ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 'all', 2380ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson False, 2390ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 2400ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([], 2410ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest'), 2420ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson (GTEST_OPT_DIR, GTEST_OPT_DIR + '/gtest_unittest')])) 2430ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 2440ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # All built configurations (unbuilt don't cause failure). 2450ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 2460ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 2470ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ['gtest_unittest'], 2480ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson '', 2490ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson True, 2500ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations + ['unbuilt']), 2510ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([], 2520ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest'), 2530ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson (GTEST_OPT_DIR, GTEST_OPT_DIR + '/gtest_unittest')])) 2540ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 2550ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # A combination of an explicit directory and a configuration. 2560ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 2570ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 2580ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [GTEST_DBG_DIR, 'gtest_unittest'], 2590ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 'opt', 2600ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson False, 2610ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 2620ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([], 2630ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest'), 2640ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson (GTEST_OPT_DIR, GTEST_OPT_DIR + '/gtest_unittest')])) 2650ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 2660ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # Same test specified in an explicit directory and via a configuration. 2670ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 2680ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 2690ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [GTEST_DBG_DIR, 'gtest_unittest'], 2700ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 'dbg', 2710ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson False, 2720ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 2730ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([], 2740ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')])) 2750ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 2760ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # All built configurations + explicit directory + explicit configuration. 2770ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 2780ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 2790ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [GTEST_DBG_DIR, 'gtest_unittest'], 2800ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 'opt', 2810ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson True, 2820ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 2830ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([], 2840ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest'), 2850ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson (GTEST_OPT_DIR, GTEST_OPT_DIR + '/gtest_unittest')])) 2860ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 2870ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def testPythonTestsOnly(self): 2880ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Exercises GetTestsToRun with parameters designating Python tests only.""" 2890ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 2900ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # A default build. 2910ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 2920ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 2930ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ['gtest_color_test.py'], 2940ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson '', 2950ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson False, 2960ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 2970ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([(GTEST_DBG_DIR, 'test/gtest_color_test.py')], 2980ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [])) 2990ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 3000ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # An explicitly specified directory. 3010ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 3020ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 3030ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [GTEST_DBG_DIR, 'test/gtest_color_test.py'], 3040ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson '', 3050ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson False, 3060ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 3070ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([(GTEST_DBG_DIR, 'test/gtest_color_test.py')], 3080ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [])) 3090ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 3100ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # A particular configuration. 3110ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 3120ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 3130ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ['gtest_color_test.py'], 3140ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 'other', 3150ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson False, 3160ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 3170ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([(GTEST_OTHER_DIR, 'test/gtest_color_test.py')], 3180ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [])) 3190ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 3200ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # All available configurations 3210ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 3220ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 3230ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ['test/gtest_color_test.py'], 3240ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 'all', 3250ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson False, 3260ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 3270ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([(GTEST_DBG_DIR, 'test/gtest_color_test.py'), 3280ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson (GTEST_OPT_DIR, 'test/gtest_color_test.py')], 3290ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [])) 3300ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 3310ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # All built configurations (unbuilt don't cause failure). 3320ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 3330ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 3340ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ['gtest_color_test.py'], 3350ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson '', 3360ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson True, 3370ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations + ['unbuilt']), 3380ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([(GTEST_DBG_DIR, 'test/gtest_color_test.py'), 3390ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson (GTEST_OPT_DIR, 'test/gtest_color_test.py')], 3400ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [])) 3410ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 3420ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # A combination of an explicit directory and a configuration. 3430ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 3440ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 3450ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [GTEST_DBG_DIR, 'gtest_color_test.py'], 3460ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 'opt', 3470ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson False, 3480ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 3490ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([(GTEST_DBG_DIR, 'test/gtest_color_test.py'), 3500ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson (GTEST_OPT_DIR, 'test/gtest_color_test.py')], 3510ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [])) 3520ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 3530ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # Same test specified in an explicit directory and via a configuration. 3540ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 3550ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 3560ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [GTEST_DBG_DIR, 'gtest_color_test.py'], 3570ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 'dbg', 3580ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson False, 3590ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 3600ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([(GTEST_DBG_DIR, 'test/gtest_color_test.py')], 3610ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [])) 3620ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 3630ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # All built configurations + explicit directory + explicit configuration. 3640ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 3650ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 3660ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [GTEST_DBG_DIR, 'gtest_color_test.py'], 3670ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 'opt', 3680ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson True, 3690ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 3700ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([(GTEST_DBG_DIR, 'test/gtest_color_test.py'), 3710ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson (GTEST_OPT_DIR, 'test/gtest_color_test.py')], 3720ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [])) 3730ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 3740ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def testCombinationOfBinaryAndPythonTests(self): 3750ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Exercises GetTestsToRun with mixed binary/Python tests.""" 3760ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 3770ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # Use only default configuration for this test. 3780ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 3790ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # Neither binary nor Python tests are specified so find all. 3800ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 3810ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 3820ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [], 3830ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson '', 3840ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson False, 3850ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 3860ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([(GTEST_DBG_DIR, 'test/gtest_color_test.py')], 3870ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')])) 3880ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 3890ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # Specifying both binary and Python tests. 3900ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 3910ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 3920ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ['gtest_unittest', 'gtest_color_test.py'], 3930ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson '', 3940ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson False, 3950ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 3960ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([(GTEST_DBG_DIR, 'test/gtest_color_test.py')], 3970ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')])) 3980ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 3990ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # Specifying binary tests suppresses Python tests. 4000ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 4010ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 4020ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ['gtest_unittest'], 4030ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson '', 4040ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson False, 4050ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 4060ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([], 4070ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')])) 4080ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 4090ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # Specifying Python tests suppresses binary tests. 4100ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 4110ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 4120ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ['gtest_color_test.py'], 4130ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson '', 4140ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson False, 4150ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 4160ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([(GTEST_DBG_DIR, 'test/gtest_color_test.py')], 4170ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [])) 4180ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 4190ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def testIgnoresNonTestFiles(self): 4200ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Verifies that GetTestsToRun ignores non-test files in the filesystem.""" 4210ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 4220ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.fake_os = FakeOs(FakePath( 4230ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson current_dir=os.path.abspath(os.path.dirname(run_tests_util.__file__)), 4240ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson known_paths=[AddExeExtension(GTEST_DBG_DIR + '/gtest_nontest'), 4250ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 'test/'])) 4260ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner = run_tests_util.TestRunner(script_dir='.', 4270ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson injected_os=self.fake_os, 4280ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson injected_subprocess=None) 4290ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 4300ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 4310ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [], 4320ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson '', 4330ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson True, 4340ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 4350ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([], [])) 4360ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 4370ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def testWorksFromDifferentDir(self): 4380ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Exercises GetTestsToRun from a directory different from run_test.py's.""" 4390ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 4400ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # Here we simulate an test script in directory /d/ called from the 4410ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # directory /a/b/c/. 4420ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.fake_os = FakeOs(FakePath( 4430ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson current_dir=os.path.abspath('/a/b/c'), 4440ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson known_paths=[ 4450ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson '/a/b/c/', 4460ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson AddExeExtension('/d/' + GTEST_DBG_DIR + '/gtest_unittest'), 4470ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson AddExeExtension('/d/' + GTEST_OPT_DIR + '/gtest_unittest'), 4480ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson '/d/test/gtest_color_test.py'])) 4490ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.fake_configurations = ['dbg', 'opt'] 4500ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner = run_tests_util.TestRunner(script_dir='/d/', 4510ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson injected_os=self.fake_os, 4520ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson injected_subprocess=None) 4530ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # A binary test. 4540ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 4550ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 4560ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ['gtest_unittest'], 4570ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson '', 4580ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson False, 4590ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 4600ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([], 4610ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [('/d/' + GTEST_DBG_DIR, '/d/' + GTEST_DBG_DIR + '/gtest_unittest')])) 4620ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 4630ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # A Python test. 4640ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 4650ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 4660ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ['gtest_color_test.py'], 4670ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson '', 4680ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson False, 4690ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 4700ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([('/d/' + GTEST_DBG_DIR, '/d/test/gtest_color_test.py')], [])) 4710ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 4720ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def testNonTestBinary(self): 4730ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Exercises GetTestsToRun with a non-test parameter.""" 4740ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 4750ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assert_( 4760ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson not self.test_runner.GetTestsToRun( 4770ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ['gtest_unittest_not_really'], 4780ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson '', 4790ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson False, 4800ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations)) 4810ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 4820ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def testNonExistingPythonTest(self): 4830ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Exercises GetTestsToRun with a non-existent Python test parameter.""" 4840ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 4850ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assert_( 4860ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson not self.test_runner.GetTestsToRun( 4870ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ['nonexistent_test.py'], 4880ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson '', 4890ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson False, 4900ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations)) 4910ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 4920ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if run_tests_util.IS_WINDOWS or run_tests_util.IS_CYGWIN: 4930ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 4940ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def testDoesNotPickNonExeFilesOnWindows(self): 4950ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Verifies that GetTestsToRun does not find _test files on Windows.""" 4960ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 4970ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.fake_os = FakeOs(FakePath( 4980ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson current_dir=os.path.abspath(os.path.dirname(run_tests_util.__file__)), 4990ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson known_paths=['/d/' + GTEST_DBG_DIR + '/gtest_test', 'test/'])) 5000ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner = run_tests_util.TestRunner(script_dir='.', 5010ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson injected_os=self.fake_os, 5020ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson injected_subprocess=None) 5030ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.AssertResultsEqual( 5040ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.GetTestsToRun( 5050ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [], 5060ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson '', 5070ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson True, 5080ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson available_configurations=self.fake_configurations), 5090ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson ([], [])) 5100ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 5110ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 5120ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonclass RunTestsTest(unittest.TestCase): 5130ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Exercises TestRunner.RunTests.""" 5140ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 5150ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def SpawnSuccess(self, unused_executable, unused_argv): 5160ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Fakes test success by returning 0 as an exit code.""" 5170ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 5180ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.num_spawn_calls += 1 5190ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson return 0 5200ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 5210ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def SpawnFailure(self, unused_executable, unused_argv): 5220ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Fakes test success by returning 1 as an exit code.""" 5230ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 5240ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.num_spawn_calls += 1 5250ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson return 1 5260ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 5270ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def setUp(self): 5280ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.fake_os = FakeOs(FakePath( 5290ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson current_dir=os.path.abspath(os.path.dirname(run_tests_util.__file__)), 5300ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson known_paths=[ 5310ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson AddExeExtension(GTEST_DBG_DIR + '/gtest_unittest'), 5320ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson AddExeExtension(GTEST_OPT_DIR + '/gtest_unittest'), 5330ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 'test/gtest_color_test.py'])) 5340ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.fake_configurations = ['dbg', 'opt'] 5350ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner = run_tests_util.TestRunner( 5360ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson script_dir=os.path.dirname(__file__) or '.', 5370ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson injected_os=self.fake_os, 5380ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson injected_subprocess=None) 5390ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.num_spawn_calls = 0 # A number of calls to spawn. 5400ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 5410ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def testRunPythonTestSuccess(self): 5420ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Exercises RunTests to handle a Python test success.""" 5430ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 5440ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.fake_os.spawn_impl = self.SpawnSuccess 5450ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual( 5460ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.RunTests( 5470ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [(GTEST_DBG_DIR, 'test/gtest_color_test.py')], 5480ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson []), 5490ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 0) 5500ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual(self.num_spawn_calls, 1) 5510ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 5520ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def testRunBinaryTestSuccess(self): 5530ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Exercises RunTests to handle a binary test success.""" 5540ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 5550ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.fake_os.spawn_impl = self.SpawnSuccess 5560ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual( 5570ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.RunTests( 5580ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [], 5590ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')]), 5600ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 0) 5610ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual(self.num_spawn_calls, 1) 5620ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 5630ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def testRunPythonTestFauilure(self): 5640ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Exercises RunTests to handle a Python test failure.""" 5650ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 5660ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.fake_os.spawn_impl = self.SpawnFailure 5670ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual( 5680ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.RunTests( 5690ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [(GTEST_DBG_DIR, 'test/gtest_color_test.py')], 5700ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson []), 5710ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1) 5720ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual(self.num_spawn_calls, 1) 5730ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 5740ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def testRunBinaryTestFailure(self): 5750ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Exercises RunTests to handle a binary test failure.""" 5760ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 5770ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.fake_os.spawn_impl = self.SpawnFailure 5780ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual( 5790ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.RunTests( 5800ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [], 5810ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')]), 5820ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 1) 5830ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual(self.num_spawn_calls, 1) 5840ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 5850ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def testCombinedTestSuccess(self): 5860ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Exercises RunTests to handle a success of both Python and binary test.""" 5870ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 5880ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.fake_os.spawn_impl = self.SpawnSuccess 5890ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual( 5900ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.RunTests( 5910ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')], 5920ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')]), 5930ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 0) 5940ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual(self.num_spawn_calls, 2) 5950ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 5960ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def testCombinedTestSuccessAndFailure(self): 5970ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Exercises RunTests to handle a success of both Python and binary test.""" 5980ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 5990ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def SpawnImpl(executable, argv): 6000ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.num_spawn_calls += 1 6010ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # Simulates failure of a Python test and success of a binary test. 6020ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson if '.py' in executable or '.py' in argv[0]: 6030ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson return 1 6040ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson else: 6050ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson return 0 6060ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 6070ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.fake_os.spawn_impl = SpawnImpl 6080ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual( 6090ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.test_runner.RunTests( 6100ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')], 6110ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson [(GTEST_DBG_DIR, GTEST_DBG_DIR + '/gtest_unittest')]), 6120ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 0) 6130ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual(self.num_spawn_calls, 2) 6140ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 6150ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 6160ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonclass ParseArgsTest(unittest.TestCase): 6170ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson """Exercises ParseArgs.""" 6180ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 6190ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def testNoOptions(self): 6200ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson options, args = run_tests_util.ParseArgs('gtest', argv=['script.py']) 6210ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual(args, ['script.py']) 6220ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assert_(options.configurations is None) 6230ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertFalse(options.built_configurations) 6240ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 6250ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def testOptionC(self): 6260ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson options, args = run_tests_util.ParseArgs( 6270ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 'gtest', argv=['script.py', '-c', 'dbg']) 6280ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual(args, ['script.py']) 6290ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual(options.configurations, 'dbg') 6300ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertFalse(options.built_configurations) 6310ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 6320ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def testOptionA(self): 6330ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson options, args = run_tests_util.ParseArgs('gtest', argv=['script.py', '-a']) 6340ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual(args, ['script.py']) 6350ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual(options.configurations, 'all') 6360ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertFalse(options.built_configurations) 6370ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 6380ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def testOptionB(self): 6390ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson options, args = run_tests_util.ParseArgs('gtest', argv=['script.py', '-b']) 6400ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual(args, ['script.py']) 6410ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assert_(options.configurations is None) 6420ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertTrue(options.built_configurations) 6430ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 6440ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def testOptionCAndOptionB(self): 6450ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson options, args = run_tests_util.ParseArgs( 6460ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 'gtest', argv=['script.py', '-c', 'dbg', '-b']) 6470ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual(args, ['script.py']) 6480ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual(options.configurations, 'dbg') 6490ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertTrue(options.built_configurations) 6500ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 6510ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def testOptionH(self): 6520ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson help_called = [False] 6530ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 6540ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # Suppresses lint warning on unused arguments. These arguments are 6550ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # required by optparse, even though they are unused. 6560ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # pylint: disable-msg=W0613 6570ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson def VerifyHelp(option, opt, value, parser): 6580ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson help_called[0] = True 6590ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 6600ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # Verifies that -h causes the help callback to be called. 6610ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson help_called[0] = False 6620ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson _, args = run_tests_util.ParseArgs( 6630ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 'gtest', argv=['script.py', '-h'], help_callback=VerifyHelp) 6640ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual(args, ['script.py']) 6650ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertTrue(help_called[0]) 6660ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 6670ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson # Verifies that --help causes the help callback to be called. 6680ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson help_called[0] = False 6690ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson _, args = run_tests_util.ParseArgs( 6700ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 'gtest', argv=['script.py', '--help'], help_callback=VerifyHelp) 6710ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertEqual(args, ['script.py']) 6720ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson self.assertTrue(help_called[0]) 6730ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 6740ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson 6750ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidsonif __name__ == '__main__': 6760ddac1f3791efefb2cffdb425f0c600feb7a47e6Jeff Davidson unittest.main() 677