|
@@ -48,7 +48,6 @@
|
|
|
|
|
|
#include <google/protobuf/stubs/io_win32.h>
|
|
#include <google/protobuf/stubs/io_win32.h>
|
|
#include <google/protobuf/stubs/scoped_ptr.h>
|
|
#include <google/protobuf/stubs/scoped_ptr.h>
|
|
-#include <google/protobuf/testing/googletest.h>
|
|
|
|
#include <gtest/gtest.h>
|
|
#include <gtest/gtest.h>
|
|
|
|
|
|
#include <memory>
|
|
#include <memory>
|
|
@@ -89,62 +88,43 @@ void StripTrailingSlashes(string* str) {
|
|
for (; i >= 0 && ((*str)[i] == '/' || (*str)[i] == '\\'); --i) {}
|
|
for (; i >= 0 && ((*str)[i] == '/' || (*str)[i] == '\\'); --i) {}
|
|
str->resize(i+1);
|
|
str->resize(i+1);
|
|
}
|
|
}
|
|
-} // namespace
|
|
|
|
|
|
|
|
-void IoWin32Test::SetUp() {
|
|
|
|
- test_tmpdir = string(TestTempDir());
|
|
|
|
- wtest_tmpdir.clear();
|
|
|
|
- if (test_tmpdir.empty()) {
|
|
|
|
- const char* test_tmpdir_env = getenv("TEST_TMPDIR");
|
|
|
|
- if (test_tmpdir_env != NULL && *test_tmpdir_env) {
|
|
|
|
- test_tmpdir = string(test_tmpdir_env);
|
|
|
|
- }
|
|
|
|
|
|
+bool GetEnvVar(const char* name, string* result) {
|
|
|
|
+ DWORD size = ::GetEnvironmentVariableA(name, NULL, 0);
|
|
|
|
+ if (size > 0 && GetLastError() != ERROR_ENVVAR_NOT_FOUND) {
|
|
|
|
+ scoped_array<char> str(new char[size]);
|
|
|
|
+ ::GetEnvironmentVariableA(name, str.get(), size);
|
|
|
|
+ result->assign(str.get());
|
|
|
|
+ return true;
|
|
|
|
+ } else {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
|
|
- // Only Bazel defines TEST_TMPDIR, CMake does not, so look for other
|
|
|
|
- // suitable environment variables.
|
|
|
|
- if (test_tmpdir.empty()) {
|
|
|
|
- static const char* names[] = {"TEMP", "TMP"};
|
|
|
|
- for (int i = 0; i < sizeof(names)/sizeof(names[0]); ++i) {
|
|
|
|
- const char* name = names[i];
|
|
|
|
- test_tmpdir_env = getenv(name);
|
|
|
|
- if (test_tmpdir_env != NULL && *test_tmpdir_env) {
|
|
|
|
- test_tmpdir = string(test_tmpdir_env);
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+} // namespace
|
|
|
|
|
|
- // No other temp directory was found. Use the current director
|
|
|
|
- if (test_tmpdir.empty()) {
|
|
|
|
- char buffer[MAX_PATH];
|
|
|
|
- // Use GetCurrentDirectoryA instead of GetCurrentDirectoryW, because the
|
|
|
|
- // current working directory must always be shorter than MAX_PATH, even
|
|
|
|
- // with
|
|
|
|
- // "\\?\" prefix (except on Windows 10 version 1607 and beyond, after
|
|
|
|
- // opting in to long paths by default [1]).
|
|
|
|
- //
|
|
|
|
- // [1] https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath
|
|
|
|
- DWORD result = ::GetCurrentDirectoryA(MAX_PATH, buffer);
|
|
|
|
- if (result > 0) {
|
|
|
|
- test_tmpdir = string(buffer);
|
|
|
|
- } else {
|
|
|
|
- // Using assertions in SetUp/TearDown seems to confuse the test
|
|
|
|
- // framework, so just leave the member variables empty in case of
|
|
|
|
- // failure.
|
|
|
|
- GOOGLE_CHECK_OK(false);
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+void IoWin32Test::SetUp() {
|
|
|
|
+ string tmp;
|
|
|
|
+ bool ok = false;
|
|
|
|
+ if (!ok) {
|
|
|
|
+ ok = GetEnvVar("TEST_TMPDIR", &tmp);
|
|
|
|
+ }
|
|
|
|
+ if (!ok) {
|
|
|
|
+ ok = GetEnvVar("TEMP", &tmp);
|
|
|
|
+ }
|
|
|
|
+ if (!ok) {
|
|
|
|
+ ok = GetEnvVar("TMP", &tmp);
|
|
|
|
+ }
|
|
|
|
+ if (!ok || tmp.empty()) {
|
|
|
|
+ FAIL();
|
|
}
|
|
}
|
|
|
|
|
|
- StripTrailingSlashes(&test_tmpdir);
|
|
|
|
- test_tmpdir += "\\io_win32_unittest.tmp";
|
|
|
|
|
|
|
|
- // CreateDirectoryA's limit is 248 chars, see MSDN.
|
|
|
|
- // https://msdn.microsoft.com/en-us/library/windows/desktop/aa363855(v=vs.85).aspx
|
|
|
|
|
|
+ StripTrailingSlashes(&tmp);
|
|
|
|
+ test_tmpdir = tmp + "\\io_win32_unittest.tmp";
|
|
wtest_tmpdir = testonly_path_to_winpath(test_tmpdir);
|
|
wtest_tmpdir = testonly_path_to_winpath(test_tmpdir);
|
|
if (!DeleteAllUnder(wtest_tmpdir) || !CreateAllUnder(wtest_tmpdir)) {
|
|
if (!DeleteAllUnder(wtest_tmpdir) || !CreateAllUnder(wtest_tmpdir)) {
|
|
- GOOGLE_CHECK_OK(false);
|
|
|
|
|
|
+ FAIL();
|
|
test_tmpdir.clear();
|
|
test_tmpdir.clear();
|
|
wtest_tmpdir.clear();
|
|
wtest_tmpdir.clear();
|
|
}
|
|
}
|