From f88e5c8ef7ef526c5c294cf972c009d82a5c4f6a Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Wed, 7 Aug 2024 12:11:26 +0200 Subject: [PATCH] tests: Test deleting the parent for a focus scope from a key event Attempt at reproducing #5698 although that doesn't panic but the test is still worth commiting --- tests/cases/models/delete_from_clicked.slint | 69 ++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/tests/cases/models/delete_from_clicked.slint b/tests/cases/models/delete_from_clicked.slint index df8f8dedd6..e115a1cfbc 100644 --- a/tests/cases/models/delete_from_clicked.slint +++ b/tests/cases/models/delete_from_clicked.slint @@ -14,6 +14,20 @@ export global Glob { component Button { callback clicked(); in property text; + HorizontalLayout { + FocusScope { + width: 1px; + height: 3%; + key-pressed(k) => { + if k.text == " " { + clicked(); + return accept; + } + return reject; + } + } + Rectangle {} + } Rectangle { background: yellow; Text { text: text; } @@ -58,6 +72,24 @@ slint_testing::send_mouse_click(&instance, 150., 150.); assert_eq!(instance.global::>().get_value(), "world"); ``` +// same thing but with the keyboard +```rust +let instance = TestCase::new().unwrap(); +let model = std::rc::Rc::new(slint::VecModel::::from( + vec!["hello".into(), "world".into()])); +instance.global::>().set_model(model.clone().into()); +instance.global::>().on_clicked(move |val|{ + assert_eq!(val, "world"); + model.remove(1); +}); +slint_testing::send_keyboard_string_sequence(&instance, "\t"); +slint_testing::send_keyboard_string_sequence(&instance, "\t"); +slint_testing::send_keyboard_string_sequence(&instance, " "); +slint_testing::send_keyboard_string_sequence(&instance, " "); +slint_testing::send_keyboard_string_sequence(&instance, "\t"); +assert_eq!(instance.global::>().get_value(), "world"); +``` + ```cpp auto handle = TestCase::create(); TestCase &instance = *handle; @@ -75,6 +107,27 @@ slint_testing::send_mouse_click(&instance, 150., 150.); assert_eq(instance.global().get_value(), "world"); ``` +```cpp +auto handle = TestCase::create(); +TestCase &instance = *handle; + +std::vector array; +array.push_back("hello"); +array.push_back("world"); +auto model = std::make_shared>(std::move(array)); +instance.global().set_model(model); +instance.global().on_clicked([=](slint::SharedString val){ + assert_eq(val, "world"); + model->erase(1); +}); +slint_testing::send_keyboard_string_sequence(&instance, "\t"); +slint_testing::send_keyboard_string_sequence(&instance, "\t"); +slint_testing::send_keyboard_string_sequence(&instance, " "); +slint_testing::send_keyboard_string_sequence(&instance, " "); +slint_testing::send_keyboard_string_sequence(&instance, "\t"); +assert_eq(instance.global().get_value(), "world"); +``` + ```js var instance = new slint.TestCase({}); @@ -88,5 +141,21 @@ slintlib.private_api.send_mouse_click(instance, 150., 150.); assert.equal(instance.Glob.value, "world"); ``` +```js +var instance = new slint.TestCase({}); +let model = new slintlib.ArrayModel(["hello", "world"]); +instance.Glob.model = model; +instance.Glob.clicked = (val) => { + assert.equal(val, "world"); + model.remove(1, 1); +}; +slintlib.private_api.send_keyboard_string_sequence(instance, "\t"); +slintlib.private_api.send_keyboard_string_sequence(instance, "\t"); +slintlib.private_api.send_keyboard_string_sequence(instance, " "); +slintlib.private_api.send_keyboard_string_sequence(instance, " "); +slintlib.private_api.send_keyboard_string_sequence(instance, "\t"); +assert.equal(instance.Glob.value, "world"); +``` + */