aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/cpp
diff options
context:
space:
mode:
authorGravatar ccalvarin <ccalvarin@google.com>2018-06-19 08:52:08 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-06-19 08:53:37 -0700
commitd39de3a8849974c30609a2bc190fcbba6c237143 (patch)
treed3d37483701cbcb1a93facb10e33921fbc4cf651 /src/test/cpp
parent8cf66432d4db7e6e35bfd7aab97cd8d31b75222a (diff)
Add a utility function to accept windows-style envvars in paths.
For paths passed to Bazel on the command line, the shell expands these variables, but for hardcoded defaults, we must make the library call ourselves. We do not add similar support in Posix systems, where it is less common to rely on standard path-related variables. Prerequisit for issue #4502. RELNOTES: None. PiperOrigin-RevId: 201183214
Diffstat (limited to 'src/test/cpp')
-rw-r--r--src/test/cpp/util/BUILD1
-rw-r--r--src/test/cpp/util/path_posix_test.cc11
-rw-r--r--src/test/cpp/util/path_windows_test.cc29
3 files changed, 40 insertions, 1 deletions
diff --git a/src/test/cpp/util/BUILD b/src/test/cpp/util/BUILD
index 455994f3d9..1a86b0d0c6 100644
--- a/src/test/cpp/util/BUILD
+++ b/src/test/cpp/util/BUILD
@@ -60,6 +60,7 @@ cc_test(
] + select({
"//src/conditions:windows": [
":windows_test_util",
+ "//src/main/cpp:blaze_util",
"//src/main/native/windows:lib-file",
],
"//conditions:default": [],
diff --git a/src/test/cpp/util/path_posix_test.cc b/src/test/cpp/util/path_posix_test.cc
index f1262cdda1..df79b59c1e 100644
--- a/src/test/cpp/util/path_posix_test.cc
+++ b/src/test/cpp/util/path_posix_test.cc
@@ -159,4 +159,15 @@ TEST(PathPosixTest, MakeAbsolute) {
EXPECT_EQ(MakeAbsolute(""), "");
}
+TEST(PathPosixTest, MakeAbsoluteAndResolveWindowsEnvvars) {
+ // Check that Unix-style envvars are not resolved.
+ EXPECT_EQ(MakeAbsoluteAndResolveWindowsEnvvars("$PATH"),
+ JoinPath(GetCwd(), "$PATH"));
+ EXPECT_EQ(MakeAbsoluteAndResolveWindowsEnvvars("${PATH}"),
+ JoinPath(GetCwd(), "${PATH}"));
+ // Check that Windows-style envvars are not resolved when not on Windows.
+ EXPECT_EQ(MakeAbsoluteAndResolveWindowsEnvvars("%PATH%"),
+ JoinPath(GetCwd(), "%PATH%"));
+}
+
} // namespace blaze_util
diff --git a/src/test/cpp/util/path_windows_test.cc b/src/test/cpp/util/path_windows_test.cc
index 15875603f7..c78c4ab012 100644
--- a/src/test/cpp/util/path_windows_test.cc
+++ b/src/test/cpp/util/path_windows_test.cc
@@ -20,6 +20,7 @@
#include <string>
#include "gtest/gtest.h"
+#include "src/main/cpp/blaze_util_platform.h"
#include "src/main/cpp/util/file_platform.h"
#include "src/main/cpp/util/path.h"
#include "src/main/cpp/util/path_platform.h"
@@ -298,7 +299,7 @@ TEST(PathWindowsTest, ConvertPathTest) {
EXPECT_EQ("c:\\foo\\bar", ConvertPath("c:/../foo\\BAR\\.\\"));
}
-TEST(PathWindowsTest, TestMakeAbsolute) {
+TEST(PathWindowsTest, MakeAbsolute) {
EXPECT_EQ("c:\\foo\\bar", MakeAbsolute("C:\\foo\\BAR"));
EXPECT_EQ("c:\\foo\\bar", MakeAbsolute("C:/foo/bar"));
EXPECT_EQ("c:\\foo\\bar", MakeAbsolute("C:\\foo\\bar\\"));
@@ -314,4 +315,30 @@ TEST(PathWindowsTest, TestMakeAbsolute) {
EXPECT_EQ("", MakeAbsolute(""));
}
+TEST(PathWindowsTest, MakeAbsoluteAndResolveWindowsEnvvars_WithTmpdir) {
+ // We cannot test the system-default paths like %ProgramData% because these
+ // are wiped from the test environment. TestTmpdir is set by Bazel though,
+ // so serves as a fine substitute.
+ char buf[MAX_PATH] = {0};
+ DWORD len = ::GetEnvironmentVariableA("TEST_TMPDIR", buf, MAX_PATH);
+ const std::string tmpdir = buf;
+ const std::string expected_tmpdir_bar = ConvertPath(tmpdir + "\\bar");
+
+ EXPECT_EQ(expected_tmpdir_bar,
+ MakeAbsoluteAndResolveWindowsEnvvars("%TEST_TMPDIR%\\bar"));
+ EXPECT_EQ(expected_tmpdir_bar,
+ MakeAbsoluteAndResolveWindowsEnvvars("%Test_Tmpdir%\\bar"));
+ EXPECT_EQ(expected_tmpdir_bar,
+ MakeAbsoluteAndResolveWindowsEnvvars("%test_tmpdir%\\bar"));
+ EXPECT_EQ(expected_tmpdir_bar,
+ MakeAbsoluteAndResolveWindowsEnvvars("%test_tmpdir%/bar"));
+}
+
+TEST(PathWindowsTest, MakeAbsoluteAndResolveWindowsEnvvars_LongPaths) {
+ const std::string long_path = "c:\\" + std::string(MAX_PATH, 'a');
+ blaze::SetEnv("long", long_path);
+
+ EXPECT_EQ(long_path, MakeAbsoluteAndResolveWindowsEnvvars("%long%"));
+}
+
} // namespace blaze_util