1// Copyright © SixtyFPS GmbH <info@slint.dev>
2// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0
3
4TestCase := Rectangle {
5 width: 400phx;
6 height: 600phx;
7
8 input1 := TextInput {
9 width: parent.width;
10 height: 200phx;
11 }
12
13 input2 := TextInput {
14 y: 200phx;
15 width: parent.width;
16 height: 200phx;
17 }
18
19 input3 := TextInput {
20 y: 400phx;
21 width: parent.width;
22 height: 200phx;
23 read-only: true;
24 }
25
26 property<bool> input1_focused: input1.has_focus;
27 property<string> input1_text: input1.text;
28 property<bool> input2_focused: input2.has_focus;
29 property<string> input2_text: input2.text;
30 property<bool> input3_focused: input3.has_focus;
31}
32
33/*
34```rust
35use slint::private_unstable_api::re_exports::{InputMethodRequest, InputType, MouseCursor};
36
37let instance = TestCase::new().unwrap();
38assert!(!instance.get_input1_focused());
39assert!(!instance.get_input2_focused());
40assert_eq!(slint_testing::access_testing_window(instance.window(), |window| window.ime_requests.take()).len(), 0);
41
42slint_testing::send_mouse_click(&instance, 150., 100.);
43assert!(instance.get_input1_focused());
44assert!(!instance.get_input2_focused());
45let mut ime_requests = slint_testing::access_testing_window(instance.window(), |window| window.ime_requests.take()).into_iter();
46assert!(matches!(ime_requests.next(), Some(InputMethodRequest::Enable(props)) if props.input_type == InputType::Text));
47assert!(matches!(ime_requests.next(), Some(InputMethodRequest::Update(..))));
48assert!(ime_requests.next().is_none());
49assert_eq!(slint_testing::access_testing_window(instance.window(), |window| window.mouse_cursor.get()), MouseCursor::Text);
50
51slint_testing::send_keyboard_string_sequence(&instance, "Only for field 1");
52assert_eq!(instance.get_input1_text(), "Only for field 1");
53assert_eq!(instance.get_input2_text(), "");
54
55slint_testing::access_testing_window(instance.window(), |window| window.ime_requests.take());
56slint_testing::send_mouse_click(&instance, 150., 300.);
57assert!(!instance.get_input1_focused());
58assert!(instance.get_input2_focused());
59let mut ime_requests = slint_testing::access_testing_window(instance.window(), |window| window.ime_requests.take()).into_iter();
60assert!(matches!(ime_requests.next(), Some(InputMethodRequest::Disable)));
61assert!(matches!(ime_requests.next(), Some(InputMethodRequest::Enable(props)) if props.input_type == InputType::Text));
62assert!(matches!(ime_requests.next(), Some(InputMethodRequest::Update(..))));
63assert!(ime_requests.next().is_none());
64
65
66slint_testing::send_keyboard_string_sequence(&instance, "Only for field 2");
67assert_eq!(instance.get_input1_text(), "Only for field 1");
68assert_eq!(instance.get_input2_text(), "Only for field 2");
69
70slint_testing::access_testing_window(instance.window(), |window| window.ime_requests.take());
71slint_testing::send_mouse_click(&instance, 150., 500.);
72assert!(!instance.get_input1_focused());
73assert!(!instance.get_input2_focused());
74assert!(instance.get_input3_focused());
75let mut ime_requests = slint_testing::access_testing_window(instance.window(), |window| window.ime_requests.take()).into_iter();
76assert!(matches!(ime_requests.next(), Some(InputMethodRequest::Disable)));
77assert!(ime_requests.next().is_none());
78assert_eq!(slint_testing::access_testing_window(instance.window(), |window| window.mouse_cursor.get()), MouseCursor::Text);
79
80```
81
82```cpp
83auto handle = TestCase::create();
84const TestCase &instance = *handle;
85assert(!instance.get_input1_focused());
86assert(!instance.get_input2_focused());
87
88slint_testing::send_mouse_click(&instance, 150., 100.);
89assert(instance.get_input1_focused());
90assert(!instance.get_input2_focused());
91
92slint_testing::send_keyboard_string_sequence(&instance, "Only for field 1");
93assert_eq(instance.get_input1_text(), "Only for field 1");
94assert_eq(instance.get_input2_text(), "");
95
96slint_testing::send_mouse_click(&instance, 150., 300.);
97assert(!instance.get_input1_focused());
98assert(instance.get_input2_focused());
99
100slint_testing::send_keyboard_string_sequence(&instance, "Only for field 2");
101assert_eq(instance.get_input1_text(), "Only for field 1");
102assert_eq(instance.get_input2_text(), "Only for field 2");
103```
104
105```js
106var instance = new slint.TestCase();
107assert(!instance.input1_focused);
108assert(!instance.input2_focused);
109
110slintlib.private_api.send_mouse_click(instance, 150., 100.);
111assert(instance.input1_focused);
112assert(!instance.input2_focused);
113
114slintlib.private_api.send_keyboard_string_sequence(instance, "Only for field 1");
115assert.equal(instance.input1_text, "Only for field 1");
116assert.equal(instance.input2_text, "");
117
118slintlib.private_api.send_mouse_click(instance, 150., 300.);
119assert(!instance.input1_focused);
120assert(instance.input2_focused);
121
122slintlib.private_api.send_keyboard_string_sequence(instance, "Only for field 2");
123assert.equal(instance.input1_text, "Only for field 1");
124assert.equal(instance.input2_text, "Only for field 2");
125```
126*/
127