113481Sgiacomo.travaglini@arm.com// Copyright 2008, Google Inc. 213481Sgiacomo.travaglini@arm.com// All rights reserved. 313481Sgiacomo.travaglini@arm.com// 413481Sgiacomo.travaglini@arm.com// Redistribution and use in source and binary forms, with or without 513481Sgiacomo.travaglini@arm.com// modification, are permitted provided that the following conditions are 613481Sgiacomo.travaglini@arm.com// met: 713481Sgiacomo.travaglini@arm.com// 813481Sgiacomo.travaglini@arm.com// * Redistributions of source code must retain the above copyright 913481Sgiacomo.travaglini@arm.com// notice, this list of conditions and the following disclaimer. 1013481Sgiacomo.travaglini@arm.com// * Redistributions in binary form must reproduce the above 1113481Sgiacomo.travaglini@arm.com// copyright notice, this list of conditions and the following disclaimer 1213481Sgiacomo.travaglini@arm.com// in the documentation and/or other materials provided with the 1313481Sgiacomo.travaglini@arm.com// distribution. 1413481Sgiacomo.travaglini@arm.com// * Neither the name of Google Inc. nor the names of its 1513481Sgiacomo.travaglini@arm.com// contributors may be used to endorse or promote products derived from 1613481Sgiacomo.travaglini@arm.com// this software without specific prior written permission. 1713481Sgiacomo.travaglini@arm.com// 1813481Sgiacomo.travaglini@arm.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1913481Sgiacomo.travaglini@arm.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2013481Sgiacomo.travaglini@arm.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2113481Sgiacomo.travaglini@arm.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2213481Sgiacomo.travaglini@arm.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2313481Sgiacomo.travaglini@arm.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2413481Sgiacomo.travaglini@arm.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2513481Sgiacomo.travaglini@arm.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2613481Sgiacomo.travaglini@arm.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2713481Sgiacomo.travaglini@arm.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2813481Sgiacomo.travaglini@arm.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2913481Sgiacomo.travaglini@arm.com// 3013481Sgiacomo.travaglini@arm.com// Authors: keith.ray@gmail.com (Keith Ray) 3113481Sgiacomo.travaglini@arm.com// 3213481Sgiacomo.travaglini@arm.com// Google Test UnitTestOptions tests 3313481Sgiacomo.travaglini@arm.com// 3413481Sgiacomo.travaglini@arm.com// This file tests classes and functions used internally by 3513481Sgiacomo.travaglini@arm.com// Google Test. They are subject to change without notice. 3613481Sgiacomo.travaglini@arm.com// 3713481Sgiacomo.travaglini@arm.com// This file is #included from gtest.cc, to avoid changing build or 3813481Sgiacomo.travaglini@arm.com// make-files on Windows and other platforms. Do not #include this file 3913481Sgiacomo.travaglini@arm.com// anywhere else! 4013481Sgiacomo.travaglini@arm.com 4113481Sgiacomo.travaglini@arm.com#include "gtest/gtest.h" 4213481Sgiacomo.travaglini@arm.com 4313481Sgiacomo.travaglini@arm.com#if GTEST_OS_WINDOWS_MOBILE 4413481Sgiacomo.travaglini@arm.com# include <windows.h> 4513481Sgiacomo.travaglini@arm.com#elif GTEST_OS_WINDOWS 4613481Sgiacomo.travaglini@arm.com# include <direct.h> 4713481Sgiacomo.travaglini@arm.com#endif // GTEST_OS_WINDOWS_MOBILE 4813481Sgiacomo.travaglini@arm.com 4913481Sgiacomo.travaglini@arm.com// Indicates that this translation unit is part of Google Test's 5013481Sgiacomo.travaglini@arm.com// implementation. It must come before gtest-internal-inl.h is 5113481Sgiacomo.travaglini@arm.com// included, or there will be a compiler error. This trick is to 5213481Sgiacomo.travaglini@arm.com// prevent a user from accidentally including gtest-internal-inl.h in 5313481Sgiacomo.travaglini@arm.com// his code. 5413481Sgiacomo.travaglini@arm.com#define GTEST_IMPLEMENTATION_ 1 5513481Sgiacomo.travaglini@arm.com#include "src/gtest-internal-inl.h" 5613481Sgiacomo.travaglini@arm.com#undef GTEST_IMPLEMENTATION_ 5713481Sgiacomo.travaglini@arm.com 5813481Sgiacomo.travaglini@arm.comnamespace testing { 5913481Sgiacomo.travaglini@arm.comnamespace internal { 6013481Sgiacomo.travaglini@arm.comnamespace { 6113481Sgiacomo.travaglini@arm.com 6213481Sgiacomo.travaglini@arm.com// Turns the given relative path into an absolute path. 6313481Sgiacomo.travaglini@arm.comFilePath GetAbsolutePathOf(const FilePath& relative_path) { 6413481Sgiacomo.travaglini@arm.com return FilePath::ConcatPaths(FilePath::GetCurrentDir(), relative_path); 6513481Sgiacomo.travaglini@arm.com} 6613481Sgiacomo.travaglini@arm.com 6713481Sgiacomo.travaglini@arm.com// Testing UnitTestOptions::GetOutputFormat/GetOutputFile. 6813481Sgiacomo.travaglini@arm.com 6913481Sgiacomo.travaglini@arm.comTEST(XmlOutputTest, GetOutputFormatDefault) { 7013481Sgiacomo.travaglini@arm.com GTEST_FLAG(output) = ""; 7113481Sgiacomo.travaglini@arm.com EXPECT_STREQ("", UnitTestOptions::GetOutputFormat().c_str()); 7213481Sgiacomo.travaglini@arm.com} 7313481Sgiacomo.travaglini@arm.com 7413481Sgiacomo.travaglini@arm.comTEST(XmlOutputTest, GetOutputFormat) { 7513481Sgiacomo.travaglini@arm.com GTEST_FLAG(output) = "xml:filename"; 7613481Sgiacomo.travaglini@arm.com EXPECT_STREQ("xml", UnitTestOptions::GetOutputFormat().c_str()); 7713481Sgiacomo.travaglini@arm.com} 7813481Sgiacomo.travaglini@arm.com 7913481Sgiacomo.travaglini@arm.comTEST(XmlOutputTest, GetOutputFileDefault) { 8013481Sgiacomo.travaglini@arm.com GTEST_FLAG(output) = ""; 8113481Sgiacomo.travaglini@arm.com EXPECT_EQ(GetAbsolutePathOf(FilePath("test_detail.xml")).string(), 8213481Sgiacomo.travaglini@arm.com UnitTestOptions::GetAbsolutePathToOutputFile()); 8313481Sgiacomo.travaglini@arm.com} 8413481Sgiacomo.travaglini@arm.com 8513481Sgiacomo.travaglini@arm.comTEST(XmlOutputTest, GetOutputFileSingleFile) { 8613481Sgiacomo.travaglini@arm.com GTEST_FLAG(output) = "xml:filename.abc"; 8713481Sgiacomo.travaglini@arm.com EXPECT_EQ(GetAbsolutePathOf(FilePath("filename.abc")).string(), 8813481Sgiacomo.travaglini@arm.com UnitTestOptions::GetAbsolutePathToOutputFile()); 8913481Sgiacomo.travaglini@arm.com} 9013481Sgiacomo.travaglini@arm.com 9113481Sgiacomo.travaglini@arm.comTEST(XmlOutputTest, GetOutputFileFromDirectoryPath) { 9213481Sgiacomo.travaglini@arm.com GTEST_FLAG(output) = "xml:path" GTEST_PATH_SEP_; 9313481Sgiacomo.travaglini@arm.com const std::string expected_output_file = 9413481Sgiacomo.travaglini@arm.com GetAbsolutePathOf( 9513481Sgiacomo.travaglini@arm.com FilePath(std::string("path") + GTEST_PATH_SEP_ + 9613481Sgiacomo.travaglini@arm.com GetCurrentExecutableName().string() + ".xml")).string(); 9713481Sgiacomo.travaglini@arm.com const std::string& output_file = 9813481Sgiacomo.travaglini@arm.com UnitTestOptions::GetAbsolutePathToOutputFile(); 9913481Sgiacomo.travaglini@arm.com#if GTEST_OS_WINDOWS 10013481Sgiacomo.travaglini@arm.com EXPECT_STRCASEEQ(expected_output_file.c_str(), output_file.c_str()); 10113481Sgiacomo.travaglini@arm.com#else 10213481Sgiacomo.travaglini@arm.com EXPECT_EQ(expected_output_file, output_file.c_str()); 10313481Sgiacomo.travaglini@arm.com#endif 10413481Sgiacomo.travaglini@arm.com} 10513481Sgiacomo.travaglini@arm.com 10613481Sgiacomo.travaglini@arm.comTEST(OutputFileHelpersTest, GetCurrentExecutableName) { 10713481Sgiacomo.travaglini@arm.com const std::string exe_str = GetCurrentExecutableName().string(); 10813481Sgiacomo.travaglini@arm.com#if GTEST_OS_WINDOWS 10913481Sgiacomo.travaglini@arm.com const bool success = 11013481Sgiacomo.travaglini@arm.com _strcmpi("gtest-options_test", exe_str.c_str()) == 0 || 11113481Sgiacomo.travaglini@arm.com _strcmpi("gtest-options-ex_test", exe_str.c_str()) == 0 || 11213481Sgiacomo.travaglini@arm.com _strcmpi("gtest_all_test", exe_str.c_str()) == 0 || 11313481Sgiacomo.travaglini@arm.com _strcmpi("gtest_dll_test", exe_str.c_str()) == 0; 11413481Sgiacomo.travaglini@arm.com#else 11513481Sgiacomo.travaglini@arm.com // TODO(wan@google.com): remove the hard-coded "lt-" prefix when 11613481Sgiacomo.travaglini@arm.com // Chandler Carruth's libtool replacement is ready. 11713481Sgiacomo.travaglini@arm.com const bool success = 11813481Sgiacomo.travaglini@arm.com exe_str == "gtest-options_test" || 11913481Sgiacomo.travaglini@arm.com exe_str == "gtest_all_test" || 12013481Sgiacomo.travaglini@arm.com exe_str == "lt-gtest_all_test" || 12113481Sgiacomo.travaglini@arm.com exe_str == "gtest_dll_test"; 12213481Sgiacomo.travaglini@arm.com#endif // GTEST_OS_WINDOWS 12313481Sgiacomo.travaglini@arm.com if (!success) 12413481Sgiacomo.travaglini@arm.com FAIL() << "GetCurrentExecutableName() returns " << exe_str; 12513481Sgiacomo.travaglini@arm.com} 12613481Sgiacomo.travaglini@arm.com 12713481Sgiacomo.travaglini@arm.comclass XmlOutputChangeDirTest : public Test { 12813481Sgiacomo.travaglini@arm.com protected: 12913481Sgiacomo.travaglini@arm.com virtual void SetUp() { 13013481Sgiacomo.travaglini@arm.com original_working_dir_ = FilePath::GetCurrentDir(); 13113481Sgiacomo.travaglini@arm.com posix::ChDir(".."); 13213481Sgiacomo.travaglini@arm.com // This will make the test fail if run from the root directory. 13313481Sgiacomo.travaglini@arm.com EXPECT_NE(original_working_dir_.string(), 13413481Sgiacomo.travaglini@arm.com FilePath::GetCurrentDir().string()); 13513481Sgiacomo.travaglini@arm.com } 13613481Sgiacomo.travaglini@arm.com 13713481Sgiacomo.travaglini@arm.com virtual void TearDown() { 13813481Sgiacomo.travaglini@arm.com posix::ChDir(original_working_dir_.string().c_str()); 13913481Sgiacomo.travaglini@arm.com } 14013481Sgiacomo.travaglini@arm.com 14113481Sgiacomo.travaglini@arm.com FilePath original_working_dir_; 14213481Sgiacomo.travaglini@arm.com}; 14313481Sgiacomo.travaglini@arm.com 14413481Sgiacomo.travaglini@arm.comTEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithDefault) { 14513481Sgiacomo.travaglini@arm.com GTEST_FLAG(output) = ""; 14613481Sgiacomo.travaglini@arm.com EXPECT_EQ(FilePath::ConcatPaths(original_working_dir_, 14713481Sgiacomo.travaglini@arm.com FilePath("test_detail.xml")).string(), 14813481Sgiacomo.travaglini@arm.com UnitTestOptions::GetAbsolutePathToOutputFile()); 14913481Sgiacomo.travaglini@arm.com} 15013481Sgiacomo.travaglini@arm.com 15113481Sgiacomo.travaglini@arm.comTEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithDefaultXML) { 15213481Sgiacomo.travaglini@arm.com GTEST_FLAG(output) = "xml"; 15313481Sgiacomo.travaglini@arm.com EXPECT_EQ(FilePath::ConcatPaths(original_working_dir_, 15413481Sgiacomo.travaglini@arm.com FilePath("test_detail.xml")).string(), 15513481Sgiacomo.travaglini@arm.com UnitTestOptions::GetAbsolutePathToOutputFile()); 15613481Sgiacomo.travaglini@arm.com} 15713481Sgiacomo.travaglini@arm.com 15813481Sgiacomo.travaglini@arm.comTEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithRelativeFile) { 15913481Sgiacomo.travaglini@arm.com GTEST_FLAG(output) = "xml:filename.abc"; 16013481Sgiacomo.travaglini@arm.com EXPECT_EQ(FilePath::ConcatPaths(original_working_dir_, 16113481Sgiacomo.travaglini@arm.com FilePath("filename.abc")).string(), 16213481Sgiacomo.travaglini@arm.com UnitTestOptions::GetAbsolutePathToOutputFile()); 16313481Sgiacomo.travaglini@arm.com} 16413481Sgiacomo.travaglini@arm.com 16513481Sgiacomo.travaglini@arm.comTEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithRelativePath) { 16613481Sgiacomo.travaglini@arm.com GTEST_FLAG(output) = "xml:path" GTEST_PATH_SEP_; 16713481Sgiacomo.travaglini@arm.com const std::string expected_output_file = 16813481Sgiacomo.travaglini@arm.com FilePath::ConcatPaths( 16913481Sgiacomo.travaglini@arm.com original_working_dir_, 17013481Sgiacomo.travaglini@arm.com FilePath(std::string("path") + GTEST_PATH_SEP_ + 17113481Sgiacomo.travaglini@arm.com GetCurrentExecutableName().string() + ".xml")).string(); 17213481Sgiacomo.travaglini@arm.com const std::string& output_file = 17313481Sgiacomo.travaglini@arm.com UnitTestOptions::GetAbsolutePathToOutputFile(); 17413481Sgiacomo.travaglini@arm.com#if GTEST_OS_WINDOWS 17513481Sgiacomo.travaglini@arm.com EXPECT_STRCASEEQ(expected_output_file.c_str(), output_file.c_str()); 17613481Sgiacomo.travaglini@arm.com#else 17713481Sgiacomo.travaglini@arm.com EXPECT_EQ(expected_output_file, output_file.c_str()); 17813481Sgiacomo.travaglini@arm.com#endif 17913481Sgiacomo.travaglini@arm.com} 18013481Sgiacomo.travaglini@arm.com 18113481Sgiacomo.travaglini@arm.comTEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithAbsoluteFile) { 18213481Sgiacomo.travaglini@arm.com#if GTEST_OS_WINDOWS 18313481Sgiacomo.travaglini@arm.com GTEST_FLAG(output) = "xml:c:\\tmp\\filename.abc"; 18413481Sgiacomo.travaglini@arm.com EXPECT_EQ(FilePath("c:\\tmp\\filename.abc").string(), 18513481Sgiacomo.travaglini@arm.com UnitTestOptions::GetAbsolutePathToOutputFile()); 18613481Sgiacomo.travaglini@arm.com#else 18713481Sgiacomo.travaglini@arm.com GTEST_FLAG(output) ="xml:/tmp/filename.abc"; 18813481Sgiacomo.travaglini@arm.com EXPECT_EQ(FilePath("/tmp/filename.abc").string(), 18913481Sgiacomo.travaglini@arm.com UnitTestOptions::GetAbsolutePathToOutputFile()); 19013481Sgiacomo.travaglini@arm.com#endif 19113481Sgiacomo.travaglini@arm.com} 19213481Sgiacomo.travaglini@arm.com 19313481Sgiacomo.travaglini@arm.comTEST_F(XmlOutputChangeDirTest, PreserveOriginalWorkingDirWithAbsolutePath) { 19413481Sgiacomo.travaglini@arm.com#if GTEST_OS_WINDOWS 19513481Sgiacomo.travaglini@arm.com const std::string path = "c:\\tmp\\"; 19613481Sgiacomo.travaglini@arm.com#else 19713481Sgiacomo.travaglini@arm.com const std::string path = "/tmp/"; 19813481Sgiacomo.travaglini@arm.com#endif 19913481Sgiacomo.travaglini@arm.com 20013481Sgiacomo.travaglini@arm.com GTEST_FLAG(output) = "xml:" + path; 20113481Sgiacomo.travaglini@arm.com const std::string expected_output_file = 20213481Sgiacomo.travaglini@arm.com path + GetCurrentExecutableName().string() + ".xml"; 20313481Sgiacomo.travaglini@arm.com const std::string& output_file = 20413481Sgiacomo.travaglini@arm.com UnitTestOptions::GetAbsolutePathToOutputFile(); 20513481Sgiacomo.travaglini@arm.com 20613481Sgiacomo.travaglini@arm.com#if GTEST_OS_WINDOWS 20713481Sgiacomo.travaglini@arm.com EXPECT_STRCASEEQ(expected_output_file.c_str(), output_file.c_str()); 20813481Sgiacomo.travaglini@arm.com#else 20913481Sgiacomo.travaglini@arm.com EXPECT_EQ(expected_output_file, output_file.c_str()); 21013481Sgiacomo.travaglini@arm.com#endif 21113481Sgiacomo.travaglini@arm.com} 21213481Sgiacomo.travaglini@arm.com 21313481Sgiacomo.travaglini@arm.com} // namespace 21413481Sgiacomo.travaglini@arm.com} // namespace internal 21513481Sgiacomo.travaglini@arm.com} // namespace testing 216