]> git-server-git.apps.pok.os.sepia.ceph.com Git - googletest.git/commitdiff
Read Bazel's $XML_OUTPUT_FILE environment variable
authorDoug Greiman <dgreiman@google.com>
Wed, 24 Feb 2016 02:50:08 +0000 (18:50 -0800)
committerDoug Greiman <dgreiman@google.com>
Wed, 24 Feb 2016 02:50:08 +0000 (18:50 -0800)
If $XML_OUTPUT_FILE is set, and $GTEST_OUTPUT and --gtest_output are not
specified, produce output as if GTEST_OUTPUT=xml:$XML_OUTPUT_FILE had
been set.

googletest/include/gtest/internal/gtest-port.h
googletest/src/gtest-port.cc
googletest/src/gtest.cc
googletest/test/gtest_env_var_test.py

index 7d6e4658194dc5b031883db895e406847cb0742b..236aaea0661a9fefbcd406249887d776a02d99d9 100644 (file)
@@ -2547,9 +2547,9 @@ bool ParseInt32(const Message& src_text, const char* str, Int32* value);
 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);
 
 }  // namespace internal
 }  // namespace testing
 
 #endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_
-
index 0162fac44bea07a3f8e30c03361ba91f811319e4..05ffca0e7735dd46c6ba9b6bb354465b271dac65 100644 (file)
@@ -1235,5 +1235,24 @@ const char* StringFromGTestEnv(const char* flag, const char* default_value) {
   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) {
+    return value;
+  }
+  value = posix::GetEnv("XML_OUTPUT_FILE");
+  if (value) {
+    return std::string("xml:") + value;
+  }
+  return default_value;
+}
+
 }  // namespace internal
 }  // namespace testing
index 2bac245d75eb5c64b15741cd4584c99d1d9d40ca..5509f092fa752c3c757537d5cd5d318934b7af35 100644 (file)
@@ -237,7 +237,7 @@ GTEST_DEFINE_bool_(list_tests, false,
 
 GTEST_DEFINE_string_(
     output,
-    internal::StringFromGTestEnv("output", ""),
+    internal::OutputFromGTestEnv(""),
     "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. "
index 1fc6ebe5f599379c78649ac7d7ec1370ce031b21..13afb2b017cb7dc942b6829cc9770b506a89db71 100755 (executable)
@@ -98,6 +98,19 @@ class GTestEnvVarTest(gtest_test_utils.TestCase):
       TestFlag('death_test_use_fork', '1', '0')
       TestFlag('stack_trace_depth', '0', '100')
 
+  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'))
+      # $XML_OUTPUT_FILE is overridden by $GTEST_OUTPUT
+      SetEnvVar('GTEST_OUTPUT', 'xml:tmp/foo.xml')
+      AssertEq('xml:tmp/foo.xml', GetFlag('output'))
+      # If neither set, flag has default value
+      SetEnvVar('XML_OUTPUT_FILE', None)
+      SetEnvVar('GTEST_OUTPUT', None)
+      AssertEq('', GetFlag('output'))
 
 if __name__ == '__main__':
   gtest_test_utils.Main()