diff --git a/include/gmock/gmock-matchers.h b/include/gmock/gmock-matchers.h index fbbf5811..7f84761e 100644 --- a/include/gmock/gmock-matchers.h +++ b/include/gmock/gmock-matchers.h @@ -702,11 +702,11 @@ class AnythingMatcher { } \ virtual void DescribeTo(::std::ostream* os) const { \ *os << relation " "; \ - UniversalPrinter::Print(rhs_, os); \ + UniversalPrint(rhs_, os); \ } \ virtual void DescribeNegationTo(::std::ostream* os) const { \ *os << negated_relation " "; \ - UniversalPrinter::Print(rhs_, os); \ + UniversalPrint(rhs_, os); \ } \ private: \ Rhs rhs_; \ @@ -910,7 +910,7 @@ class StrEqualityMatcher { if (!case_sensitive_) { *os << "(ignoring case) "; } - UniversalPrinter::Print(string_, os); + UniversalPrint(string_, os); } const StringType string_; @@ -947,12 +947,12 @@ class HasSubstrMatcher { // Describes what this matcher matches. void DescribeTo(::std::ostream* os) const { *os << "has substring "; - UniversalPrinter::Print(substring_, os); + UniversalPrint(substring_, os); } void DescribeNegationTo(::std::ostream* os) const { *os << "has no substring "; - UniversalPrinter::Print(substring_, os); + UniversalPrint(substring_, os); } private: @@ -988,12 +988,12 @@ class StartsWithMatcher { void DescribeTo(::std::ostream* os) const { *os << "starts with "; - UniversalPrinter::Print(prefix_, os); + UniversalPrint(prefix_, os); } void DescribeNegationTo(::std::ostream* os) const { *os << "doesn't start with "; - UniversalPrinter::Print(prefix_, os); + UniversalPrint(prefix_, os); } private: @@ -1028,12 +1028,12 @@ class EndsWithMatcher { void DescribeTo(::std::ostream* os) const { *os << "ends with "; - UniversalPrinter::Print(suffix_, os); + UniversalPrint(suffix_, os); } void DescribeNegationTo(::std::ostream* os) const { *os << "doesn't end with "; - UniversalPrinter::Print(suffix_, os); + UniversalPrint(suffix_, os); } private: @@ -1879,11 +1879,11 @@ class ContainerEqMatcher { void DescribeTo(::std::ostream* os) const { *os << "equals "; - UniversalPrinter::Print(rhs_, os); + UniversalPrint(rhs_, os); } void DescribeNegationTo(::std::ostream* os) const { *os << "does not equal "; - UniversalPrinter::Print(rhs_, os); + UniversalPrint(rhs_, os); } template @@ -1913,8 +1913,7 @@ class ContainerEqMatcher { *os << "which has these unexpected elements: "; printed_header = true; } - UniversalPrinter:: - Print(*it, os); + UniversalPrint(*it, os); } } @@ -1932,7 +1931,7 @@ class ContainerEqMatcher { << " doesn't have these expected elements: "; printed_header2 = true; } - UniversalPrinter::Print(*it, os); + UniversalPrint(*it, os); } } } diff --git a/include/gmock/gmock-more-actions.h b/include/gmock/gmock-more-actions.h index 9a6fe969..6d686cd1 100644 --- a/include/gmock/gmock-more-actions.h +++ b/include/gmock/gmock-more-actions.h @@ -198,7 +198,17 @@ ACTION_TEMPLATE(DeleteArg, // Action Throw(exception) can be used in a mock function of any type // to throw the given exception. Any copyable value can be thrown. #if GTEST_HAS_EXCEPTIONS + +// Suppresses the 'unreachable code' warning that VC generates in opt modes. +#ifdef _MSC_VER +#pragma warning(push) // Saves the current warning state. +#pragma warning(disable:4702) // Temporarily disables warning 4702. +#endif ACTION_P(Throw, exception) { throw exception; } +#ifdef _MSC_VER +#pragma warning(pop) // Restores the warning state. +#endif + #endif // GTEST_HAS_EXCEPTIONS #ifdef _MSC_VER diff --git a/include/gmock/gmock-spec-builders.h b/include/gmock/gmock-spec-builders.h index 67c7a697..7038c2e4 100644 --- a/include/gmock/gmock-spec-builders.h +++ b/include/gmock/gmock-spec-builders.h @@ -1268,6 +1268,7 @@ class ActionResultHolder { // Prints the held value as an action's result to os. void PrintAsActionResult(::std::ostream* os) const { *os << "\n Returns: "; + // T may be a reference type, so we don't use UniversalPrint(). UniversalPrinter::Print(value_, os); } @@ -1539,7 +1540,7 @@ class FunctionMockerBase : public UntypedFunctionMockerBase { *os << "Uninteresting mock function call - "; DescribeDefaultActionTo(args, os); *os << " Function call: " << Name(); - UniversalPrinter::Print(args, os); + UniversalPrint(args, os); } // Critical section: We must find the matching expectation and the @@ -1775,7 +1776,7 @@ typename Function::Result FunctionMockerBase::InvokeWith( } ss << " Function call: " << Name(); - UniversalPrinter::Print(args, &ss); + UniversalPrint(args, &ss); // In case the action deletes a piece of the expectation, we // generate the message beforehand. diff --git a/run_tests.py b/run_tests.py index 42dc14bf..5e7b308f 100755 --- a/run_tests.py +++ b/run_tests.py @@ -68,7 +68,6 @@ def _Main(): options, args = run_tests_util.ParseArgs('gtest') test_runner = run_tests_util.TestRunner( script_dir=SCRIPT_DIR, - build_dir_var_name='GMOCK_BUILD_DIR', injected_build_dir_finder=GetGmockBuildDir) tests = test_runner.GetTestsToRun(args, options.configurations, diff --git a/test/gmock_output_test.py b/test/gmock_output_test.py index 614a58fa..eced8a81 100755 --- a/test/gmock_output_test.py +++ b/test/gmock_output_test.py @@ -32,7 +32,7 @@ """Tests the text output of Google C++ Mocking Framework. SYNOPSIS - gmock_output_test.py --gmock_build_dir=BUILD/DIR --gengolden + gmock_output_test.py --build_dir=BUILD/DIR --gengolden # where BUILD/DIR contains the built gmock_output_test_ file. gmock_output_test.py --gengolden gmock_output_test.py diff --git a/test/gmock_test_utils.py b/test/gmock_test_utils.py index fa896a47..ac3d67ae 100755 --- a/test/gmock_test_utils.py +++ b/test/gmock_test_utils.py @@ -51,62 +51,10 @@ sys.path.append(GTEST_TESTS_UTIL_DIR) import gtest_test_utils # pylint: disable-msg=C6204 -# Initially maps a flag to its default value. After -# _ParseAndStripGMockFlags() is called, maps a flag to its actual -# value. -_flag_map = {'gmock_source_dir': os.path.dirname(sys.argv[0]), - 'gmock_build_dir': os.path.dirname(sys.argv[0])} -_gmock_flags_are_parsed = False - - -def _ParseAndStripGMockFlags(argv): - """Parses and strips Google Test flags from argv. This is idempotent.""" - - global _gmock_flags_are_parsed - if _gmock_flags_are_parsed: - return - - _gmock_flags_are_parsed = True - for flag in _flag_map: - # The environment variable overrides the default value. - if flag.upper() in os.environ: - _flag_map[flag] = os.environ[flag.upper()] - - # The command line flag overrides the environment variable. - i = 1 # Skips the program name. - while i < len(argv): - prefix = '--' + flag + '=' - if argv[i].startswith(prefix): - _flag_map[flag] = argv[i][len(prefix):] - del argv[i] - break - else: - # We don't increment i in case we just found a --gmock_* flag - # and removed it from argv. - i += 1 - - -def GetFlag(flag): - """Returns the value of the given flag.""" - - # In case GetFlag() is called before Main(), we always call - # _ParseAndStripGMockFlags() here to make sure the --gmock_* flags - # are parsed. - _ParseAndStripGMockFlags(sys.argv) - - return _flag_map[flag] - - def GetSourceDir(): """Returns the absolute path of the directory where the .py files are.""" - return os.path.abspath(GetFlag('gmock_source_dir')) - - -def GetBuildDir(): - """Returns the absolute path of the directory where the test binaries are.""" - - return os.path.abspath(GetFlag('gmock_build_dir')) + return gtest_test_utils.GetSourceDir() def GetTestExecutablePath(executable_name): @@ -122,7 +70,7 @@ def GetTestExecutablePath(executable_name): The absolute path of the test binary. """ - return gtest_test_utils.GetTestExecutablePath(executable_name, GetBuildDir()) + return gtest_test_utils.GetTestExecutablePath(executable_name) def GetExitStatus(exit_code): @@ -160,8 +108,4 @@ TestCase = gtest_test_utils.TestCase def Main(): """Runs the unit test.""" - # We must call _ParseAndStripGMockFlags() before calling - # gtest_test_utils.Main(). Otherwise unittest.main it calls will be - # confused by the --gmock_* flags. - _ParseAndStripGMockFlags(sys.argv) gtest_test_utils.Main()