55 lines
1.6 KiB
C++
55 lines
1.6 KiB
C++
#include "test_helper.h"
|
|
#include "runtime/alloc.h"
|
|
#include "helpers/load_language.h"
|
|
|
|
START_TEST
|
|
|
|
describe("Language", []() {
|
|
describe("symbol_name(TSSymbol symbol)", [&]() {
|
|
it("returns the correct name for aliased nodes", [&]() {
|
|
TSCompileResult compile_result = ts_compile_grammar(R"JSON({
|
|
"name": "aliased_rules",
|
|
|
|
"rules": {
|
|
"a": {
|
|
"type": "ALIAS",
|
|
"value": "c",
|
|
"named": true,
|
|
"content": {
|
|
"type": "SYMBOL",
|
|
"name": "b"
|
|
}
|
|
},
|
|
|
|
"b": {
|
|
"type": "STRING",
|
|
"value": "b"
|
|
}
|
|
}
|
|
})JSON");
|
|
|
|
TSParser *parser = ts_parser_new();
|
|
const TSLanguage *language = load_test_language("aliased_rules", compile_result);
|
|
ts_parser_set_language(parser, language);
|
|
TSTree *tree = ts_parser_parse_string(parser, nullptr, "b", 1);
|
|
|
|
TSNode root_node = ts_tree_root_node(tree);
|
|
char *string = ts_node_string(root_node);
|
|
AssertThat(string, Equals("(a (c))"));
|
|
|
|
TSNode aliased_node = ts_node_child(root_node, 0);
|
|
AssertThat(ts_node_type(aliased_node), Equals("c"));
|
|
|
|
TSSymbol aliased_symbol = ts_node_symbol(aliased_node);
|
|
AssertThat(ts_language_symbol_count(language), IsGreaterThan(aliased_symbol));
|
|
AssertThat(ts_language_symbol_name(language, aliased_symbol), Equals("c"));
|
|
AssertThat(ts_language_symbol_type(language, aliased_symbol), Equals(TSSymbolTypeRegular));
|
|
|
|
ts_free(string);
|
|
ts_parser_delete(parser);
|
|
ts_tree_delete(tree);
|
|
});
|
|
});
|
|
});
|
|
|
|
END_TEST
|