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
4import { ComboBox, Button } from "std-widgets.slint";
5export component TestCase inherits Window {
6
7 in-out property <string> clicked;
8 in-out property <bool> a-checked <=> a.checked;
9 out property <bool> a-focused <=> a.has-focus;
10 public function focus-a() { a.focus(); }
11
12
13 HorizontalLayout {
14 alignment: start;
15 a := Button {
16 checkable: true;
17 text: "Aaa";
18 accessible-description: "Checkable Button";
19 clicked => {clicked += "a"; }
20 }
21
22 b := Button {
23 text: "Bbb";
24 accessible-description: "Normal Button";
25 clicked => {clicked += "b"; }
26 }
27
28 Button {
29 text: "Ccc";
30 clicked => {clicked += "c"; }
31 }
32 }
33
34}
35
36
37/*
38```rust
39use slint::{SharedString};
40use slint::platform::Key;
41
42let instance = TestCase::new().unwrap();
43
44slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(Key::Space));
45
46assert_eq!(instance.get_clicked(), SharedString::from(""));
47assert_eq!(instance.get_a_checked(), false);
48
49let mut result = slint_testing::ElementHandle::find_by_element_id(&instance, "TestCase::a").collect::<Vec<_>>();
50assert_eq!(result.len(), 1);
51let aaa = result.pop().unwrap();
52assert_eq!(aaa.accessible_label().unwrap(), "Aaa");
53assert_eq!(aaa.accessible_description().unwrap(), "Checkable Button");
54assert_eq!(aaa.accessible_value(), None);
55assert_eq!(aaa.accessible_value_maximum(), None);
56assert_eq!(aaa.accessible_value_minimum(), None);
57assert_eq!(aaa.accessible_value_step(), None);
58assert_eq!(instance.get_a_focused(), false);
59assert_eq!(aaa.accessible_checked(), Some(false));
60assert_eq!(aaa.accessible_checkable(), Some(true));
61aaa.invoke_accessible_default_action();
62assert_eq!(instance.get_clicked(), SharedString::from("a"));
63assert_eq!(instance.get_a_checked(), true, "button Aaa was not checked");
64assert_eq!(aaa.accessible_checked(), Some(true));
65assert_eq!(instance.get_a_focused(), false);
66instance.set_clicked("".into());
67
68instance.invoke_focus_a();
69assert_eq!(instance.get_a_focused(), true);
70slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(Key::Space));
71assert_eq!(instance.get_clicked(), SharedString::from("a"));
72assert_eq!(instance.get_a_checked(), false, "button aaa was not toggled on space");
73assert_eq!(aaa.accessible_checked(), Some(false));
74assert_eq!(instance.get_a_focused(), true);
75
76slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(Key::Return));
77assert_eq!(instance.get_clicked(), SharedString::from("aa"));
78assert_eq!(instance.get_a_checked(), true, "button aaa was not toggled on enter");
79assert_eq!(aaa.accessible_checked(), Some(true));
80assert_eq!(instance.get_a_focused(), true);
81
82let mut result = slint_testing::ElementHandle::find_by_element_id(&instance, "TestCase::b").collect::<Vec<_>>();
83assert_eq!(result.len(), 1);
84let bbb = result.pop().unwrap();
85assert_eq!(bbb.accessible_label().unwrap(), "Bbb");
86assert_eq!(bbb.accessible_description().unwrap(), "Normal Button");
87assert_eq!(bbb.accessible_value(), None);
88assert_eq!(bbb.accessible_checked(), Some(false));
89assert_eq!(bbb.accessible_checkable(), Some(false));
90let origin = bbb.absolute_position();
91let size = bbb.size();
92slint_testing::send_mouse_click(&instance, origin.x + size.width/2., origin.y + size.height/2.);
93assert_eq!(instance.get_clicked(), SharedString::from("aab"));
94assert_eq!(bbb.accessible_checked(), Some(false));
95
96// a is still focused
97assert_eq!(instance.get_a_focused(), true);
98
99
100```
101
102```cpp
103auto handle = TestCase::create();
104const TestCase &instance = *handle;
105
106auto label_search = slint::testing::ElementHandle::find_by_element_id(handle, "TestCase::a");
107assert(label_search.size() == 1);
108auto aaa = label_search[0];
109assert_eq(aaa.accessible_label().value(), "Aaa");
110assert_eq(aaa.accessible_description().value(), "Checkable Button");
111assert(!aaa.accessible_value());
112assert(!aaa.accessible_value_maximum());
113assert(!aaa.accessible_value_minimum());
114assert(!aaa.accessible_value_step());
115assert_eq(aaa.accessible_checked().value(), false);
116assert_eq(aaa.accessible_checkable().value(), true);
117aaa.invoke_accessible_default_action();
118assert_eq(instance.get_clicked(), "a");
119assert_eq(aaa.accessible_checked().value(), true);
120assert_eq(instance.get_a_focused(), false);
121
122instance.set_clicked("");
123
124instance.invoke_focus_a();
125slint_testing::send_keyboard_string_sequence(&instance, " ");
126assert_eq(instance.get_clicked(), "a");
127assert_eq(aaa.accessible_checked().value(), false);
128assert_eq(instance.get_a_focused(), true);
129slint_testing::send_keyboard_string_sequence(&instance, "\n");
130assert_eq(instance.get_clicked(), "aa");
131assert_eq(aaa.accessible_checked().value(), true);
132assert_eq(instance.get_a_focused(), true);
133
134label_search = slint::testing::ElementHandle::find_by_element_id(handle, "TestCase::b");
135assert(label_search.size() == 1);
136auto bbb = label_search[0];
137assert_eq(bbb.accessible_label().value(), "Bbb");
138assert_eq(bbb.accessible_description().value(), "Normal Button");
139assert(!bbb.accessible_value());
140assert_eq(bbb.accessible_checkable().value(), false);
141assert_eq(bbb.accessible_checked().value(), false);
142auto origin = bbb.absolute_position();
143auto size = bbb.size();
144slint_testing::send_mouse_click(&instance, origin.x + size.width / 2, origin.y + size.height / 2);
145assert_eq(instance.get_clicked(), "aab");
146assert_eq(bbb.accessible_checked().value(), false);
147assert_eq(instance.get_a_focused(), true);
148
149
150```
151
152*/
153