diff --git a/spec/runtime/parser_spec.cc b/spec/runtime/parser_spec.cc index bb296e7d..a955c7d6 100644 --- a/spec/runtime/parser_spec.cc +++ b/spec/runtime/parser_spec.cc @@ -85,10 +85,6 @@ describe("Parser", [&]() { }; describe("handling errors", [&]() { - before_each([&]() { - ts_document_set_language(doc, get_test_language("json")); - }); - auto get_node_text = [&](TSNode node) { size_t start = ts_node_start_byte(node); size_t end = ts_node_end_byte(node); @@ -97,6 +93,7 @@ describe("Parser", [&]() { describe("when there is an invalid substring right before a valid token", [&]() { it("computes the error node's size and position correctly", [&]() { + ts_document_set_language(doc, get_test_language("json")); set_text(" [123, @@@@@, true]"); assert_root_node( @@ -121,6 +118,7 @@ describe("Parser", [&]() { describe("when there is an unexpected string in the middle of a token", [&]() { it("computes the error node's size and position correctly", [&]() { + ts_document_set_language(doc, get_test_language("json")); set_text(" [123, faaaaalse, true]"); assert_root_node( @@ -146,6 +144,7 @@ describe("Parser", [&]() { describe("when there is one unexpected token between two valid tokens", [&]() { it("computes the error node's size and position correctly", [&]() { + ts_document_set_language(doc, get_test_language("json")); set_text(" [123, true false, true]"); assert_root_node( @@ -164,6 +163,7 @@ describe("Parser", [&]() { describe("when there is an unexpected string at the end of a token", [&]() { it("computes the error's size and position correctly", [&]() { + ts_document_set_language(doc, get_test_language("json")); set_text(" [123, \"hi\n, true]"); assert_root_node( @@ -182,14 +182,9 @@ describe("Parser", [&]() { }); describe("handling extra tokens", [&]() { - // In the javascript example grammar, ASI works by using newlines as - // terminators in statements, but also as extra tokens. - before_each([&]() { - ts_document_set_language(doc, get_test_language("javascript")); - }); - describe("when the token appears as part of a grammar rule", [&]() { it("is incorporated into the tree", [&]() { + ts_document_set_language(doc, get_test_language("javascript")); set_text("fn()\n"); assert_root_node( @@ -199,6 +194,7 @@ describe("Parser", [&]() { describe("when the token appears somewhere else", [&]() { it("is incorporated into the tree", [&]() { + ts_document_set_language(doc, get_test_language("javascript")); set_text( "fn()\n" " .otherFn();"); @@ -214,6 +210,7 @@ describe("Parser", [&]() { describe("when several extra tokens appear in a row", [&]() { it("is incorporated into the tree", [&]() { + ts_document_set_language(doc, get_test_language("javascript")); set_text( "fn()\n\n" "// This is a comment" @@ -232,13 +229,10 @@ describe("Parser", [&]() { }); describe("editing", [&]() { - before_each([&]() { - ts_document_set_language(doc, get_test_language("javascript")); - }); - describe("inserting text", [&]() { describe("creating new tokens near the end of the input", [&]() { it("updates the parse tree and re-reads only the changed portion of the text", [&]() { + ts_document_set_language(doc, get_test_language("javascript")); set_text("x * (100 + abc);"); assert_root_node( @@ -261,6 +255,7 @@ describe("Parser", [&]() { it("updates the parse tree and re-reads only the changed portion of the input", [&]() { chunk_size = 2; + ts_document_set_language(doc, get_test_language("javascript")); set_text("123 + 456 * (10 + x);"); assert_root_node( @@ -284,7 +279,6 @@ describe("Parser", [&]() { describe("introducing an error", [&]() { it("gives the error the right size", [&]() { ts_document_set_language(doc, get_test_language("javascript")); - set_text("var x = y;"); assert_root_node( @@ -307,6 +301,7 @@ describe("Parser", [&]() { describe("into the middle of an existing token", [&]() { it("updates the parse tree", [&]() { + ts_document_set_language(doc, get_test_language("javascript")); set_text("abc * 123;"); assert_root_node( @@ -325,6 +320,7 @@ describe("Parser", [&]() { describe("at the end of an existing token", [&]() { it("updates the parse tree", [&]() { + ts_document_set_language(doc, get_test_language("javascript")); set_text("abc * 123;"); assert_root_node( @@ -343,6 +339,7 @@ describe("Parser", [&]() { describe("into a node containing a extra token", [&]() { it("updates the parse tree", [&]() { + ts_document_set_language(doc, get_test_language("javascript")); set_text("123 *\n" "// a-comment\n" "abc;"); @@ -371,6 +368,7 @@ describe("Parser", [&]() { describe("deleting text", [&]() { describe("when a critical token is removed", [&]() { it("updates the parse tree, creating an error", [&]() { + ts_document_set_language(doc, get_test_language("javascript")); set_text("123 * 456; 789 * 123;"); assert_root_node( @@ -391,7 +389,6 @@ describe("Parser", [&]() { describe("replacing text", [&]() { it("does not try to re-use nodes that are within the edited region", [&]() { ts_document_set_language(doc, get_test_language("javascript")); - set_text("{ x: (b.c) };"); assert_root_node( @@ -407,11 +404,8 @@ describe("Parser", [&]() { }); describe("with external tokens", [&]() { - before_each([&]() { - ts_document_set_language(doc, get_test_language("python")); - }); - it("maintains the external scanner's state during incremental parsing", [&]() { + ts_document_set_language(doc, get_test_language("python")); string text = dedent(R"PYTHON( if a: print b @@ -445,12 +439,9 @@ describe("Parser", [&]() { }); describe("lexing", [&]() { - before_each([&]() { - ts_document_set_language(doc, get_test_language("javascript")); - }); - describe("handling tokens containing wildcard patterns (e.g. comments)", [&]() { it("terminates them at the end of the document", [&]() { + ts_document_set_language(doc, get_test_language("javascript")); set_text("x; // this is a comment"); assert_root_node( @@ -465,6 +456,7 @@ describe("Parser", [&]() { it("recognizes UTF8 characters as single characters", [&]() { // 'ΩΩΩ — ΔΔ'; + ts_document_set_language(doc, get_test_language("javascript")); set_text("'\u03A9\u03A9\u03A9 \u2014 \u0394\u0394';"); assert_root_node(