Unify TextServer built-in module and GDExtension code.

This commit is contained in:
bruvzg 2022-02-13 14:41:29 +02:00
parent 178961a6dc
commit f19cd44346
No known key found for this signature in database
GPG key ID: 7960FCF39844EC38
49 changed files with 4658 additions and 3126 deletions

View file

@ -671,10 +671,6 @@ void add_exposed_classes(Context &r_context) {
} else {
exposed_class.methods.push_back(method);
}
if (method.is_virtual) {
TEST_COND(String(method.name)[0] != '_', "Virtual method ", String(method.name), " does not start with underscore.");
}
}
// Add signals

View file

@ -2901,291 +2901,293 @@ TEST_CASE("[SceneTree][CodeEdit] completion") {
}
SUBCASE("[CodeEdit] autocomplete completion") {
CHECK(code_edit->get_code_completion_selected_index() == -1);
code_edit->set_code_completion_enabled(true);
CHECK(code_edit->get_code_completion_selected_index() == -1);
if (TS->has_feature(TextServer::FEATURE_FONT_DYNAMIC) && TS->has_feature(TextServer::FEATURE_SIMPLE_LAYOUT)) {
CHECK(code_edit->get_code_completion_selected_index() == -1);
code_edit->set_code_completion_enabled(true);
CHECK(code_edit->get_code_completion_selected_index() == -1);
code_edit->update_code_completion_options();
code_edit->set_code_completion_selected_index(1);
CHECK(code_edit->get_code_completion_selected_index() == -1);
CHECK(code_edit->get_code_completion_option(0).size() == 0);
CHECK(code_edit->get_code_completion_options().size() == 0);
code_edit->update_code_completion_options();
code_edit->set_code_completion_selected_index(1);
CHECK(code_edit->get_code_completion_selected_index() == -1);
CHECK(code_edit->get_code_completion_option(0).size() == 0);
CHECK(code_edit->get_code_completion_options().size() == 0);
/* Adding does not update the list. */
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_VARIABLE, "item_0.", "item_0");
/* Adding does not update the list. */
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_VARIABLE, "item_0.", "item_0");
code_edit->set_code_completion_selected_index(1);
CHECK(code_edit->get_code_completion_selected_index() == -1);
CHECK(code_edit->get_code_completion_option(0).size() == 0);
CHECK(code_edit->get_code_completion_options().size() == 0);
code_edit->set_code_completion_selected_index(1);
CHECK(code_edit->get_code_completion_selected_index() == -1);
CHECK(code_edit->get_code_completion_option(0).size() == 0);
CHECK(code_edit->get_code_completion_options().size() == 0);
/* After update, pending add should not be counted, */
/* also does not work on col 0 */
code_edit->insert_text_at_caret("i");
code_edit->update_code_completion_options();
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0", Color(1, 0, 0), RES(), Color(1, 0, 0));
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_VARIABLE, "item_1.", "item_1");
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_VARIABLE, "item_2.", "item_2");
/* After update, pending add should not be counted, */
/* also does not work on col 0 */
code_edit->insert_text_at_caret("i");
code_edit->update_code_completion_options();
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0", Color(1, 0, 0), RES(), Color(1, 0, 0));
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_VARIABLE, "item_1.", "item_1");
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_VARIABLE, "item_2.", "item_2");
ERR_PRINT_OFF;
code_edit->set_code_completion_selected_index(1);
ERR_PRINT_ON;
CHECK(code_edit->get_code_completion_selected_index() == 0);
CHECK(code_edit->get_code_completion_option(0).size() == 6);
CHECK(code_edit->get_code_completion_options().size() == 1);
ERR_PRINT_OFF;
code_edit->set_code_completion_selected_index(1);
ERR_PRINT_ON;
CHECK(code_edit->get_code_completion_selected_index() == 0);
CHECK(code_edit->get_code_completion_option(0).size() == 6);
CHECK(code_edit->get_code_completion_options().size() == 1);
/* Check cancel closes completion. */
SEND_GUI_ACTION(code_edit, "ui_cancel");
CHECK(code_edit->get_code_completion_selected_index() == -1);
/* Check cancel closes completion. */
SEND_GUI_ACTION(code_edit, "ui_cancel");
CHECK(code_edit->get_code_completion_selected_index() == -1);
code_edit->update_code_completion_options();
CHECK(code_edit->get_code_completion_selected_index() == 0);
code_edit->set_code_completion_selected_index(1);
CHECK(code_edit->get_code_completion_selected_index() == 1);
CHECK(code_edit->get_code_completion_option(0).size() == 6);
CHECK(code_edit->get_code_completion_options().size() == 3);
code_edit->update_code_completion_options();
CHECK(code_edit->get_code_completion_selected_index() == 0);
code_edit->set_code_completion_selected_index(1);
CHECK(code_edit->get_code_completion_selected_index() == 1);
CHECK(code_edit->get_code_completion_option(0).size() == 6);
CHECK(code_edit->get_code_completion_options().size() == 3);
/* Check data. */
Dictionary option = code_edit->get_code_completion_option(0);
CHECK((int)option["kind"] == (int)CodeEdit::CodeCompletionKind::KIND_CLASS);
CHECK(option["display_text"] == "item_0.");
CHECK(option["insert_text"] == "item_0");
CHECK(option["font_color"] == Color(1, 0, 0));
CHECK(option["icon"] == RES());
CHECK(option["default_value"] == Color(1, 0, 0));
/* Check data. */
Dictionary option = code_edit->get_code_completion_option(0);
CHECK((int)option["kind"] == (int)CodeEdit::CodeCompletionKind::KIND_CLASS);
CHECK(option["display_text"] == "item_0.");
CHECK(option["insert_text"] == "item_0");
CHECK(option["font_color"] == Color(1, 0, 0));
CHECK(option["icon"] == RES());
CHECK(option["default_value"] == Color(1, 0, 0));
/* Set size for mouse input. */
code_edit->set_size(Size2(100, 100));
/* Set size for mouse input. */
code_edit->set_size(Size2(100, 100));
/* Check input. */
SEND_GUI_ACTION(code_edit, "ui_end");
CHECK(code_edit->get_code_completion_selected_index() == 2);
/* Check input. */
SEND_GUI_ACTION(code_edit, "ui_end");
CHECK(code_edit->get_code_completion_selected_index() == 2);
SEND_GUI_ACTION(code_edit, "ui_home");
CHECK(code_edit->get_code_completion_selected_index() == 0);
SEND_GUI_ACTION(code_edit, "ui_home");
CHECK(code_edit->get_code_completion_selected_index() == 0);
SEND_GUI_ACTION(code_edit, "ui_page_down");
CHECK(code_edit->get_code_completion_selected_index() == 2);
SEND_GUI_ACTION(code_edit, "ui_page_down");
CHECK(code_edit->get_code_completion_selected_index() == 2);
SEND_GUI_ACTION(code_edit, "ui_page_up");
CHECK(code_edit->get_code_completion_selected_index() == 0);
SEND_GUI_ACTION(code_edit, "ui_page_up");
CHECK(code_edit->get_code_completion_selected_index() == 0);
SEND_GUI_ACTION(code_edit, "ui_up");
CHECK(code_edit->get_code_completion_selected_index() == 2);
SEND_GUI_ACTION(code_edit, "ui_up");
CHECK(code_edit->get_code_completion_selected_index() == 2);
SEND_GUI_ACTION(code_edit, "ui_down");
CHECK(code_edit->get_code_completion_selected_index() == 0);
SEND_GUI_ACTION(code_edit, "ui_down");
CHECK(code_edit->get_code_completion_selected_index() == 0);
SEND_GUI_KEY_EVENT(code_edit, Key::T);
CHECK(code_edit->get_code_completion_selected_index() == 0);
SEND_GUI_KEY_EVENT(code_edit, Key::T);
CHECK(code_edit->get_code_completion_selected_index() == 0);
SEND_GUI_ACTION(code_edit, "ui_left");
CHECK(code_edit->get_code_completion_selected_index() == 0);
SEND_GUI_ACTION(code_edit, "ui_left");
CHECK(code_edit->get_code_completion_selected_index() == 0);
SEND_GUI_ACTION(code_edit, "ui_right");
CHECK(code_edit->get_code_completion_selected_index() == 0);
SEND_GUI_ACTION(code_edit, "ui_right");
CHECK(code_edit->get_code_completion_selected_index() == 0);
SEND_GUI_ACTION(code_edit, "ui_text_backspace");
CHECK(code_edit->get_code_completion_selected_index() == 0);
SEND_GUI_ACTION(code_edit, "ui_text_backspace");
CHECK(code_edit->get_code_completion_selected_index() == 0);
Point2 caret_pos = code_edit->get_caret_draw_pos();
caret_pos.y -= code_edit->get_line_height();
SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MouseButton::WHEEL_DOWN, MouseButton::NONE);
CHECK(code_edit->get_code_completion_selected_index() == 1);
Point2 caret_pos = code_edit->get_caret_draw_pos();
caret_pos.y -= code_edit->get_line_height();
SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MouseButton::WHEEL_DOWN, MouseButton::NONE);
CHECK(code_edit->get_code_completion_selected_index() == 1);
SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MouseButton::WHEEL_UP, MouseButton::NONE);
CHECK(code_edit->get_code_completion_selected_index() == 0);
SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MouseButton::WHEEL_UP, MouseButton::NONE);
CHECK(code_edit->get_code_completion_selected_index() == 0);
/* Single click selects. */
SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MouseButton::LEFT, MouseButton::MASK_LEFT);
CHECK(code_edit->get_code_completion_selected_index() == 2);
/* Single click selects. */
SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MouseButton::LEFT, MouseButton::MASK_LEFT);
CHECK(code_edit->get_code_completion_selected_index() == 2);
/* Double click inserts. */
SEND_GUI_DOUBLE_CLICK(code_edit, caret_pos);
CHECK(code_edit->get_code_completion_selected_index() == -1);
CHECK(code_edit->get_line(0) == "item_2");
/* Double click inserts. */
SEND_GUI_DOUBLE_CLICK(code_edit, caret_pos);
CHECK(code_edit->get_code_completion_selected_index() == -1);
CHECK(code_edit->get_line(0) == "item_2");
code_edit->set_auto_brace_completion_enabled(false);
code_edit->set_auto_brace_completion_enabled(false);
/* Does nothing in readonly. */
code_edit->undo();
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0");
code_edit->update_code_completion_options();
code_edit->set_editable(false);
code_edit->confirm_code_completion();
code_edit->set_editable(true);
CHECK(code_edit->get_line(0) == "i");
/* Does nothing in readonly. */
code_edit->undo();
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0");
code_edit->update_code_completion_options();
code_edit->set_editable(false);
code_edit->confirm_code_completion();
code_edit->set_editable(true);
CHECK(code_edit->get_line(0) == "i");
/* Replace */
code_edit->clear();
code_edit->insert_text_at_caret("item_1 test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0 test");
/* Replace */
code_edit->clear();
code_edit->insert_text_at_caret("item_1 test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0 test");
/* Replace string. */
code_edit->clear();
code_edit->insert_text_at_caret("\"item_1 test\"");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "\"item_0\"");
/* Replace string. */
code_edit->clear();
code_edit->insert_text_at_caret("\"item_1 test\"");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "\"item_0\"");
/* Normal replace if no end is given. */
code_edit->clear();
code_edit->insert_text_at_caret("\"item_1 test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "\"item_0\" test");
/* Normal replace if no end is given. */
code_edit->clear();
code_edit->insert_text_at_caret("\"item_1 test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "\"item_0\" test");
/* Insert at completion. */
code_edit->clear();
code_edit->insert_text_at_caret("item_1 test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_accept");
CHECK(code_edit->get_line(0) == "item_01 test");
/* Insert at completion. */
code_edit->clear();
code_edit->insert_text_at_caret("item_1 test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_accept");
CHECK(code_edit->get_line(0) == "item_01 test");
/* Insert at completion with string should have same output. */
code_edit->clear();
code_edit->insert_text_at_caret("\"item_1 test\"");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_accept");
CHECK(code_edit->get_line(0) == "\"item_0\"1 test\"");
/* Insert at completion with string should have same output. */
code_edit->clear();
code_edit->insert_text_at_caret("\"item_1 test\"");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0.", "item_0");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_accept");
CHECK(code_edit->get_line(0) == "\"item_0\"1 test\"");
/* Merge symbol at end on insert text. */
/* End on completion entry. */
code_edit->clear();
code_edit->insert_text_at_caret("item_1 test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0(", "item_0(");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0( test");
CHECK(code_edit->get_caret_column() == 7);
/* Merge symbol at end on insert text. */
/* End on completion entry. */
code_edit->clear();
code_edit->insert_text_at_caret("item_1 test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0(", "item_0(");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0( test");
CHECK(code_edit->get_caret_column() == 7);
/* End of text*/
code_edit->clear();
code_edit->insert_text_at_caret("item_1( test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0", "item_0");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0( test");
CHECK(code_edit->get_caret_column() == 6);
/* End of text*/
code_edit->clear();
code_edit->insert_text_at_caret("item_1( test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0", "item_0");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0( test");
CHECK(code_edit->get_caret_column() == 6);
/* End of both. */
code_edit->clear();
code_edit->insert_text_at_caret("item_1( test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0(", "item_0(");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0( test");
CHECK(code_edit->get_caret_column() == 7);
/* End of both. */
code_edit->clear();
code_edit->insert_text_at_caret("item_1( test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0(", "item_0(");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0( test");
CHECK(code_edit->get_caret_column() == 7);
/* Full set. */
/* End on completion entry. */
code_edit->clear();
code_edit->insert_text_at_caret("item_1 test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0()", "item_0()");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0() test");
CHECK(code_edit->get_caret_column() == 8);
/* Full set. */
/* End on completion entry. */
code_edit->clear();
code_edit->insert_text_at_caret("item_1 test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0()", "item_0()");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0() test");
CHECK(code_edit->get_caret_column() == 8);
/* End of text*/
code_edit->clear();
code_edit->insert_text_at_caret("item_1() test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0", "item_0");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0() test");
CHECK(code_edit->get_caret_column() == 6);
/* End of text*/
code_edit->clear();
code_edit->insert_text_at_caret("item_1() test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0", "item_0");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0() test");
CHECK(code_edit->get_caret_column() == 6);
/* End of both. */
code_edit->clear();
code_edit->insert_text_at_caret("item_1() test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0()", "item_0()");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0() test");
CHECK(code_edit->get_caret_column() == 8);
/* End of both. */
code_edit->clear();
code_edit->insert_text_at_caret("item_1() test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0()", "item_0()");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0() test");
CHECK(code_edit->get_caret_column() == 8);
/* Autobrace completion. */
code_edit->set_auto_brace_completion_enabled(true);
/* Autobrace completion. */
code_edit->set_auto_brace_completion_enabled(true);
/* End on completion entry. */
code_edit->clear();
code_edit->insert_text_at_caret("item_1 test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0(", "item_0(");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0() test");
CHECK(code_edit->get_caret_column() == 7);
/* End on completion entry. */
code_edit->clear();
code_edit->insert_text_at_caret("item_1 test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0(", "item_0(");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0() test");
CHECK(code_edit->get_caret_column() == 7);
/* End of text*/
code_edit->clear();
code_edit->insert_text_at_caret("item_1( test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0", "item_0");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0( test");
CHECK(code_edit->get_caret_column() == 6);
/* End of text*/
code_edit->clear();
code_edit->insert_text_at_caret("item_1( test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0", "item_0");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0( test");
CHECK(code_edit->get_caret_column() == 6);
/* End of both. */
code_edit->clear();
code_edit->insert_text_at_caret("item_1( test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0(", "item_0(");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0( test");
CHECK(code_edit->get_caret_column() == 7);
/* End of both. */
code_edit->clear();
code_edit->insert_text_at_caret("item_1( test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0(", "item_0(");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0( test");
CHECK(code_edit->get_caret_column() == 7);
/* Full set. */
/* End on completion entry. */
code_edit->clear();
code_edit->insert_text_at_caret("item_1 test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0()", "item_0()");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0() test");
CHECK(code_edit->get_caret_column() == 8);
/* Full set. */
/* End on completion entry. */
code_edit->clear();
code_edit->insert_text_at_caret("item_1 test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0()", "item_0()");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0() test");
CHECK(code_edit->get_caret_column() == 8);
/* End of text*/
code_edit->clear();
code_edit->insert_text_at_caret("item_1() test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0", "item_0");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0() test");
CHECK(code_edit->get_caret_column() == 6);
/* End of text*/
code_edit->clear();
code_edit->insert_text_at_caret("item_1() test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0", "item_0");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0() test");
CHECK(code_edit->get_caret_column() == 6);
/* End of both. */
code_edit->clear();
code_edit->insert_text_at_caret("item_1() test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0()", "item_0()");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0() test");
CHECK(code_edit->get_caret_column() == 8);
/* End of both. */
code_edit->clear();
code_edit->insert_text_at_caret("item_1() test");
code_edit->set_caret_column(2);
code_edit->add_code_completion_option(CodeEdit::CodeCompletionKind::KIND_CLASS, "item_0()", "item_0()");
code_edit->update_code_completion_options();
SEND_GUI_ACTION(code_edit, "ui_text_completion_replace");
CHECK(code_edit->get_line(0) == "item_0() test");
CHECK(code_edit->get_caret_column() == 8);
}
}
memdelete(code_edit);
@ -3198,33 +3200,35 @@ TEST_CASE("[SceneTree][CodeEdit] symbol lookup") {
code_edit->set_symbol_lookup_on_click_enabled(true);
CHECK(code_edit->is_symbol_lookup_on_click_enabled());
/* Set size for mouse input. */
code_edit->set_size(Size2(100, 100));
if (TS->has_feature(TextServer::FEATURE_FONT_DYNAMIC) && TS->has_feature(TextServer::FEATURE_SIMPLE_LAYOUT)) {
/* Set size for mouse input. */
code_edit->set_size(Size2(100, 100));
code_edit->set_text("this is some text");
code_edit->set_text("this is some text");
Point2 caret_pos = code_edit->get_caret_draw_pos();
caret_pos.x += 58;
SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MouseButton::NONE, MouseButton::NONE);
CHECK(code_edit->get_text_for_symbol_lookup() == "this is s" + String::chr(0xFFFF) + "ome text");
Point2 caret_pos = code_edit->get_caret_draw_pos();
caret_pos.x += 58;
SEND_GUI_MOUSE_EVENT(code_edit, caret_pos, MouseButton::NONE, MouseButton::NONE);
CHECK(code_edit->get_text_for_symbol_lookup() == "this is s" + String::chr(0xFFFF) + "ome text");
SIGNAL_WATCH(code_edit, "symbol_validate");
SIGNAL_WATCH(code_edit, "symbol_validate");
#ifdef OSX_ENABLED
SEND_GUI_KEY_EVENT(code_edit, Key::META);
SEND_GUI_KEY_EVENT(code_edit, Key::META);
#else
SEND_GUI_KEY_EVENT(code_edit, Key::CTRL);
SEND_GUI_KEY_EVENT(code_edit, Key::CTRL);
#endif
Array signal_args;
Array arg;
arg.push_back("some");
signal_args.push_back(arg);
SIGNAL_CHECK("symbol_validate", signal_args);
Array signal_args;
Array arg;
arg.push_back("some");
signal_args.push_back(arg);
SIGNAL_CHECK("symbol_validate", signal_args);
SIGNAL_UNWATCH(code_edit, "symbol_validate");
SIGNAL_UNWATCH(code_edit, "symbol_validate");
memdelete(code_edit);
memdelete(code_edit);
}
}
TEST_CASE("[SceneTree][CodeEdit] line length guidelines") {

View file

@ -46,10 +46,14 @@ TEST_SUITE("[[TextServer]") {
Ref<TextServer> ts = TextServerManager::get_singleton()->get_interface(i);
TEST_FAIL_COND(ts.is_null(), "Invalid TS interface.");
if (!ts->has_feature(TextServer::FEATURE_FONT_DYNAMIC)) {
continue;
}
RID font = ts->create_font();
ts->font_set_data_ptr(font, _font_NotoSans_Regular, _font_NotoSans_Regular_size);
TEST_FAIL_COND(font == RID(), "Loading font failed.");
ts->free(font);
ts->free_rid(font);
}
}
@ -58,12 +62,16 @@ TEST_SUITE("[[TextServer]") {
Ref<TextServer> ts = TextServerManager::get_singleton()->get_interface(i);
TEST_FAIL_COND(ts.is_null(), "Invalid TS interface.");
if (!ts->has_feature(TextServer::FEATURE_FONT_DYNAMIC) || !ts->has_feature(TextServer::FEATURE_SIMPLE_LAYOUT)) {
continue;
}
RID font1 = ts->create_font();
ts->font_set_data_ptr(font1, _font_NotoSans_Regular, _font_NotoSans_Regular_size);
RID font2 = ts->create_font();
ts->font_set_data_ptr(font2, _font_NotoSansThaiUI_Regular, _font_NotoSansThaiUI_Regular_size);
Vector<RID> font;
Array font;
font.push_back(font1);
font.push_back(font2);
@ -93,10 +101,10 @@ TEST_SUITE("[[TextServer]") {
TEST_FAIL_COND(glyphs[j].font_size != 16, "Incorrect glyph font size.");
}
ts->free(ctx);
ts->free_rid(ctx);
for (int j = 0; j < font.size(); j++) {
ts->free(font[j]);
ts->free_rid(font[j]);
}
font.clear();
}
@ -107,7 +115,7 @@ TEST_SUITE("[[TextServer]") {
Ref<TextServer> ts = TextServerManager::get_singleton()->get_interface(i);
TEST_FAIL_COND(ts.is_null(), "Invalid TS interface.");
if (!ts->has_feature(TextServer::FEATURE_BIDI_LAYOUT)) {
if (!ts->has_feature(TextServer::FEATURE_FONT_DYNAMIC) || !ts->has_feature(TextServer::FEATURE_BIDI_LAYOUT)) {
continue;
}
@ -116,7 +124,7 @@ TEST_SUITE("[[TextServer]") {
RID font2 = ts->create_font();
ts->font_set_data_ptr(font2, _font_NotoNaskhArabicUI_Regular, _font_NotoNaskhArabicUI_Regular_size);
Vector<RID> font;
Array font;
font.push_back(font1);
font.push_back(font2);
@ -145,10 +153,10 @@ TEST_SUITE("[[TextServer]") {
}
}
ts->free(ctx);
ts->free_rid(ctx);
for (int j = 0; j < font.size(); j++) {
ts->free(font[j]);
ts->free_rid(font[j]);
}
font.clear();
}
@ -159,6 +167,10 @@ TEST_SUITE("[[TextServer]") {
Ref<TextServer> ts = TextServerManager::get_singleton()->get_interface(i);
TEST_FAIL_COND(ts.is_null(), "Invalid TS interface.");
if (!ts->has_feature(TextServer::FEATURE_FONT_DYNAMIC) || !ts->has_feature(TextServer::FEATURE_SIMPLE_LAYOUT)) {
continue;
}
RID font1 = ts->create_font();
ts->font_set_data_ptr(font1, _font_NotoSans_Regular, _font_NotoSans_Regular_size);
RID font2 = ts->create_font();
@ -166,7 +178,7 @@ TEST_SUITE("[[TextServer]") {
RID font3 = ts->create_font();
ts->font_set_data_ptr(font3, _font_NotoNaskhArabicUI_Regular, _font_NotoNaskhArabicUI_Regular_size);
Vector<RID> font;
Array font;
font.push_back(font1);
font.push_back(font2);
font.push_back(font3);
@ -198,7 +210,7 @@ TEST_SUITE("[[TextServer]") {
TEST_FAIL_COND((soft || space || hard || virt || elo), "Invalid glyph flags.");
}
}
ts->free(ctx);
ts->free_rid(ctx);
}
{
@ -241,7 +253,7 @@ TEST_SUITE("[[TextServer]") {
}
}
}
ts->free(ctx);
ts->free_rid(ctx);
}
{
@ -294,7 +306,7 @@ TEST_SUITE("[[TextServer]") {
}
}
ts->free(ctx);
ts->free_rid(ctx);
}
{
@ -322,7 +334,7 @@ TEST_SUITE("[[TextServer]") {
TEST_FAIL_COND((soft || space || hard || virt || elo), "Invalid glyph flags.");
}
}
ts->free(ctx);
ts->free_rid(ctx);
}
if (ts->has_feature(TextServer::FEATURE_BREAK_ITERATORS)) {
@ -350,11 +362,11 @@ TEST_SUITE("[[TextServer]") {
TEST_FAIL_COND((soft || space || hard || virt || elo), "Invalid glyph flags.");
}
}
ts->free(ctx);
ts->free_rid(ctx);
}
for (int j = 0; j < font.size(); j++) {
ts->free(font[j]);
ts->free_rid(font[j]);
}
font.clear();
}
@ -365,6 +377,10 @@ TEST_SUITE("[[TextServer]") {
Ref<TextServer> ts = TextServerManager::get_singleton()->get_interface(i);
TEST_FAIL_COND(ts.is_null(), "Invalid TS interface.");
if (!ts->has_feature(TextServer::FEATURE_FONT_DYNAMIC) || !ts->has_feature(TextServer::FEATURE_SIMPLE_LAYOUT)) {
continue;
}
String test_1 = U"test test test";
// 5^ 10^
@ -373,7 +389,7 @@ TEST_SUITE("[[TextServer]") {
RID font2 = ts->create_font();
ts->font_set_data_ptr(font2, _font_NotoSansThaiUI_Regular, _font_NotoSansThaiUI_Regular_size);
Vector<RID> font;
Array font;
font.push_back(font1);
font.push_back(font2);
@ -395,10 +411,10 @@ TEST_SUITE("[[TextServer]") {
TEST_FAIL_COND(brks[5] != 14, "Invalid line break position.");
}
ts->free(ctx);
ts->free_rid(ctx);
for (int j = 0; j < font.size(); j++) {
ts->free(font[j]);
ts->free_rid(font[j]);
}
font.clear();
}
@ -409,12 +425,16 @@ TEST_SUITE("[[TextServer]") {
Ref<TextServer> ts = TextServerManager::get_singleton()->get_interface(i);
TEST_FAIL_COND(ts.is_null(), "Invalid TS interface.");
if (!ts->has_feature(TextServer::FEATURE_FONT_DYNAMIC) || !ts->has_feature(TextServer::FEATURE_SIMPLE_LAYOUT)) {
continue;
}
RID font1 = ts->create_font();
ts->font_set_data_ptr(font1, _font_NotoSans_Regular, _font_NotoSans_Regular_size);
RID font2 = ts->create_font();
ts->font_set_data_ptr(font2, _font_NotoNaskhArabicUI_Regular, _font_NotoNaskhArabicUI_Regular_size);
Vector<RID> font;
Array font;
font.push_back(font1);
font.push_back(font2);
@ -438,7 +458,7 @@ TEST_SUITE("[[TextServer]") {
width = ts->shaped_text_fit_to_width(ctx, 100, TextServer::JUSTIFICATION_WORD_BOUND | TextServer::JUSTIFICATION_KASHIDA);
TEST_FAIL_COND((width <= width_old || width > 100), "Invalid fill width.");
ts->free(ctx);
ts->free_rid(ctx);
ctx = ts->create_shaped_text();
TEST_FAIL_COND(ctx == RID(), "Creating text buffer failed.");
@ -451,7 +471,7 @@ TEST_SUITE("[[TextServer]") {
width = ts->shaped_text_fit_to_width(ctx, 100, TextServer::JUSTIFICATION_WORD_BOUND | TextServer::JUSTIFICATION_KASHIDA);
TEST_FAIL_COND((width <= width_old || width > 100), "Invalid fill width.");
ts->free(ctx);
ts->free_rid(ctx);
}
ctx = ts->create_shaped_text();
@ -463,10 +483,10 @@ TEST_SUITE("[[TextServer]") {
width = ts->shaped_text_fit_to_width(ctx, 100, TextServer::JUSTIFICATION_WORD_BOUND);
TEST_FAIL_COND((width <= width_old || width > 100), "Invalid fill width.");
ts->free(ctx);
ts->free_rid(ctx);
for (int j = 0; j < font.size(); j++) {
ts->free(font[j]);
ts->free_rid(font[j]);
}
font.clear();
}