Merge "Fix REPL test parser nits" into main

This commit is contained in:
Rebecca Turner 2024-04-08 21:52:06 +00:00 committed by Gerrit Code Review
commit 3910d4aa68
4 changed files with 7 additions and 14 deletions

View file

@ -123,11 +123,6 @@ public:
{
runReplTestPath(nameBase, {});
}
void runDebuggerTest(const std::string_view & nameBase)
{
runReplTestPath(nameBase, {"--debugger"});
}
};
TEST_F(ReplSessionTest, round_trip)

View file

@ -121,7 +121,7 @@ bool TestSession::readOutThen(ReadOutThenCallback cb)
bool TestSession::waitForPrompt()
{
bool notEof = readOutThen([&](std::span<char> s) -> ReadOutThenCallbackResult {
bool notEof = readOutThen([&](std::span<const char> s) -> ReadOutThenCallbackResult {
bool foundPrompt = false;
for (auto ch : s) {
@ -147,7 +147,7 @@ bool TestSession::waitForPrompt()
void TestSession::wait()
{
readOutThen([&](std::span<char> s) {
readOutThen([&](std::span<const char> s) {
for (auto ch : s) {
eater.feed(ch, [&](char c) {
outputParser.feed(c);

View file

@ -76,7 +76,7 @@ private:
void wait();
enum class ReadOutThenCallbackResult { Stop, Continue };
using ReadOutThenCallback = std::function<ReadOutThenCallbackResult(std::span<char>)>;
using ReadOutThenCallback = std::function<ReadOutThenCallbackResult(std::span<const char>)>;
/** Reads some chunks of output, calling the callback provided for each
* chunk and stopping if it returns Stop.
*

View file

@ -35,7 +35,7 @@ struct Parser
: input(input)
, rest(this->input)
, prompt(config.prompt)
, indentString(std::string(config.indent, ' '))
, indentString(config.indent, ' ')
, lastWasOutput(false)
, syntax{}
{
@ -260,12 +260,11 @@ struct Parser
std::vector<Node> newSyntax;
auto shouldStart = true;
for (auto it = syntax.begin(); it != syntax.end(); ++it) {
Node node = std::move(*it);
for (auto & node : syntax) {
std::visit(
overloaded{
[&](Args & e) {
auto split = shell_split(std::string(e.text));
auto split = shell_split(e.text);
args.insert(args.end(), split.begin(), split.end());
},
[&](ShouldStart & e) { shouldStart = e.shouldStart; },
@ -293,8 +292,7 @@ auto tidySyntax(View syntax) -> std::vector<Node>
auto lastWasCommand = true;
std::vector<Node> newSyntax;
for (auto it = syntax.begin(); it != syntax.end(); ++it) {
Node node = *it;
for (auto & node : syntax) {
// Only compare `Command` and `Output` nodes.
if (std::visit([&](auto && e) { return !e.shouldCompare(); }, node)) {
continue;