labath added a comment. Well.. I would say that the most user-facing aspect is the /action/ that happens after the user pressed the appropriate key. But at the end of the day, that doesn't matter that much -- we can (and do) test non-user-facing interfaces as well. But those tests make most sense when there is some complex logic in the code. Making sure that a table does not change by keeping another copy of the table is the very definition of a change-detector test (https://testing.googleblog.com/2015/01/testing-on-toilet-change-detector-tests.html). Like, it may have some value while you're doing the refactoring, but that value quickly drops to zero (or even becomes negative) after you complete it.
If it was a clean test, I could say "whatever, we can delete it if it becomes a burden" , but I can see several problems with the test (and the friend declaration is not the biggest of them), and I don't think it's worth trying to fix those. If you really want to work on that, then I'm not going to stop you, but I would be also perfectly happy to approve a patch that turns the keybindings into a table without an additional test. ================ Comment at: lldb/unittests/Editline/EditlineTest.cpp:133-139 + // We have to set the output stream we pass to Editline as not using + // buffered I/O. Otherwise we are missing editline's output when we + // close the stream in the keybinding test (i.e. the EOF comes + // before data previously written to the stream by editline). This + // behavior isn't as I understand the spec becuse fclose should + // flush the stream, but my best guess is that it's some unexpected + // interaction with stream I/O and ptys. ---------------- I find this hard to believe. I think it's more likely that this is working around some problem in the test itself. I can't say what is the precise problem without more investigation, but for example the synchronization around testOutputBuffer seems inadequate. `GetEditlineOutput` could deadlock if the read thread reads the newline before it reaches the `wait` call. It also does not handle spurious wakeups. And the accesses to testOutputBuffer are completely thread-unsafe. ================ Comment at: lldb/unittests/Editline/EditlineTest.cpp:235 - int ch; + char ch; while ((ch = fgetc(output_file)) != EOF) { ---------------- This isn't right. The return type of fgetc is deliberately not `char` so that `EOF` does not conflict with an actual character. ================ Comment at: lldb/unittests/Editline/EditlineTest.cpp:345 + // mapped back to a specific input. + const std::string testNumber; + // Whether this keyboard shortcut is only bound in multi-line mode. ---------------- You already have a const on the variable declaration. You don't need to put one on every member as well. ================ Comment at: lldb/unittests/Editline/EditlineTest.cpp:352-359 + // This is initialized to the keySequence by default, but gtest has + // some errors when the test name as created by the overloaded + // operator<< has embedded newlines. This is even true when we + // specify a custom test name function, as we do below when we + // instantiate the test case. In cases where the keyboard shortcut + // has a newline or carriage return, this field in the struct can be + // set to something that is printable. ---------------- Why not just do the replacements in operator<< ? ================ Comment at: lldb/unittests/Editline/EditlineTest.cpp:454-455 + + ASSERT_THAT(output, ContainsRegex(editlineExpectedOutputRegex(kbtv))) + << "Key sequence was not bound to expected command name."; +} ---------------- Why not just `Contains(kbtv)`? It doesn't look like you're making use of the regex functionality. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D115126/new/ https://reviews.llvm.org/D115126 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits