Restructure $XML_OUTPUT_FILE logic

This commit is contained in:
Doug Greiman 2016-02-26 14:26:23 -08:00
parent 12b2f23e8e
commit 5db9cbbc23
4 changed files with 32 additions and 26 deletions

View File

@ -2546,8 +2546,7 @@ bool ParseInt32(const Message& src_text, const char* str, Int32* value);
// corresponding to the given Google Test flag.
bool BoolFromGTestEnv(const char* flag, bool default_val);
GTEST_API_ Int32 Int32FromGTestEnv(const char* flag, Int32 default_val);
const char* StringFromGTestEnv(const char* flag, const char* default_val);
std::string OutputFromGTestEnv(const char* default_val);
std::string StringFromGTestEnv(const char* flag, const char* default_val);
} // namespace internal
} // namespace testing

View File

@ -1226,31 +1226,32 @@ Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) {
// Reads and returns the string environment variable corresponding to
// the given flag; if it's not set, returns default_value.
const char* StringFromGTestEnv(const char* flag, const char* default_value) {
std::string StringFromGTestEnv(const char* flag, const char* default_value) {
#if defined(GTEST_GET_STRING_FROM_ENV_)
return GTEST_GET_STRING_FROM_ENV_(flag, default_value);
#endif // defined(GTEST_GET_STRING_FROM_ENV_)
const std::string env_var = FlagToEnvVar(flag);
const char* const value = posix::GetEnv(env_var.c_str());
return value == NULL ? default_value : value;
}
// Reads and returns GTEST_OUTPUT and/or XML_OUTPUT_FILE environment
// variables; if neither is set, returns default value.
// XML_OUTPUT_FILE is set by the Bazel build system, and its format is
// a filename without the "xml:" prefix of GTEST_OUTPUT.
std::string OutputFromGTestEnv(const char* default_value) {
#if defined(GTEST_GET_STRING_FROM_ENV_)
return GTEST_GET_STRING_FROM_ENV_("output", default_value);
#endif // defined(GTEST_GET_STRING_FROM_ENV_)
const char* value = StringFromGTestEnv("output", NULL);
if (value) {
const char* value = posix::GetEnv(env_var.c_str());
if (value != NULL) {
return value;
}
// As a special case for the 'output' flag, if GTEST_OUTPUT is not
// set, we look for XML_OUTPUT_FILE, which is set by the Bazel build
// system. The value of XML_OUTPUT_FILE is a filename without the
// "xml:" prefix of GTEST_OUTPUT.
//
// The net priority order after flag processing is thus:
// --gtest_output command line flag
// GTEST_OUTPUT environment variable
// XML_OUTPUT_FILE environment variable
// 'default_value'
if (strcmp(flag, "output") == 0) {
value = posix::GetEnv("XML_OUTPUT_FILE");
if (value) {
if (value != NULL) {
return std::string("xml:") + value;
}
}
return default_value;
}

View File

@ -237,7 +237,7 @@ GTEST_DEFINE_bool_(list_tests, false,
GTEST_DEFINE_string_(
output,
internal::OutputFromGTestEnv(""),
internal::StringFromGTestEnv("output", ""),
"A format (currently must be \"xml\"), optionally followed "
"by a colon and an output file name or directory. A directory "
"is indicated by a trailing pathname separator. "

View File

@ -101,16 +101,22 @@ class GTestEnvVarTest(gtest_test_utils.TestCase):
def testXmlOutputFile(self):
"""Test that $XML_OUTPUT_FILE affects the output flag."""
# $XML_OUTPUT_FILE sets output flag
SetEnvVar('XML_OUTPUT_FILE', 'tmp/bar.xml')
AssertEq('xml:tmp/bar.xml', GetFlag('output'))
try:
# $XML_OUTPUT_FILE is overridden by $GTEST_OUTPUT
SetEnvVar('GTEST_OUTPUT', 'xml:tmp/foo.xml')
SetEnvVar('XML_OUTPUT_FILE', 'tmp/bar.xml')
AssertEq('xml:tmp/foo.xml', GetFlag('output'))
# $XML_OUTPUT_FILE without $GTEST_OUTPUT sets output flag
SetEnvVar('GTEST_OUTPUT', None)
AssertEq('xml:tmp/bar.xml', GetFlag('output'))
# If neither set, flag has default value
SetEnvVar('XML_OUTPUT_FILE', None)
SetEnvVar('GTEST_OUTPUT', None)
AssertEq('', GetFlag('output'))
finally:
SetEnvVar('GTEST_OUTPUT', None)
SetEnvVar('XML_OUTPUT_FILE', None)
if __name__ == '__main__':
gtest_test_utils.Main()