diff --git a/addons/godot_xterm/native/src/terminal.cpp b/addons/godot_xterm/native/src/terminal.cpp index 26200bb..02adb19 100644 --- a/addons/godot_xterm/native/src/terminal.cpp +++ b/addons/godot_xterm/native/src/terminal.cpp @@ -25,6 +25,7 @@ using namespace godot; void Terminal::_bind_methods() { + ADD_SIGNAL(MethodInfo("data_sent", PropertyInfo(Variant::PACKED_BYTE_ARRAY, "data"))); ADD_SIGNAL(MethodInfo("key_pressed", PropertyInfo(Variant::PACKED_BYTE_ARRAY, "data"), PropertyInfo(Variant::OBJECT, "event"))); ClassDB::bind_method(D_METHOD("get_cols"), &Terminal::get_cols); @@ -229,6 +230,8 @@ void Terminal::_write_cb(tsm_vte *vte, const char *u8, size_t len, void *data) term->emit_signal("key_pressed", data.get_string_from_utf8(), term->last_input_event_key); term->last_input_event_key.unref(); } + + term->emit_signal("data_sent", data); } } diff --git a/test/test_terminal.gd b/test/test_terminal.gd index 03d8805..822c9a8 100644 --- a/test/test_terminal.gd +++ b/test/test_terminal.gd @@ -9,6 +9,7 @@ var terminal: Terminal func before_each(): terminal = Terminal.new() terminal.size = Vector2(400, 200) + watch_signals(terminal) add_child_autofree(terminal) @@ -76,3 +77,17 @@ class TestWrite: func test_returns_response_to_multiple_queries_among_other_data(): var response = terminal.write("hello\r\nworld\u001b[6nother\r\ndata\u001b[5ntest") assert_eq(response, "\u001b[2;6R\u001b[0n") + + func test_data_sent_emitted_on_query(): + terminal.write("\u001b[6n") + assert_signal_emitted(terminal, "data_sent") + + func test_data_sent_emitted_with_response(): + terminal.write("\u001b[6n") + assert_signal_emitted_with_parameters( + terminal, "data_sent", ["\u001b[1;1R".to_utf8_buffer()] + ) + + func test_data_sent_not_emitted_when_empty_string_written(): + terminal.write("") + assert_signal_emit_count(terminal, "data_sent", 0)