1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Copyright 2008, Google Inc.
2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// All rights reserved.
3fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Redistribution and use in source and binary forms, with or without
5fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// modification, are permitted provided that the following conditions are
6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// met:
7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//     * Redistributions of source code must retain the above copyright
9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// notice, this list of conditions and the following disclaimer.
10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//     * Redistributions in binary form must reproduce the above
11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// copyright notice, this list of conditions and the following disclaimer
12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// in the documentation and/or other materials provided with the
13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// distribution.
14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//     * Neither the name of Google Inc. nor the names of its
15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// contributors may be used to endorse or promote products derived from
16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// this software without specific prior written permission.
17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Authors: keith.ray@gmail.com (Keith Ray)
31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Google Test UnitTestOptions tests
33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// This file tests classes and functions used internally by
35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Google Test.  They are subject to change without notice.
36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// This file is #included from gtest.cc, to avoid changing build or
38fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// make-files on Windows and other platforms. Do not #include this file
39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// anywhere else!
40fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <gtest/gtest.h>
42fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
43d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville#if GTEST_OS_WINDOWS_MOBILE
44fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <windows.h>
45fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#elif GTEST_OS_WINDOWS
46fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <direct.h>
47d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville#endif  // GTEST_OS_WINDOWS_MOBILE
48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Indicates that this translation unit is part of Google Test's
50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// implementation.  It must come before gtest-internal-inl.h is
51fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// included, or there will be a compiler error.  This trick is to
52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// prevent a user from accidentally including gtest-internal-inl.h in
53fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// his code.
54fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#define GTEST_IMPLEMENTATION_ 1
55fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include "src/gtest-internal-inl.h"
56fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#undef GTEST_IMPLEMENTATION_
57fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
58fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace testing {
59fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace internal {
60fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace {
61fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
62fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Turns the given relative path into an absolute path.
63fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleFilePath GetAbsolutePathOf(const FilePath& relative_path) {
64fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  return FilePath::ConcatPaths(FilePath::GetCurrentDir(), relative_path);
65fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
67fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Testing UnitTestOptions::GetOutputFormat/GetOutputFile.
68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST(XmlOutputTest, GetOutputFormatDefault) {
70fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  GTEST_FLAG(output) = "";
71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("", UnitTestOptions::GetOutputFormat().c_str());
72fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
73fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
74fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST(XmlOutputTest, GetOutputFormat) {
75fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  GTEST_FLAG(output) = "xml:filename";
76fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ("xml", UnitTestOptions::GetOutputFormat().c_str());
77fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
78fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
79fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST(XmlOutputTest, GetOutputFileDefault) {
80fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  GTEST_FLAG(output) = "";
81fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ(GetAbsolutePathOf(FilePath("test_detail.xml")).c_str(),
82fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville               UnitTestOptions::GetAbsolutePathToOutputFile().c_str());
83fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
84fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
85fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST(XmlOutputTest, GetOutputFileSingleFile) {
86fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  GTEST_FLAG(output) = "xml:filename.abc";
87fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ(GetAbsolutePathOf(FilePath("filename.abc")).c_str(),
88fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville               UnitTestOptions::GetAbsolutePathToOutputFile().c_str());
89fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
90fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
91fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST(XmlOutputTest, GetOutputFileFromDirectoryPath) {
92fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#if GTEST_OS_WINDOWS
93fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  GTEST_FLAG(output) = "xml:path\\";
94fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  const String& output_file = UnitTestOptions::GetAbsolutePathToOutputFile();
95fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_TRUE(
96fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      _strcmpi(output_file.c_str(),
97fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville               GetAbsolutePathOf(
98fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                   FilePath("path\\gtest-options_test.xml")).c_str()) == 0 ||
99fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      _strcmpi(output_file.c_str(),
100fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville               GetAbsolutePathOf(
101fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                   FilePath("path\\gtest-options-ex_test.xml")).c_str()) == 0 ||
102fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      _strcmpi(output_file.c_str(),
103fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville               GetAbsolutePathOf(
104fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                   FilePath("path\\gtest_all_test.xml")).c_str()) == 0)
105fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                       << " output_file = " << output_file;
106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#else
107fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  GTEST_FLAG(output) = "xml:path/";
108fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  const String& output_file = UnitTestOptions::GetAbsolutePathToOutputFile();
109fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  // TODO(wan@google.com): libtool causes the test binary file to be
110fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  //   named lt-gtest-options_test.  Therefore the output file may be
111fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  //   named .../lt-gtest-options_test.xml.  We should remove this
112fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  //   hard-coded logic when Chandler Carruth's libtool replacement is
113fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  //   ready.
114fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_TRUE(output_file ==
115fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              GetAbsolutePathOf(
116fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                  FilePath("path/gtest-options_test.xml")).c_str() ||
117fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              output_file ==
118fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              GetAbsolutePathOf(
119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                  FilePath("path/lt-gtest-options_test.xml")).c_str() ||
120fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              output_file ==
121fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              GetAbsolutePathOf(
122fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                  FilePath("path/gtest_all_test.xml")).c_str() ||
123fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              output_file ==
124fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              GetAbsolutePathOf(
125fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                  FilePath("path/lt-gtest_all_test.xml")).c_str())
126fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                      << " output_file = " << output_file;
127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#endif
128fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
129fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST(OutputFileHelpersTest, GetCurrentExecutableName) {
131fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  const FilePath executable = GetCurrentExecutableName();
132fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  const char* const exe_str = executable.c_str();
133d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville#if GTEST_OS_WINDOWS
134fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  ASSERT_TRUE(_strcmpi("gtest-options_test", exe_str) == 0 ||
135fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              _strcmpi("gtest-options-ex_test", exe_str) == 0 ||
136fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              _strcmpi("gtest_all_test", exe_str) == 0)
137fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              << "GetCurrentExecutableName() returns " << exe_str;
138fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#else
139fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  // TODO(wan@google.com): remove the hard-coded "lt-" prefix when
140fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  //   Chandler Carruth's libtool replacement is ready.
141fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_TRUE(String(exe_str) == "gtest-options_test" ||
142fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              String(exe_str) == "lt-gtest-options_test" ||
143fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              String(exe_str) == "gtest_all_test" ||
144fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              String(exe_str) == "lt-gtest_all_test")
145fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                  << "GetCurrentExecutableName() returns " << exe_str;
146d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville#endif  // GTEST_OS_WINDOWS
147fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
148fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
149fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass XmlOutputChangeDirTest : public Test {
150fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville protected:
151fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  virtual void SetUp() {
152fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    original_working_dir_ = FilePath::GetCurrentDir();
153fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    posix::ChDir("..");
154fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    // This will make the test fail if run from the root directory.
155fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    EXPECT_STRNE(original_working_dir_.c_str(),
156fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                 FilePath::GetCurrentDir().c_str());
157fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  }
158fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
159fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  virtual void TearDown() {
160fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    posix::ChDir(original_working_dir_.c_str());
161fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  }
162fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
163fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  FilePath original_working_dir_;
164fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville};
165fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
166fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithDefault) {
167fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  GTEST_FLAG(output) = "";
168fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ(FilePath::ConcatPaths(original_working_dir_,
169fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                                     FilePath("test_detail.xml")).c_str(),
170fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville               UnitTestOptions::GetAbsolutePathToOutputFile().c_str());
171fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
172fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
173fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithDefaultXML) {
174fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  GTEST_FLAG(output) = "xml";
175fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ(FilePath::ConcatPaths(original_working_dir_,
176fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                                     FilePath("test_detail.xml")).c_str(),
177fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville               UnitTestOptions::GetAbsolutePathToOutputFile().c_str());
178fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
179fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
180fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithRelativeFile) {
181fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  GTEST_FLAG(output) = "xml:filename.abc";
182fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ(FilePath::ConcatPaths(original_working_dir_,
183fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                                     FilePath("filename.abc")).c_str(),
184fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville               UnitTestOptions::GetAbsolutePathToOutputFile().c_str());
185fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
186fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
187fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithRelativePath) {
188fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#if GTEST_OS_WINDOWS
189fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  GTEST_FLAG(output) = "xml:path\\";
190fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  const String& output_file = UnitTestOptions::GetAbsolutePathToOutputFile();
191fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_TRUE(
192fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      _strcmpi(output_file.c_str(),
193fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville               FilePath::ConcatPaths(
194fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                   original_working_dir_,
195fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                   FilePath("path\\gtest-options_test.xml")).c_str()) == 0 ||
196fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      _strcmpi(output_file.c_str(),
197fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville               FilePath::ConcatPaths(
198fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                   original_working_dir_,
199fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                   FilePath("path\\gtest-options-ex_test.xml")).c_str()) == 0 ||
200fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      _strcmpi(output_file.c_str(),
201fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville               FilePath::ConcatPaths(
202fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                   original_working_dir_,
203fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                   FilePath("path\\gtest_all_test.xml")).c_str()) == 0)
204fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                       << " output_file = " << output_file;
205fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#else
206fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  GTEST_FLAG(output) = "xml:path/";
207fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  const String& output_file = UnitTestOptions::GetAbsolutePathToOutputFile();
208fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  // TODO(wan@google.com): libtool causes the test binary file to be
209fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  //   named lt-gtest-options_test.  Therefore the output file may be
210fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  //   named .../lt-gtest-options_test.xml.  We should remove this
211fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  //   hard-coded logic when Chandler Carruth's libtool replacement is
212fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  //   ready.
213fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_TRUE(output_file == FilePath::ConcatPaths(original_working_dir_,
214fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                      FilePath("path/gtest-options_test.xml")).c_str() ||
215fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              output_file == FilePath::ConcatPaths(original_working_dir_,
216fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                      FilePath("path/lt-gtest-options_test.xml")).c_str() ||
217fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              output_file == FilePath::ConcatPaths(original_working_dir_,
218fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                      FilePath("path/gtest_all_test.xml")).c_str() ||
219fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              output_file == FilePath::ConcatPaths(original_working_dir_,
220fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                      FilePath("path/lt-gtest_all_test.xml")).c_str())
221fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                  << " output_file = " << output_file;
222fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#endif
223fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
224fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
225fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithAbsoluteFile) {
226fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#if GTEST_OS_WINDOWS
227fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  GTEST_FLAG(output) = "xml:c:\\tmp\\filename.abc";
228fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ(FilePath("c:\\tmp\\filename.abc").c_str(),
229fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville               UnitTestOptions::GetAbsolutePathToOutputFile().c_str());
230fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#else
231fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  GTEST_FLAG(output) ="xml:/tmp/filename.abc";
232fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_STREQ(FilePath("/tmp/filename.abc").c_str(),
233fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville               UnitTestOptions::GetAbsolutePathToOutputFile().c_str());
234fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#endif
235fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
236fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
237fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithAbsolutePath) {
238fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#if GTEST_OS_WINDOWS
239fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  GTEST_FLAG(output) = "xml:c:\\tmp\\";
240fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  const String& output_file = UnitTestOptions::GetAbsolutePathToOutputFile();
241fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_TRUE(
242fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      _strcmpi(output_file.c_str(),
243fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville               FilePath("c:\\tmp\\gtest-options_test.xml").c_str()) == 0 ||
244fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      _strcmpi(output_file.c_str(),
245fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville               FilePath("c:\\tmp\\gtest-options-ex_test.xml").c_str()) == 0 ||
246fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      _strcmpi(output_file.c_str(),
247fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville               FilePath("c:\\tmp\\gtest_all_test.xml").c_str()) == 0)
248fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                   << " output_file = " << output_file;
249fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#else
250fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  GTEST_FLAG(output) = "xml:/tmp/";
251fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  const String& output_file = UnitTestOptions::GetAbsolutePathToOutputFile();
252fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  // TODO(wan@google.com): libtool causes the test binary file to be
253fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  //   named lt-gtest-options_test.  Therefore the output file may be
254fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  //   named .../lt-gtest-options_test.xml.  We should remove this
255fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  //   hard-coded logic when Chandler Carruth's libtool replacement is
256fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  //   ready.
257fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  EXPECT_TRUE(output_file == "/tmp/gtest-options_test.xml" ||
258fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              output_file == "/tmp/lt-gtest-options_test.xml" ||
259fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              output_file == "/tmp/gtest_all_test.xml" ||
260fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville              output_file == "/tmp/lt-gtest_all_test.xml")
261fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                  << " output_file = " << output_file;
262fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#endif
263fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
264fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
265fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}  // namespace
266fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}  // namespace internal
267fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}  // namespace testing
268