From 90862dd18fd16cd3723d64afbd3941068a697b22 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Tue, 22 Sep 2015 21:19:19 -0700 Subject: [PATCH] Add some edit sequences to corpus tests --- spec/runtime/helpers/log_debugger.cc | 10 ++++++---- spec/runtime/helpers/log_debugger.h | 2 +- spec/runtime/language_specs.cc | 24 ++++++++++++++++++++---- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/spec/runtime/helpers/log_debugger.cc b/spec/runtime/helpers/log_debugger.cc index 0e6e62ed..a65ab333 100644 --- a/spec/runtime/helpers/log_debugger.cc +++ b/spec/runtime/helpers/log_debugger.cc @@ -1,20 +1,22 @@ #include "tree_sitter/runtime.h" #include -static void log_debug(void *data, TSDebugType type, const char *msg) { +static void log_debug(void *payload, TSDebugType type, const char *msg) { + bool include_lexing = (bool)payload; switch (type) { case TSDebugTypeParse: fprintf(stderr, "* %s\n", msg); break; case TSDebugTypeLex: - fprintf(stderr, " %s\n", msg); + if (include_lexing) + fprintf(stderr, " %s\n", msg); break; } } -TSDebugger log_debugger_make() { +TSDebugger log_debugger_make(bool include_lexing) { TSDebugger result; - result.payload = NULL; + result.payload = (void *)include_lexing; result.debug_fn = log_debug; return result; } diff --git a/spec/runtime/helpers/log_debugger.h b/spec/runtime/helpers/log_debugger.h index 09aa1b2f..0b0e0720 100644 --- a/spec/runtime/helpers/log_debugger.h +++ b/spec/runtime/helpers/log_debugger.h @@ -3,6 +3,6 @@ #include "tree_sitter/runtime.h" -TSDebugger log_debugger_make(); +TSDebugger log_debugger_make(bool include_lexing); #endif // HELPERS_LOG_DEBUGGER_H_ diff --git a/spec/runtime/language_specs.cc b/spec/runtime/language_specs.cc index 30a6f4d4..0aae5a94 100644 --- a/spec/runtime/language_specs.cc +++ b/spec/runtime/language_specs.cc @@ -35,7 +35,7 @@ describe("Languages", [&]() { describe(("The " + pair.first + " parser").c_str(), [&]() { before_each([&]() { ts_document_set_language(doc, pair.second); - // ts_document_set_debugger(doc, log_debugger_make()); + // ts_document_set_debugger(doc, log_debugger_make(true)); }); for (auto &entry : test_entries_for_language(pair.first)) { @@ -48,7 +48,7 @@ describe("Languages", [&]() { }; auto it_handles_edit_sequence = [&](string name, std::function edit_sequence){ - it(("handles " + entry.description + ": " + name).c_str(), [&]() { + it(("parses " + entry.description + ": " + name).c_str(), [&]() { input = new SpyInput(entry.input, 3); ts_document_set_input(doc, input->input()); edit_sequence(); @@ -61,7 +61,15 @@ describe("Languages", [&]() { ts_document_parse(doc); }); - it_handles_edit_sequence("one insertion, undo", [&]() { + it_handles_edit_sequence("repairing an inserted error", [&]() { + ts_document_edit(doc, input->replace(entry.input.size() / 2, 0, "%^&*")); + ts_document_parse(doc); + + ts_document_edit(doc, input->undo()); + ts_document_parse(doc); + }); + + it_handles_edit_sequence("creating and repairing an inserted error", [&]() { ts_document_parse(doc); ts_document_edit(doc, input->replace(entry.input.size() / 2, 0, "%^&*")); @@ -71,7 +79,7 @@ describe("Languages", [&]() { ts_document_parse(doc); }); - it_handles_edit_sequence("one deletion, undo", [&]() { + it_handles_edit_sequence("repairing an errant deletion", [&]() { ts_document_parse(doc); ts_document_edit(doc, input->replace(entry.input.size() / 2, 5, "")); @@ -80,6 +88,14 @@ describe("Languages", [&]() { ts_document_edit(doc, input->undo()); ts_document_parse(doc); }); + + it_handles_edit_sequence("creating and repairing an errant deletion", [&]() { + ts_document_edit(doc, input->replace(entry.input.size() / 2, 5, "")); + ts_document_parse(doc); + + ts_document_edit(doc, input->undo()); + ts_document_parse(doc); + }); } }); }