Remove nested before_each's in Parser spec

This commit is contained in:
Max Brunsfeld 2016-12-21 11:31:28 -08:00
parent 34a65f588d
commit 4fd7b0e55d

View file

@ -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(