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
4component ButtonBase inherits Text { }
5
6component Button inherits ButtonBase {
7 accessible-role: button;
8 accessible-label: "optimized";
9 extra-label := Text {
10 accessible-label: "extra";
11 }
12 inner-rect := Rectangle {}
13}
14
15export component TestCase {
16 first := Button { }
17
18 second := Button {
19 accessible-label: "plain";
20 }
21
22 // third
23 Button {
24 accessible-label: "third";
25 }
26}
27
28/*
29```rust
30let instance = TestCase::new().unwrap();
31let mut button_search = slint_testing::ElementHandle::find_by_element_id(&instance, "Button::root");
32let mut button = button_search.next().unwrap();
33assert!(button.is_valid());
34assert_eq!(button.accessible_label().unwrap(), "optimized");
35button = button_search.next().unwrap();
36assert!(button.is_valid());
37assert_eq!(button.accessible_label().unwrap(), "plain");
38button = button_search.next().unwrap();
39assert!(button.is_valid());
40assert_eq!(button.accessible_label().unwrap(), "third");
41assert!(button_search.next().is_none());
42
43let id_search_result = slint_testing::ElementHandle::find_by_element_id(&instance, "TestCase::second").collect::<Vec<_>>();
44assert_eq!(id_search_result.len(), 1);
45assert_eq!(id_search_result[0].type_name().unwrap(), "Button");
46assert_eq!(id_search_result[0].id().unwrap(), "TestCase::second");
47assert_eq!(id_search_result[0].bases().unwrap().collect::<Vec<_>>(), ["ButtonBase", "Text"]);
48
49let texts = slint_testing::ElementHandle::find_by_element_type_name(&instance, "Text").filter_map(|elem| elem.accessible_label()).collect::<Vec<_>>();
50assert_eq!(texts, vec!["optimized", "extra", "plain", "extra", "third", "extra"]);
51
52let inner_rects = slint_testing::ElementHandle::find_by_element_id(&instance, "Button::inner-rect").collect::<Vec<_>>();
53assert_eq!(inner_rects.len(), 3);
54for x in inner_rects {
55 assert_eq!(x.type_name().unwrap(), "Rectangle");
56 assert_eq!(x.id().unwrap(), "Button::inner-rect");
57 assert_eq!(x.bases().unwrap().next(), None);
58 assert_eq!(x.accessible_label(), None);
59 assert_eq!(x.accessible_description(), None);
60}
61```
62
63```cpp
64auto handle = TestCase::create();
65//const TestCase &instance = *handle;
66
67auto button_search = slint::testing::ElementHandle::find_by_element_id(handle, "Button::root");
68assert_eq(button_search.size(), 3);
69auto button = button_search[0];
70assert(button.is_valid());
71assert_eq(button.accessible_label().value(), "optimized");
72button = button_search[1];
73assert(button.is_valid());
74assert_eq(button.accessible_label().value(), "plain");
75button = button_search[2];
76assert(button.is_valid());
77assert_eq(button.accessible_label().value(), "third");
78
79auto id_search_result = slint::testing::ElementHandle::find_by_element_id(handle, "TestCase::second");
80assert_eq(id_search_result.size(), 1);
81assert_eq(*id_search_result[0].type_name(), "Button");
82assert_eq(*id_search_result[0].id(), "TestCase::second");
83assert_eq((*id_search_result[0].bases()).size(), 2);
84assert_eq((*id_search_result[0].bases())[0], "ButtonBase");
85assert_eq((*id_search_result[0].bases())[1], "Text");
86
87auto inner_rects = slint::testing::ElementHandle::find_by_element_id(handle, "Button::inner-rect");
88assert_eq(inner_rects.size(), 3);
89for (auto x : inner_rects) {
90 assert_eq(*x.type_name(), "Rectangle");
91 assert_eq(*x.id(), "Button::inner-rect");
92 assert_eq(x.bases()->size(), 0);
93 assert(!x.accessible_label());
94 assert(!x.accessible_description());
95}
96```
97*/
98