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
4
5import { TextEdit } from "std-widgets.slint";
6export component TestCase inherits Window {
7 width: 100px;
8 height: 100px;
9 edit := TextEdit {
10 width: 100%;
11 height: 100%;
12 }
13
14 forward-focus: edit;
15 out property <bool> textedit-focused <=> edit.has_focus;
16 callback edited <=> edit.edited;
17 in-out property <string> text <=> edit.text;
18 in-out property <bool> read-only <=> edit.read-only;
19 public function paste() {
20 edit.paste();
21 }
22}
23
24/*
25
26
27```rust
28use std::cell::RefCell;
29use std::rc::Rc;
30use slint::SharedString;
31
32let instance = TestCase::new().unwrap();
33
34let edits = Rc::new(RefCell::new(Vec::new()));
35instance.on_edited({
36 let edits = edits.clone();
37 move |val| {
38 edits.borrow_mut().push(val);
39}});
40
41slint_testing::send_mouse_click(&instance, 25., 25.);
42assert!(instance.get_textedit_focused());
43assert!(edits.borrow().is_empty());
44
45slint_testing::send_keyboard_string_sequence(&instance, "hello");
46assert_eq!(edits.borrow().clone(), vec!["h", "he", "hel", "hell", "hello"]);
47
48
49// Test mouse cursor for issue 6444
50use slint::{LogicalPosition, platform::{WindowEvent, PointerEventButton}};
51use slint::private_unstable_api::re_exports::MouseCursor;
52assert_eq!(slint_testing::access_testing_window(instance.window(), |window| window.mouse_cursor.get()), MouseCursor::Text, "after previous click");
53instance.window().dispatch_event(WindowEvent::PointerPressed { position: LogicalPosition::new(50.0, 50.0), button: PointerEventButton::Middle });
54assert_eq!(slint_testing::access_testing_window(instance.window(), |window| window.mouse_cursor.get()), MouseCursor::Text, "Middle button pressed");
55instance.window().dispatch_event(WindowEvent::PointerReleased { position: LogicalPosition::new(50.0, 50.0), button: PointerEventButton::Middle });
56assert_eq!(slint_testing::access_testing_window(instance.window(), |window| window.mouse_cursor.get()), MouseCursor::Text, "Middle button released");
57instance.window().dispatch_event(WindowEvent::PointerExited { });
58assert_eq!(slint_testing::access_testing_window(instance.window(), |window| window.mouse_cursor.get()), MouseCursor::Default);
59
60// test page up/down
61for x in 0..10 {
62 slint_testing::send_keyboard_string_sequence(&instance, &format!("\nThis is line {x}"));
63}
64slint_testing::send_keyboard_string_sequence(&instance, "\nEnd");
65slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(slint::platform::Key::PageUp));
66slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(slint::platform::Key::PageUp));
67slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(slint::platform::Key::PageUp));
68slint_testing::send_keyboard_string_sequence(&instance, "Begin!");
69assert_eq!(instance.get_text(), "Begin!hello\nThis is line 0\nThis is line 1\nThis is line 2\nThis is line 3\nThis is line 4\nThis is line 5\nThis is line 6\nThis is line 7\nThis is line 8\nThis is line 9\nEnd");
70slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(slint::platform::Key::PageDown));
71slint_testing::send_keyboard_string_sequence(&instance, "XX");
72let test = instance.get_text();
73// The exact position depends on the size of the content which depends on the style, but it should be in the middle
74assert!(test.contains("\nThis iXXs line"));
75
76// use the menu key to pen the menu and choose select call
77instance.set_text("Hello👋".into());
78assert_eq!(instance.get_text(), "Hello👋");
79// select all
80slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(slint::platform::Key::Menu));
81slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(slint::platform::Key::UpArrow));
82slint_testing::send_keyboard_string_sequence(&instance, "\n");
83assert_eq!(instance.get_text(), "Hello👋");
84// copy
85slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(slint::platform::Key::Menu));
86slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(slint::platform::Key::DownArrow));
87slint_testing::send_keyboard_string_sequence(&instance, &SharedString::from(slint::platform::Key::DownArrow));
88slint_testing::send_keyboard_string_sequence(&instance, "\n");
89assert_eq!(instance.get_text(), "Hello👋");
90
91slint_testing::send_keyboard_string_sequence(&instance, "Xxx");
92assert_eq!(instance.get_text(), "Xxx");
93instance.invoke_paste();
94assert_eq!(instance.get_text(), "XxxHello👋");
95
96let mut edit_search = slint_testing::ElementHandle::find_by_element_id(&instance, "TestCase::edit");
97let edit = edit_search.next().unwrap();
98assert_eq!(edit.accessible_read_only(), Some(false));
99instance.set_read_only(true);
100assert_eq!(edit.accessible_read_only(), Some(true));
101```
102
103*/
104