aganea created this revision. aganea added reviewers: amccarth, labath. Herald added a reviewer: JDevlieghere. Herald added a project: LLDB. Herald added a subscriber: lldb-commits. aganea requested review of this revision.
This patch fixes a few issues seen when running `ninja check-lldb` in a Release build: - Some binaries couldn't be found (such as lldb-vscode.exe), because `.exe` wasn't appended to the file name. - Many tests used to fail since the OS error messages are not emitted in English, because of our installed French locale. - Also, because of our codepage being Windows-1252, python failed to decode the messages. After this patch, all tests pass with VS2017. When building with VS2019 or Clang 10, the following tests still //do not pass//: lldb-api :: python_api/lldbutil/iter/TestLLDBIterator.py lldb-shell :: SymbolFile/PDB/enums-layout.test lldb-shell :: SymbolFile/PDB/typedefs.test lldb-unit :: tools/lldb-server/tests/./LLDBServerTests.exe/StandardStartupTest.TestStopReplyContainsThreadPcs For the first three tests above, this has to do with the debug info not being emitted as expected. I'm not sure about the last one. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D88975 Files: lldb/packages/Python/lldbsuite/test/dotest.py lldb/packages/Python/lldbsuite/test_event/build_exception.py lldb/test/API/commands/target/basic/TestTargetCommand.py lldb/unittests/Utility/StatusTest.cpp Index: lldb/unittests/Utility/StatusTest.cpp =================================================================== --- lldb/unittests/Utility/StatusTest.cpp +++ lldb/unittests/Utility/StatusTest.cpp @@ -10,7 +10,7 @@ #include "gtest/gtest.h" #ifdef _WIN32 -#include <winerror.h> +#include <windows.h> #endif using namespace lldb_private; @@ -71,6 +71,14 @@ EXPECT_FALSE(success.ToError()); EXPECT_TRUE(success.Success()); + WCHAR name[128]{}; + GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT, LOCALE_SNAME, (LPWSTR)&name, + sizeof(name) / sizeof(WCHAR)); + // Skip the following tests on non-English, non-US, locales because the + // formatted messages will be different. + if (wcscmp(L"en-US", name) != 0) + return; + auto s = Status(ERROR_ACCESS_DENIED, ErrorType::eErrorTypeWin32); EXPECT_TRUE(s.Fail()); EXPECT_STREQ("Access is denied. ", s.AsCString()); Index: lldb/test/API/commands/target/basic/TestTargetCommand.py =================================================================== --- lldb/test/API/commands/target/basic/TestTargetCommand.py +++ lldb/test/API/commands/target/basic/TestTargetCommand.py @@ -353,7 +353,7 @@ @no_debug_info_test def test_target_create_nonexistent_core_file(self): self.expect("target create -c doesntexist", error=True, - patterns=["Cannot open 'doesntexist'", ": (No such file or directory|The system cannot find the file specified)"]) + patterns=["Cannot open 'doesntexist'", ": (No such file or directory|The system cannot find the file specified|Le fichier sp\udce9cifi\udce9 est introuvable)"]) # Write only files don't seem to be supported on Windows. @skipIfWindows @@ -368,7 +368,7 @@ @no_debug_info_test def test_target_create_nonexistent_sym_file(self): self.expect("target create -s doesntexist doesntexisteither", error=True, - patterns=["Cannot open '", ": (No such file or directory|The system cannot find the file specified)"]) + patterns=["Cannot open '", ": (No such file or directory|The system cannot find the file specified|Le fichier sp\udce9cifi\udce9 est introuvable)"]) @skipIfWindows @no_debug_info_test Index: lldb/packages/Python/lldbsuite/test_event/build_exception.py =================================================================== --- lldb/packages/Python/lldbsuite/test_event/build_exception.py +++ lldb/packages/Python/lldbsuite/test_event/build_exception.py @@ -12,4 +12,4 @@ @staticmethod def format_build_error(command, command_output): return "Error when building test subject.\n\nBuild Command:\n{}\n\nBuild Command Output:\n{}".format( - command, command_output.decode("utf-8")) + command, command_output.decode("utf-8", errors='ignore')) Index: lldb/packages/Python/lldbsuite/test/dotest.py =================================================================== --- lldb/packages/Python/lldbsuite/test/dotest.py +++ lldb/packages/Python/lldbsuite/test/dotest.py @@ -52,6 +52,9 @@ """Returns true if fpath is an executable.""" if fpath == None: return False + if sys.platform == 'win32': + if not fpath.endswith(".exe"): + fpath += ".exe" return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
Index: lldb/unittests/Utility/StatusTest.cpp =================================================================== --- lldb/unittests/Utility/StatusTest.cpp +++ lldb/unittests/Utility/StatusTest.cpp @@ -10,7 +10,7 @@ #include "gtest/gtest.h" #ifdef _WIN32 -#include <winerror.h> +#include <windows.h> #endif using namespace lldb_private; @@ -71,6 +71,14 @@ EXPECT_FALSE(success.ToError()); EXPECT_TRUE(success.Success()); + WCHAR name[128]{}; + GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT, LOCALE_SNAME, (LPWSTR)&name, + sizeof(name) / sizeof(WCHAR)); + // Skip the following tests on non-English, non-US, locales because the + // formatted messages will be different. + if (wcscmp(L"en-US", name) != 0) + return; + auto s = Status(ERROR_ACCESS_DENIED, ErrorType::eErrorTypeWin32); EXPECT_TRUE(s.Fail()); EXPECT_STREQ("Access is denied. ", s.AsCString()); Index: lldb/test/API/commands/target/basic/TestTargetCommand.py =================================================================== --- lldb/test/API/commands/target/basic/TestTargetCommand.py +++ lldb/test/API/commands/target/basic/TestTargetCommand.py @@ -353,7 +353,7 @@ @no_debug_info_test def test_target_create_nonexistent_core_file(self): self.expect("target create -c doesntexist", error=True, - patterns=["Cannot open 'doesntexist'", ": (No such file or directory|The system cannot find the file specified)"]) + patterns=["Cannot open 'doesntexist'", ": (No such file or directory|The system cannot find the file specified|Le fichier sp\udce9cifi\udce9 est introuvable)"]) # Write only files don't seem to be supported on Windows. @skipIfWindows @@ -368,7 +368,7 @@ @no_debug_info_test def test_target_create_nonexistent_sym_file(self): self.expect("target create -s doesntexist doesntexisteither", error=True, - patterns=["Cannot open '", ": (No such file or directory|The system cannot find the file specified)"]) + patterns=["Cannot open '", ": (No such file or directory|The system cannot find the file specified|Le fichier sp\udce9cifi\udce9 est introuvable)"]) @skipIfWindows @no_debug_info_test Index: lldb/packages/Python/lldbsuite/test_event/build_exception.py =================================================================== --- lldb/packages/Python/lldbsuite/test_event/build_exception.py +++ lldb/packages/Python/lldbsuite/test_event/build_exception.py @@ -12,4 +12,4 @@ @staticmethod def format_build_error(command, command_output): return "Error when building test subject.\n\nBuild Command:\n{}\n\nBuild Command Output:\n{}".format( - command, command_output.decode("utf-8")) + command, command_output.decode("utf-8", errors='ignore')) Index: lldb/packages/Python/lldbsuite/test/dotest.py =================================================================== --- lldb/packages/Python/lldbsuite/test/dotest.py +++ lldb/packages/Python/lldbsuite/test/dotest.py @@ -52,6 +52,9 @@ """Returns true if fpath is an executable.""" if fpath == None: return False + if sys.platform == 'win32': + if not fpath.endswith(".exe"): + fpath += ".exe" return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits