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