// // Copyright 2019 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // system_utils_unittest.cpp: Unit tests for ANGLE's system utility functions #include "gmock/gmock.h" #include "gtest/gtest.h" #include "common/system_utils.h" using namespace angle; namespace { // Test getting the executable path TEST(SystemUtils, ExecutablePath) { // TODO: fuchsia support. http://anglebug.com/3161 #if !defined(ANGLE_PLATFORM_FUCHSIA) std::string executablePath = GetExecutablePath(); EXPECT_NE("", executablePath); #endif } // Test getting the executable directory TEST(SystemUtils, ExecutableDir) { // TODO: fuchsia support. http://anglebug.com/3161 #if !defined(ANGLE_PLATFORM_FUCHSIA) std::string executableDir = GetExecutableDirectory(); EXPECT_NE("", executableDir); std::string executablePath = GetExecutablePath(); EXPECT_LT(executableDir.size(), executablePath.size()); EXPECT_EQ(0, strncmp(executableDir.c_str(), executablePath.c_str(), executableDir.size())); #endif } // Test setting environment variables TEST(SystemUtils, Environment) { constexpr char kEnvVarName[] = "UNITTEST_ENV_VARIABLE"; constexpr char kEnvVarValue[] = "The quick brown fox jumps over the lazy dog"; bool setEnvDone = SetEnvironmentVar(kEnvVarName, kEnvVarValue); EXPECT_TRUE(setEnvDone); std::string readback = GetEnvironmentVar(kEnvVarName); EXPECT_EQ(kEnvVarValue, readback); bool unsetEnvDone = UnsetEnvironmentVar(kEnvVarName); EXPECT_TRUE(unsetEnvDone); readback = GetEnvironmentVar(kEnvVarName); EXPECT_EQ("", readback); } #if defined(ANGLE_PLATFORM_POSIX) TEST(SystemUtils, ConcatenatePathSimple) { std::string path1 = "/this/is/path1"; std::string path2 = "this/is/path2"; std::string expected = "/this/is/path1/this/is/path2"; EXPECT_EQ(ConcatenatePath(path1, path2), expected); } TEST(SystemUtils, ConcatenatePath1Empty) { std::string path1 = ""; std::string path2 = "this/is/path2"; std::string expected = "this/is/path2"; EXPECT_EQ(ConcatenatePath(path1, path2), expected); } TEST(SystemUtils, ConcatenatePath2Empty) { std::string path1 = "/this/is/path1"; std::string path2 = ""; std::string expected = "/this/is/path1"; EXPECT_EQ(ConcatenatePath(path1, path2), expected); } TEST(SystemUtils, ConcatenatePath2FullPath) { std::string path1 = "/this/is/path1"; std::string path2 = "/this/is/path2"; std::string expected = "/this/is/path1"; EXPECT_EQ(ConcatenatePath(path1, path2), expected); } TEST(SystemUtils, ConcatenatePathRedundantSeparators) { std::string path1 = "/this/is/path1/"; std::string path2 = "this/is/path2"; std::string expected = "/this/is/path1/this/is/path2"; EXPECT_EQ(ConcatenatePath(path1, path2), expected); } TEST(SystemUtils, IsFullPath) { std::string path1 = "/this/is/path1/"; std::string path2 = "this/is/path2"; EXPECT_TRUE(IsFullPath(path1)); EXPECT_FALSE(IsFullPath(path2)); } #elif defined(ANGLE_PLATFORM_WINDOWS) TEST(SystemUtils, ConcatenatePathSimple) { std::string path1 = "C:\\this\\is\\path1"; std::string path2 = "this\\is\\path2"; std::string expected = "C:\\this\\is\\path1\\this\\is\\path2"; EXPECT_EQ(ConcatenatePath(path1, path2), expected); } TEST(SystemUtils, ConcatenatePath1Empty) { std::string path1 = ""; std::string path2 = "this\\is\\path2"; std::string expected = "this\\is\\path2"; EXPECT_EQ(ConcatenatePath(path1, path2), expected); } TEST(SystemUtils, ConcatenatePath2Empty) { std::string path1 = "C:\\this\\is\\path1"; std::string path2 = ""; std::string expected = "C:\\this\\is\\path1"; EXPECT_EQ(ConcatenatePath(path1, path2), expected); } TEST(SystemUtils, ConcatenatePath2FullPath) { std::string path1 = "C:\\this\\is\\path1"; std::string path2 = "C:\\this\\is\\path2"; std::string expected = "C:\\this\\is\\path1"; EXPECT_EQ(ConcatenatePath(path1, path2), expected); } TEST(SystemUtils, ConcatenatePathRedundantSeparators) { std::string path1 = "C:\\this\\is\\path1\\"; std::string path2 = "this\\is\\path2"; std::string expected = "C:\\this\\is\\path1\\this\\is\\path2"; EXPECT_EQ(ConcatenatePath(path1, path2), expected); } TEST(SystemUtils, ConcatenatePathRedundantSeparators2) { std::string path1 = "C:\\this\\is\\path1\\"; std::string path2 = "\\this\\is\\path2"; std::string expected = "C:\\this\\is\\path1\\this\\is\\path2"; EXPECT_EQ(ConcatenatePath(path1, path2), expected); } TEST(SystemUtils, ConcatenatePathRedundantSeparators3) { std::string path1 = "C:\\this\\is\\path1"; std::string path2 = "\\this\\is\\path2"; std::string expected = "C:\\this\\is\\path1\\this\\is\\path2"; EXPECT_EQ(ConcatenatePath(path1, path2), expected); } TEST(SystemUtils, IsFullPath) { std::string path1 = "C:\\this\\is\\path1\\"; std::string path2 = "this\\is\\path2"; EXPECT_TRUE(IsFullPath(path1)); EXPECT_FALSE(IsFullPath(path2)); } #endif } // anonymous namespace